一、 自校验定义:
这些程序会检查自己有没有被修改,如果发现被修改的话,便会离开或进行其它动作。
基本的校检方法包括 checksum, 检查大小, 检查跳转代码,等等。
对于我们而言,如果脱壳后的程序运行起来跟脱壳前的程序运行起来不一样,基本上就可以断定为程序增加了自校验机制
二、 自校验示例:
三、如何去除自校验: 1. 先进行OD脱壳 注:脱壳完毕后停留在脱壳界面,不要把OD关闭 2. 再开启一个OD,打开脱壳后的程序 3. 两个程序同时下断点 bp CreateFileA然后分别点击运行(F9)
注:在win7环境下无法OD无法使用这个命令进行断点,只要Ctrl+G, 输入"kernel32.CreateFileA",我们就可以定位到kernel32的CreateFileA了
4. 两个OD都点击【Alt+F9】执行到用户代码5. 两边同时单步(F8)往下走,查看两个程序是否有不一样的跳转(比如一个实现了一个没实现)
6. 接下来我们要做的就是把脱壳后的文件的跳转让它不实现就可以了① 最简单的方法就是直接把脱壳后的程序那里的跳转给NOP掉
②观察跳转的上一行汇编代码cmpeax,dword prt ss:[ebp-8],这是汇编代码,意思是eax和dwort进行比较,如果不相等就跳转,相等就不跳转,不懂可以百度,把它改成cmp eax,eax就可以了
③或者把jnz改成je或jz也可以,具体的意思可以去百度一下
7. 然后保存退出OD
8. 再次执行脱壳后的文件,OK,成功了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)