您的位置:首页 > 其它

NSIS安装包自校验机制

2012-12-22 10:09 916 查看
当NSIS安装包自校验错误的时候(数据不完整或被病毒感染等原因)会弹出下图这样的提示







NSIS自校验分为两个部分:数据完整性检查和CRC校验



一、数据完整性

检查数据的SIZE,如果当前的数据SIZE小于特征中记录的值,那么就认为安装包是不完整的,就会弹出提示窗口。

安装程序首先打开自己,从头部开始每次读取512字节,然后取这512字节的前28字节(数据体头部特征)

图中高亮的部分







在调试安装包过程中发现这个头部的前20字节是固定的

01~04 Byte: 00 00 00 00

05~08 Byte: EF BE AD DE

09~20 Byte: Ansi字符串 "NullsoftInst"

21~24 Byte: 不详

25~28 Byte: 整个数据体的Size,从这个特征头的开始偏移算起(图中的0x8600)



二、CRC校验

安装程序会取一段数据计算其CRC的值并和记录中保存的值作比较

这段数据就是从文件的偏移0x200处开始,一直到数据体的末尾再减去4字节(这4字节就是CRC值)

用图片来说明一下







数据体头从0x8600开始

图中的 24 00 00 00 就是数据体的大小(背景高亮处 0x8600 ~ 0x8623)

接着的 11 11 11 11 就是安装数据,当然实际中这段代码是很长的的,图中是为了演示才改的4个字节

最后的 88 88 88 88 就是正确的CRC值。从文件0x200处开始到0x861F处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: