好友
阅读权限150
听众
最后登录1970-1-1
|
楼主|
ximo
发表于 2008-8-27 21:00
手脱Polycrypt PE 2.1.5二:全保护的完美脱壳法
现在来讲下完美处理这个壳的方法.
既然是完美来脱,我就加上全部的保护方式
这样,前面的脱壳方法就会失效.出现的异常情况我们可以来看一下
载入后的代码没发生任何改变,同样使用ESP定律.也同样来到OEP
哈哈,可别高兴的太早!不要以为到了OEP就大事告生了,好戏还在后头呢!
打开I-REC,载入所要脱壳的进程,就傻眼了,哈~
晕,原来PE头被壳给毁掉了,还真够狠啊,汗,没办法,从头来,只能重开头进行分析了.
CTRL+F2,重新载入程序
F8单步走2次
在retn处F2下断,接着SHIFT+F9,然后取消断点,F7跟进,来到下面的地方
在下面的NOP处F2下断,SHIFT+F9,取消断点.
这时候可以发现,上面的代码全为空代码了,下面的代码也开始解码了,非常好!
接下来,就开始处理有些垃圾东西了.
其实,好多人都会说脱这个壳时候很卡,也都知道是CC(int 3)异常引起的,但为什么没人去处理这些垃圾呢?汗,想不明白...
来查找下面形式的垃圾代码:
retn
int 3
lea XXXXXXXX
可以直接这么查找:
CTRL+B,查找 C3 CC 8D 85
找到后,把int 3命令给NOP掉,因为是垃圾东西
接着找
CTRL+B,查找66 C7 42 06 FF FF
把下面的4个mov语句全NOP掉,顺手把下面的rep stos byte ptr es:[edi]也给NOP掉
理由,仍然是因为都是垃圾语句,只会让程序出现异常或机器卡
接着,继续查找垃圾
push0
push0
push4
push0
push0
push80000000
或者CTRL+B 查找6A 00 6A 00 6A 04 6A 00 6A 00 68 00 00 00 80
把第一个push 0的2个字节改为EB 19
目的是为了跳开createfile
接着,CTRL+G,输入GetModuleHandleA
查找到后,F2下断
F9运行2次后,取消断点,ALT+F9返回
继续处理垃圾,把所看到的int 3语句都给NOP,一共有4个
下面来处理IAT的加密,上讲也已经看到,有2个指针被加密了.
CTRL+B 查找80 BD ?? ?? ?? ?? 01 75 5E
(至于原理,下讲具体讲解下吧)
找到后,把cmp下面的je改为jmp,也就是我们一般叫的magic jump
下面,就直达OEP了.
CTRL+B 查找5D 9D 61 68 ?? ?? ?? ?? C3
或者,F8单步跟下去也一样.
在pop ebp处F2下断,SHIFT+F9,取消断点
可以发现,原来的push 0变化成了push 10cc
很明显,把OEP的地址压入栈了,F8几次后,就到达OEP了!
可以发现,OEP处的代码都是红色的,那所谓了.
再打开I-REC来看一下,一切正常了吧
指针也全部有效了吧
下面,用Lord PE脱壳后,修复一下,就大功告成了!
附件中是试炼程序 |
|