吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10254|回复: 15
收起左侧

[原创] 手脱Polycrypt PE 2.1.5

[复制链接]
ximo 发表于 2008-8-27 20:59
或许,这该是我在52发的最后个教程了,大四了,该为今后的工作和生活打算一下了,毕竟,脱壳破解当不了什么职业.
不过,有空的话,我还是会写写什么学习心得,脱壳破解的文章的.

手脱Polycrypt PE 2.1.5一:简单的脱壳法

Polycrypt PE 2.1.5是个很老的壳了,说来惭愧,最近才看到这壳,于是拿来试炼了下,幸好是个软柿子,于是,写个笔记,供大家交流学习.
首先看下加壳选项:
1.GIF

除了Use File Locking,几乎是加了所有保护了
下面开始简单的脱壳吧(至于完美的脱壳法,下一讲再具体讲).
OD载入后,会出现一个错误的提示,不用管它,直接点确定就行了.异常设置为忽略所有异常,隐藏下OD
2.GIF
看到这个载入代码,大家就很容易想到用ESP定律了
(我说过,尽量不要用ESP定律去脱壳,虽然ESP定律很方便,但是会错过好多可以学习的东西.再者,在52pojie论坛里也看到了几个不能版本的脱壳方法,虽然没用ESP定律了,但是,我觉得都没有好好的去分析壳,因此,没多大意义.由于此讲只是简单的脱壳法,因此我还是用ESP定律来进行脱壳)
0040D00D >60pushad0040D00EE8 EDFFFFFF call unpackme.0040D000 //单步到这里后,就可以用ESP定律了0040D013^ EB 80 jmp short unpackme.0040CF950040D015F5cmc0040D0163E:F5 cmc0040D018A0 50F53891 mov al,byte ptr ds:[9138F550]0040D01D4Cdec esp0040D01E15 4CF54258 adc eax,5842F54C0040D023F5cmc

hr ESP,SHIFT+F9,来到下面的地方(OD可能会很卡)
3.GIF
这时候应该很明显了吧,已经把OEP的地址给压栈了,F8单步2次,就可以来到OEP了.
4.GIF
然后打开LordPE,完整转存下来吧
接着就修复.用I-REC
5.GIF
不过,发现有2个无效的指针,无论用等级1,等级3,都无法进行修复.
没办法,只有手动查找了

PS:不过有个简单的方法,那就是把无效的指针给删除,而不是我们一般所使用的剪切,就可以正常修复成功了!

下面就手动查找吧!

在I-REC中记下无效地址为:6394,而加上基址就是00406394

OD重新载入程序,然后在命令窗口输入
dd 00406394
接着下硬件写入断点

6.GIF
F9运行多次,注意在寄存机窗口观察

5次后,看寄存器
7.GIF
哈哈,找到了吧,这个指针就是GetModuleHandleA吧

另外一个也用同样的方法跟
8.GIF
另外一个就是CreateFileA

接着就手动输入2个指针,转存修复一下吧,程序正常运行!

至此,简单脱壳方法到此结束!

其实这个壳跟ORiEN非常类似,大家可以同样去试炼一下,附件中是主程序+试炼品

主程序+试炼品.rar

86 KB, 下载次数: 38, 下载积分: 吾爱币 -1 CB

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| ximo 发表于 2008-8-27 21:00
手脱Polycrypt PE 2.1.5二:全保护的完美脱壳法

现在来讲下完美处理这个壳的方法.
既然是完美来脱,我就加上全部的保护方式
1.GIF
这样,前面的脱壳方法就会失效.出现的异常情况我们可以来看一下
2.GIF
载入后的代码没发生任何改变,同样使用ESP定律.也同样来到OEP
3.GIF
哈哈,可别高兴的太早!不要以为到了OEP就大事告生了,好戏还在后头呢!

打开I-REC,载入所要脱壳的进程,就傻眼了,哈~
4.GIF
晕,原来PE头被壳给毁掉了,还真够狠啊,汗,没办法,从头来,只能重开头进行分析了.

CTRL+F2,重新载入程序

F8单步走2次
5.GIF
在retn处F2下断,接着SHIFT+F9,然后取消断点,F7跟进,来到下面的地方
6.GIF
在下面的NOP处F2下断,SHIFT+F9,取消断点.
7.GIF
这时候可以发现,上面的代码全为空代码了,下面的代码也开始解码了,非常好!

接下来,就开始处理有些垃圾东西了.

其实,好多人都会说脱这个壳时候很卡,也都知道是CC(int 3)异常引起的,但为什么没人去处理这些垃圾呢?汗,想不明白...

来查找下面形式的垃圾代码:

retn
int 3
lea XXXXXXXX

可以直接这么查找:
CTRL+B,查找 C3 CC 8D 85
8.GIF

找到后,把int 3命令给NOP掉,因为是垃圾东西

接着找

CTRL+B,查找66 C7 42 06 FF FF

9.GIF

把下面的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

10.GIF

目的是为了跳开createfile

接着,CTRL+G,输入GetModuleHandleA

查找到后,F2下断

11.GIF

F9运行2次后,取消断点,ALT+F9返回

12.GIF

继续处理垃圾,把所看到的int 3语句都给NOP,一共有4个

下面来处理IAT的加密,上讲也已经看到,有2个指针被加密了.

CTRL+B 查找80 BD ?? ?? ?? ?? 01 75 5E

(至于原理,下讲具体讲解下吧)

找到后,把cmp下面的je改为jmp,也就是我们一般叫的magic jump
16.GIF

下面,就直达OEP了.

CTRL+B 查找5D 9D 61 68 ?? ?? ?? ?? C3

或者,F8单步跟下去也一样.

在pop ebp处F2下断,SHIFT+F9,取消断点

13.GIF
可以发现,原来的push 0变化成了push 10cc

很明显,把OEP的地址压入栈了,F8几次后,就到达OEP了!
14.GIF

可以发现,OEP处的代码都是红色的,那所谓了.
15.GIF


再打开I-REC来看一下,一切正常了吧


指针也全部有效了吧

下面,用Lord PE脱壳后,修复一下,就大功告成了!

附件中是试炼程序

unpackme.rar

38 KB, 下载次数: 8, 下载积分: 吾爱币 -1 CB

 楼主| ximo 发表于 2008-8-27 21:00
手脱Polycrypt PE 2.1.5三;IAT加密的简单分析

本讲只对其IAT加密进行分析,分析下如何查找magic jump

由于只讲解IAT的处理,故我就不加全保护了,对第一讲中的程序直接拿来分析了

首先用ESP定律到达OEP,然后,就查找IAT

找到第一讲中所找到的加密地址00406394
1.GIF

为了便于分析,我们从前面几个指针开始分析吧,比如:00406388

然后,CTRL+F2,重新载入

在数据窗口CTRL+G查找00406388
然后,下硬件写入断点.接着就F9运行

5次F9后,在寄存器中就开始出现IAT了

这时候,我们就取消断点,F8跟吧.

2.GIF
0040D32F8B95 516D4000 mov edx,dword ptr ss:[ebp+406D51]//把基址放到EDX中0040D3358B06mov eax,dword ptr ds:[esi]0040D3370BC0or eax,eax0040D33975 04 jnz short unpackme.0040D33F0040D33B8B46 10 mov eax,dword ptr ds:[esi+10]0040D33ECCint3//NOP0040D33F03C2add eax,edx0040D3410385 3D6D4000 add eax,dword ptr ss:[ebp+406D3D]0040D3478B18mov ebx,dword ptr ds:[eax]0040D3498B7E 10 mov edi,dword ptr ds:[esi+10]0040D34C03FAadd edi,edx0040D34E03BD 3D6D4000 add edi,dword ptr ss:[ebp+406D3D]0040D35485DBtest ebx,ebx //判断是否处理完IAT,处理完则跳0040D3560F84 96000000 je unpackme.0040D3F20040D35CF7C3 00000080 test ebx,800000000040D36275 06 jnz short unpackme.0040D36A0040D36403DAadd ebx,edx0040D36683C3 02 add ebx,20040D369CCint3//NOP0040D36A81E3 FFFFFF0F and ebx,0FFFFFFF0040D37053push ebx//下一个IAT压栈0040D371FFB5 356D4000 push dword ptr ss:[ebp+406D35]0040D377FF95 C26E4000 call dword ptr ss:[ebp+406EC2]//GetProcAddress函数0040D37D80BD 326E4000 01cmp byte ptr ss:[ebp+406E32],1//判断是否加密,magic jump0040D38475 5E jnz short unpackme.0040D3E40040D3863B85 0D6C4000 cmp eax,dword ptr ss:[ebp+406C0D]0040D38C75 08 jnz short unpackme.0040D3960040D38E8D85 40674000 lea eax,dword ptr ss:[ebp+406740]0040D394EB 4E jmp short unpackme.0040D3E40040D3963B85 1D6C4000 cmp eax,dword ptr ss:[ebp+406C1D]0040D39C75 08 jnz short unpackme.0040D3A60040D39E8D85 026A4000 lea eax,dword ptr ss:[ebp+406A02]0040D3A4EB 3E jmp short unpackme.0040D3E40040D3A63B85 ED6B4000 cmp eax,dword ptr ss:[ebp+406BED]0040D3AC75 08 jnz short unpackme.0040D3B60040D3AE8D85 726A4000 lea eax,dword ptr ss:[ebp+406A72]0040D3B4EB 2E jmp short unpackme.0040D3E40040D3B63B85 D16B4000 cmp eax,dword ptr ss:[ebp+406BD1]0040D3BC75 08 jnz short unpackme.0040D3C60040D3BE8D85 256B4000 lea eax,dword ptr ss:[ebp+406B25]0040D3C4EB 1E jmp short unpackme.0040D3E40040D3C63B85 F16B4000 cmp eax,dword ptr ss:[ebp+406BF1]0040D3CC75 08 jnz short unpackme.0040D3D60040D3CE8D85 566B4000 lea eax,dword ptr ss:[ebp+406B56]0040D3D4EB 0E jmp short unpackme.0040D3E40040D3D63B85 F96B4000 cmp eax,dword ptr ss:[ebp+406BF9]0040D3DC75 06 jnz short unpackme.0040D3E40040D3DE8D85 F26A4000 lea eax,dword ptr ss:[ebp+406AF2]0040D3E48907mov dword ptr ds:[edi],eax0040D3E68385 3D6D4000 04add dword ptr ss:[ebp+406D3D],40040D3ED^ E9 3CFFFFFF jmp unpackme.0040D32E0040D3F2CCint30040D3F383C6 14 add esi,140040D3F68B95 516D4000 mov edx,dword ptr ss:[ebp+406D51]0040D3FC^ E9 FBFEFFFF jmp unpackme.0040D2FC0040D4018DBD D7644000 lea edi,dword ptr ss:[ebp+4064D7]

跟踪可以发先,没被加密的IAT,magic jump下面的跳均能实现,若加密,则至少有1个跳不会实现,而是压入错误的信息

于是,2种处理方法

1:改magic jump,把JNZ改成JMP
2:把下面的lea语句全给NOP

用任何一种方法,都能跳过IAT的加密

下面的操作就是找OEP和dump了.

分析到此结束
zapline 发表于 2008-8-27 21:02
超人终于来了!!! [s:40]

占楼···狂学习!!!!!!!!!!!!
zapline 发表于 2008-8-27 21:05
手动输入2个指针,转存修复一下

这个不知道怎么做,超人,再讲讲!!!
 楼主| ximo 发表于 2008-8-27 21:49
引用第4楼zapline于2008-08-27 21:05发表的:
手动输入2个指针,转存修复一下

这个不知道怎么做,超人,再讲讲!!!

这个很简单的嘛,比如有什么指针无效,自己手动查找后,双击,再输入函数,点确定就OK

11.GIF
zapline 发表于 2008-8-27 21:53
说过我是菜鸟嘛!

我脱得第二种壳,第一种是 UPX

所以我的方法和脱 UPX一样,找到了OEP ,但成功不了[s:40]
XuZhenG 发表于 2008-8-27 23:54
关于 PE头无效的问题 可以用

ImportREC设置 从磁盘载入PE头解决..

鼓励多发高质量文章
小黑冰 发表于 2008-8-28 02:44
谢谢 小MO大哥`````
wgz001 发表于 2008-8-28 06:47
牛哇 狂学习下[s:40]
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 01:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表