计算资源中ICON,Image,Bmp的CRC值,检查自己的程序图片是否被篡改

来源:互联网 发布:淘宝集分宝怎么获得 编辑:程序博客网 时间:2024/05/22 06:29
char crc[MAX_PATH] = {0};bool CalcResourceCrc(WORD ResourceID)    {        AFX_MANAGE_STATE(AfxGetStaticModuleState());        HINSTANCE hInst = AfxGetResourceHandle();        hRes = FindResource(hInst, MAKEINTRESOURCE(ResourceID), RT_GROUP_ICON);        //int iTest = SizeofResource(hInst, hRes);            int err = ::GetLastError();        if (!hRes) return false;        HRSRC hMem = (HRSRC)LoadResource(hInst, hRes);        HRSRC lpResource = (HRSRC)LockResource(hMem);        //BYTE bTest[30] = {0};        //memcpy(bb, lpResource, iTest); 这一段是ICON的开头信息,有点紊乱,以后研究.        int nID = LookupIconIdFromDirectoryEx((PBYTE)lpResource, TRUE,                0, 0, LR_DEFAULTCOLOR);        HRSRC hResource = FindResource(hInst,                     MAKEINTRESOURCE(nID),                     MAKEINTRESOURCE(RT_ICON));        hMem = (HRSRC)LoadResource(hInst, hResource);         lpResource = (HRSRC)LockResource(hMem);        int len = SizeofResource(hInst, hResource);        BYTE b  = new BYTE[len + 1];        b[len]  = 0;         memcpy(b, lpResource, len);        _snprintf(crc, MAX_PATH, "%08X", CRC::CRC_32(b, len));        CFile inout;        if(inout.Open(_T("icon.bin"), CFile::modeWrite | CFile::modeCreate))        {            inout.Write(b, len);            inout.Close();        }        delete[] b;          return true;    }

经测试,输出来的文件ICON.BIN和 原来在资源中的文件的二进制值完全匹配。这个方法也可以推广到bitmap, image, jpg上,此处省略一万字。

对于RT_GROUP_ICON 找到的ICON文件头信息,有点不一样,不明觉厉,以后再追究。

参考:http://blog.csdn.net/kvw3000/article/details/69805

以下是实验的对比图


0 0
原创粉丝点击