发布网友 发布时间:2022-04-22 06:00
共2个回答
热心网友 时间:2023-11-24 05:32
校验和是常见的冲突避免技术。
校验和(checksum)是指一类算法,可以将任意字节的数据(以下统称为文件)转换为一个简短的值。我们通常也将其称为文件的指纹(fingerprint)或者哈希值(hash)。这可以用于检查两个文件的内容是否相同。
通常来说,文件在储存或传输的过程中有一定可能会被损坏,例如网络故障,黑客攻击,或者储存介质的个别字节出现故障。如果我们知道文件原来的校验和,就可以随时重新做一次校验和,如果结果和以前不一样,就说明文件被改变了。这也是为什么一些网站的提供文件下载时同时也会提供各种校验和,以便用户下载以后对照校验和确保文件无误。
热心网友 时间:2023-11-24 05:32
登录
首页
学习
实践
活动
专区
工具
TVP
返回腾讯云官网
全栈程序员站长
55.1K 篇文章
关注
校验和(Checksum)「建议收藏」
2022-09-20 15:05:34阅读 1230
大家好,又见面了,我是你们的朋友全栈君。
校验和(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 对整个代码进行校验
每个程序至少有一个代码区块和数据区块,数据区块属性可读写,程序运行时全局变量通常会放在这里,这些数据会动态变化,因此校验这部分是没什么意义,而代码段只读,存放的是程序代码,在程序中数据数不会变的,因此用这部分进行内存校验是可行的.
具体实现方法:
(