1625-5 王子昂 总结《2018年3月5日》 【连续第520天总结】
A. 文件完整性校验(1)
B.
反调试、加密保护等的对抗措施通常是Patch,即修改程序
另一方面,为了防止程序被篡改而产生的病毒破坏、信息改动等
产生了完整性校验的技术
通常使用哈希函数来计算文件的散列值,并保存该值,然后运行时再次哈希,并比对。
磁盘文件校验
CRC算法可以对一段字符串进行CRC-32转换,最后得到一个4字节长的CRC32值。
当要实现完整性校验时,首先将需要校验的文件当做一段字符串,计算该字符串的CRC32值,然后在文件的某个地方(或另一个文件)储存这个CRC32值。
当文件运行的时候,对文件重新进行CRC32计算,再与原储存的CRC32值进行比较,如果文件有改动,则CRC32值会产生变化。
而破解者可以自己计算CRC32值,重新写入程序中,使其改动后的比较也成功。
应对方法是对储存值进行加密,将其通过异或、移位等操作保护起来
或者在程序中的某些算法使用到该储存值,使其无法被更改。但这样做仍然存在记录储存值后Patch的可能,所以必须使算法足够复杂。
内存映像校验
磁盘文件完整性校验虽然可以抵抗破解者直接修改磁盘文件,但对于内存补丁(注入)却毫无效果,因此必须对内存也进行校验
对数据区段校验是没有意义的,因为程序运行过程中会修改变量的值,导致数据区段发生变化
而对不变的代码区段校验则可以实现,将代码的机器码作为数据进行哈希,得到的值进行利用或校验。同时这种方法还可以对抗软件断点–软件断点修改代码的值会使得哈希出错
C. 明日计划
代码与数据结合