上次我们讲了下用脱壳机脱壳 很多朋友直呼不过瘾,也迫不及待的想手动脱壳,那么今天就剧透下,讲讲ESP定律吧

一般来讲 ESP定律脱压缩壳很好用  所谓的ESP定律 就是堆栈平衡 原理大家可以百度一下,我就不细说了。

我们先用OD打开上节课 压缩过的哪个文件, 可以看到 第一条指令就是pushad 说明他是压缩壳 那么可以用ESP定律

当你打算用ESP定律的时候,操作就比较简单的了,你只需要盯着右边的寄存器窗口看,然后F8单步执行,当你执行的时候 只有ESP变红色(EIP不算),就不要单步了,也就是下图这种情况

在寄存器窗口选中ESP寄存器 然后选择数据窗口中跟随,

我们看到 数据窗口第一条是18FF6C根ESP寄存器是一样的,我们在数据窗口选中前面4个字节,然后 右键 断点 硬件访问 word

断点下号以后,我们就可以F9运行了,F9 运行我们发现立马又暂停了,程序来到这个下图处,我们继续单步 遇到向上跳转的时候就选中下一行F4

这里有向上跳转,我们不跟,直接运行到他的下一行

我们选中它下一行代码,然后右键 断点 与星岛选定位置 或者直接选中下一行代码 F4 这里不是说不执行向上跳转,而是让他自己执行完 然后到下一行断下来,因为我们始终要跑到这里来 就懒得单步跟了

运行到jmp的时候注意,脱壳的时候看到JMP call 都稍微注意下 看地址远不远,如果很远的话 可能直接到OEP,jmp跳到 004017f0 然后当前的地址是004075b2 差的比较大 我们F8单步跟过去,注意 如果是call的话就是F7

我们看到下图,是VC++的OEP 各类语言的OPE可以参考http://www.dbgpro.com/archives/347.html

到了OEP以后 我们右键 用OllyDump脱壳

然后来到下面这个界面,我们记住箭头处的OEP,然后点脱壳

输入文件名 保存

运行看看,是不是OK了


如果你们运行时这样 那就继续下一步 修复!

我们打开IMPORT REC 先选中一我们的进程

打开以后 先输入刚才让你们记下来的OEP 然后 点自动查找IAT,再点获取输入表

看到没 多了点东西

然后点击 无效函数

如果他帮你选中了一堆函数的话,我们就继续

我们店右键 删除 或者剪切指针都行,如果他没帮你选中的话 你不要执行这一步

指针删了以后 点转储到文件

在弹出的框框里面 找到刚才脱壳 但是打不开的文件   然后点打开

然后他会帮你生成一个你的选中的文件名+_的程序,就是修复后的,运行试试看 

打赏