IMAGE_OPTIONAL_HEADER.CheckSum
为一个DWORD(64位下也是DWORD)型的校验值,用于检查PE文件的完整性,在一些内核模式驱动及DLL中,该值必须是存在且正确的
校验值的计算很简单:
- 将IMAGE_OPTIONAL_HEADER.CheckSum请0(因为这部分在文件中也是有值的,计算时得去掉)
- 以WORD为单位对数据块进行累加,记住要用adc指令而不是add
- 将累加和加上文件的长度(还是用adc)
将计算结果与IMAGE_OPTIONAL_HEADER.CheckSum
进行比较,不相等则说明文件被修改过或不完整
方法一
可利用ImageHlp.DLL 库里的MapFileAndCheckSum函数对PE文件进行求校验和操作
#include <windows.h>
#include<ImageHlp.h>
#pragma comment(lib,"ImageHlp.lib")