基础脱壳教程12:自校验的去除方法

有时候我们脱壳之后, 程序无法运行, 用 ImportREC 修复之后, 添加了附加数据之后, 还是无法运行起来, 这时候就涉及到自校验的问题

首先 ESP 定律脱壳
发现修复完之后无法运行
我们用 ImportREC 发现它的输入表只有一个函数, 这一般情况下是不可能的
现在我们手动查找 IAT
随便找个 call, d xxxxxxx, 然后向上拉, 拉到第一个全为零的数据, 把地址贴到 RVA, 然后大小就填个 1000
发现很多无效函数, 尝试等级一修复, 无法修复
尝试直接剪切掉
程序能正常跑起来了, 但还是显示程序被非法修改
与 OD 插件脱完壳的结果一样

这就涉及到自校验的问题

我们把脱完壳之后的程序用 OD 载入, 之前那个 OD 不要关了

两边都下断bp CreateFileA

运行

然后两边都调试>执行到用户代码 alt+F9 返回一下看看

然后走下来, 每个跳转都比较一下

比较跳转, 我们发现源程序0040120C处的跳转未实现, 而脱壳后的程序这里跳转实现了

我们只需要把脱壳后的程序, 这个跳转让它不实现就行了

直接改成 jne 或者 nop

然后右键复制到可执行文件, 保存一下看看

发现程序正常运行~

我们来分析一下, 为什么脱壳后的程序跳转会实现, 而源程序的跳转未实现
分析上面的 cmp 语句, 直接改这里的代码也可以

基本思路主要是开两个 OD 比较一下

当然有些自校验比较强, 具体情况具体分析