计算资源中ICON,Image,Bmp的CRC值,检查自己的程序图片是否被篡改
2014-09-11 18:01
302 查看
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
以下是实验的对比图
相关文章推荐
- 编写计算“两个整数的最大公约数”程序。 要求通过键盘输入两个整数、检查输入整数是否符合要求,并计算出其最大公约数。
- CBitmap程序中动态加载 本地文件上的BMP图片资源
- 【小程序】background-image无法获取本地资源图片
- 判断ImageView加载的是否是资源里的那张图片
- WinCE显示资源中BMP图片的几种方法附自己个人实验数据
- 小程序 | background-image无法获取本地资源图片
- 使用python利用Image模块检查图片像素是否符合要求
- Use Custom Background Image for Application-为自己的Windows Phone程序使用自定义背景图片
- Image扩展,如何将网络图片显示在自己的程序中
- 程序安装时检查是否已经安装.NETFramework [转]
- 看使用 GetStartupInfo 检查自己是否被"调试"
- vc6中如何加入BMP图片资源
- 用命令检查自己电脑是否中***
- 在DLL组件中附加图片等资源,并在程序中引用_2
- asp.net 的一个新bug. 当你的程序出问题时, 不仅仅要检查自己的代码和逻辑, 还要检查微软的代码, 累吗?
- 正则表达式简单的检查输入email是否合法程序
- vc6中如何加入BMP图片资源
- 检查程序是否运行在VMWare虚拟机里
- 程序安装时检查是否已经安装.NETFramework [转]
- MySQL如何存储图片?---一个向数据库存取image文件的jsp程序