takeiteasy 发表于 2015-4-12 17:39:36

文件特征码扫描工具相关源码

//开始搜索
void C文件特征码扫描工具Dlg::OnBnClickedButton3()
{
        m_CListBox.ResetContent();
        CFile AimFile;
        std::fstream SettingFile;
        SettingFile.open(m_csSettingFilePath);
        char chDataName;
        char chCode;
        BYTE BCode,BBuff;
        int iOffset=0;
        wchar_t wchDataName;
        size_t Size;
        while(!SettingFile.eof())
        {
                SettingFile>>chDataName;
                MultiByteToWideChar(CP_ACP,0,chDataName,-1,wchDataName,100);
                memset(chCode,0,150);
                memset(BCode,0,75);
                SettingFile>>chCode;
                SettingFile>>iOffset;
                Size=CharToBYTE(chCode,BCode);//将读出的特征码由字符串转换BYTE数组
                if(Size==0)
                {
                        CString csBuffer=wchDataName;
                        csBuffer+=L":特征码有误";
                        m_CListBox.AddString(csBuffer);
                        continue;
                }
                //下面开始搜索整个文件
                ULONGLONG ullReadFileSize=0;
                BOOL bFind=FALSE;
                AimFile.Open(m_csAimFilePath,CFile::modeRead|CFile::typeBinary|CFile::shareDenyNone);
                while(ullReadFileSize<=AimFile.GetLength() && !bFind)
                {
                        AimFile.Read(BBuff,1024*100);//每次读取100K的数据
                        for(int i=0;i<1024*100;i++)
                        {
                                if(BBuff==BCode)
                                {
                                        if(CompareTwoBYTE(&BBuff,BCode,Size))//如果相等,那么找到了
                                        {
                                                CString csBuff=wchDataName;
                                                wchar_t wchBuff;
                                                _itow_s((int)ullReadFileSize+i+0x00400000+iOffset,wchBuff,16);
                                                csBuff+=L":";
                                                csBuff+=wchBuff;
                                                csBuff.MakeUpper();
                                                m_CListBox.AddString(csBuff);
                                                bFind=TRUE;
                                                break;
                                        }
                                }
                        }
                        ullReadFileSize+=1024*100;
                }
                AimFile.Close();
                if(!bFind)//如果没有找到
                {
                        CString csBuff=wchDataName;
                        csBuff+=L":NULL";
                        m_CListBox.AddString(csBuff);
                }
        }
        SettingFile.close();
}

BOOL C文件特征码扫描工具Dlg::CompareTwoBYTE(BYTE* B1, BYTE* B2, size_t Size)
{
        for(size_t i=0;i<Size;i++)
        {
                if(B1!=B2)
                {
                        return FALSE;
                }
        }
        return TRUE;
}
页: [1]
查看完整版本: 文件特征码扫描工具相关源码