文件特征码扫描工具相关源码
//开始搜索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]