晚上没事,加上采用了简单的办法和以前开发过的搜索内存的工具,居然完成了。
下面是界面和一些代码:
- //开始搜索
- void C文件特征码扫描工具Dlg::OnBnClickedButton3()
- {
- m_CListBox.ResetContent();
- CFile AimFile;
- std::fstream SettingFile;
- SettingFile.open(m_csSettingFilePath);
- char chDataName[100];
- char chCode[150];
- BYTE BCode[75],BBuff[1024*100];
- int iOffset=0;
- wchar_t wchDataName[100];
- 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[i]==BCode[0])
- {
- if(CompareTwoBYTE(&BBuff[i],BCode,Size))//如果相等,那么找到了
- {
- CString csBuff=wchDataName;
- wchar_t wchBuff[30];
- _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[i]!=B2[i])
- {
- return FALSE;
- }
- }
- return TRUE;
- }