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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值