有时候我们脱壳之后, 程序无法运行, 用 ImportREC 修复之后, 添加了附加数据之后, 还是无法运行起来, 这时候就涉及到自校验的问题
首先 ESP 定律脱壳
发现修复完之后无法运行
我们用 ImportREC 发现它的输入表只有一个函数, 这一般情况下是不可能的
现在我们手动查找 IAT
随便找个 call, d xxxxxxx
, 然后向上拉, 拉到第一个全为零的数据, 把地址贴到 RVA, 然后大小就填个 1000
发现很多无效函数, 尝试等级一修复, 无法修复
尝试直接剪切掉
程序能正常跑起来了, 但还是显示程序被非法修改
与 OD 插件脱完壳的结果一样
这就涉及到自校验的问题
我们把脱完壳之后的程序用 OD 载入, 之前那个 OD 不要关了
两边都下断bp CreateFileA
运行
然后两边都调试
>执行到用户代码
alt+F9 返回一下看看
然后走下来, 每个跳转都比较一下
比较跳转, 我们发现源程序0040120C
处的跳转未实现, 而脱壳后的程序这里跳转实现了
我们只需要把脱壳后的程序, 这个跳转让它不实现就行了
直接改成 jne
或者 nop
然后右键复制到可执行文件
, 保存一下看看
发现程序正常运行~
我们来分析一下, 为什么脱壳后的程序跳转会实现, 而源程序的跳转未实现
分析上面的 cmp
语句, 直接改这里的代码也可以