看流星社区

 找回密码
 注册账号
查看: 2498|回复: 0

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

[复制链接]

该用户从未签到

发表于 2015-4-12 17:39:36 | 显示全部楼层 |阅读模式
//开始搜索
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;
}
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-29 02:30

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表