问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

checksum文件 效验怎么算

发布网友 发布时间:2022-04-30 01:38

我来回答

1个回答

热心网友 时间:2022-05-11 06:09

校验和(Checksum)

PE的可选映像头(IMAGE_OPTION_HEADER)里面,有一个Checksum字段,是该文件的校验和,一般EXE文件可以使0,但一些重要的和系统DLL及驱动文件必须有一个校验和.

Windows 提供了一个API函数MapFileAndCheckSum 测试文件的Checksum,它位于IMAGEHLP.DLL链接库里,其原型:

ULONG MapFileAndCheckSum

{

LPSTR FileName, // 文件名

LPDWORD HeaderSum, // 指向PE文件头的CheckSum

LPDWORD new_checksum // 指向新计算出的Checksum

}

程序一旦运行后,new_checksum 地址处将放当前的文件的校验和,old_checksum地址指向PE文件的checksum字段

安全的方法是将此值放在注册表里,需要时比较.

内存映像校验

磁盘文件完整性校验可以抵抗解密者直接修改文件,但对内存补丁却没有效果,必须对内存关键的代码进行校验.

1 对整个代码进行校验

每个程序至少有一个代码区块和数据区块,数据区块属性可读写,程序运行时全局变量通常会放在这里,这些数据会动态变化,因此校验这部分是没什么意义,而代码段只读,存放的是程序代码,在程序中数据数不会变的,因此用这部分进行内存校验是可行的.

具体实现方法:

(1) 从内存中映像中得到PE相关数据,如代码块的RVA和内存大小

(2) 根据得到代码区块的RVA值和内存大小,计算出内存数据的CRC-32值

(3) 读取自身文件先前存储的CRC-32值(PE文件头前一个字段),这个值是通过软件写进去的.

(4) 比较两个CRC-32值.

这样比较内存的代码段校验,只要内存的数据被修改,就能发现。

BOOL CodeSectionCRC32()

{

PIMAGE_DOS_HEADER pDosHeader = NULL;

PIMAGE_NT_HEADERS pNTHeader = NULL;

PIMAGE_SECTION_HEADER pSection = NULL;

DWORD ImageBase,OriginalCRC32;

ImageBase = (DWORD)GetMoleHandle(NULL); // 取基址

pDosHeader = (PIMAGE_DOS_HEADER)ImageBase;

pNtHeader = (PIMAGE_NT_HEADER32)((DWORD)pDosHeader + pDosHeader -> e_lfanew);

// 定位到PE文件头前4个字节值,并读取存储在这里的CRC -32值

OriginalCRC32 = *((DWORD*)(DWORD)pNtHeader - 4);

pSecHeader = IMAGE_FIRST_SECTION(pNtHeader); // 得到第一个区块的地址

//假设第一个区块就是代码区块

if(OriginalCRC32 == CRC32((BYTE*)ImageBase + pSecHeader -> VirtualAddress)

// 为了方便加壳

// 上一句也可为if(OriginalCRC32 == CRC32((BYTE *)0x401000, 0x36AE)

return TRUE;

else

return FALSE;

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 微信聊天记录中向某账号发送的信息被长按该条消息删除后如何恢复?如 yy里面经常放什么战歌? Checksum计算 腊肠煮豆腐的做法,腊肠煮豆腐怎么做好吃,腊肠 CRC和checksum的区别 checksum这个校验的文件咋用? 豆腐炖香肠怎么做 如何计算checksum 如何计算TCP的CHECKSUM 战歌是什么意思? 战歌是什么意思啊 斗鱼直播天天说战歌 会务服务的会务流程 如何开物业保安会议? 如何做好会务保障工作? 怎么在ps里画出这样的波浪圈 保安会议内容有哪些 ps中 波浪圈 怎么画 六安苏埠糯米圆子的做法 物业保安会议提什么建议好呢 谁能告诉我PS怎么能做出下面这图的效果 波浪花边 除了水煮,香肠还能怎么吃呢? 触手tv剑仙,我以前看他直播的时候听过一首歌,当时他说我要放战歌了…。这首歌是送给喷子们的… md5 checksum与md5是一样吗 抖音标题跑到评论里怎么改回来 [串口通讯]关于发送指令时的 CHECKSUM,帮忙解析下通讯协议。 征途指挥刺探的时候YY里放战歌是怎么放的 苹果微信消息删除了怎么恢复 为何做香肠后煮出的香肠全成豆腐渣样? ip checksun 怎么计算 男人放这首歌代表他心里想表达什么呢! QQ巨轮怎么换人。 串口 通信 检验和 tt中放战歌为什么没声音 WireShark 中为什么会出现 Tcp Checksum Offload edid 的CHECKSUM怎么算 NMEA 0183 的 Checksum 如何计算 checksum函数在哪个头文件中定义 未成年QQ被盗,盗号者可以贷款吗? 函授本科可以考公务员本科以上学历的岗位吗?非全日制本科可以吗 我的QQ号被盗了,我在QQ号里面实名认证了,但是没有绑定银行卡,这样的情况下那个盗号者能不能贷款?