逆向核心原理:第二十章 内嵌补丁 与教科书不同的另一中打补丁方式2
上一次我介绍了一种自己调试patchme的独特方式,今天介绍另一中方法
上次的网址 https://www.cnblogs.com/czlnb/p/13996202.html
代码结构:
这一次我们要插入的地方是代码块4的末尾,因为这个地方已经运行了解压程序,但是没有运行校验程序,所以我们要修改代码块5的校验程序,以跳过它。
但是代码块5,是被加密的,所以要在代码块4中用代码来修改代码块5
总结一下 完成数据块A中字符的修改需要3步
1.将代码块4复制到空白区(这样就有空间插入我们的代码了)
原来代码块4的地址是在4010bd,现在我们把它放到401280 见下图
调用代码块4的指令也要改动
修改前:
修改后:
2.将填充校验的nop指令字节和要修改的字符串放入空白区
下图是校验代码
被圈起来的是比较指令,只有校验值为b08deb31(小端序)时才运行正常的代码,所以我们将这条指令填充为nop,直接跳入下一条指令
但是这部分代码是被加密的,所以我们用洞穴代码来修改
在401300处放入nop字节:
在401350处和401360处插入字符串:
3.在4012ab中插入字符串修改代码和修改循环校代码:
画红圈的是插入的代码
最后的结果: