首先提供软件下载地址/Files/mfm11111/TestWin.rar(是一个共享的窗口化的小软件)

 

 

1.     首先,用peid查看,发现是UltraProtect 1.x -> RISCO Software Inc.壳,如下图所示:

2.     od载入后,显示壳的入口信息如下:

00461000 窗口化.<>  60              pushad

00461001         E8 01000000     call 窗口化.00461007

00461006       - 78 83           js short 窗口化.00460F8B

00461008         04 24           add al,24

0046100A         06              push es

0046100B         C3              retn

0046100C         C1D7 21         rcl edi,21

 

3.     先使用最后一次异常法

(1).F9执行,此时断点断在00472AFB         CD 01           int 1这一行处,此时堆栈表示如下:

0012FF78  /0012FFE0  指针到下一个 SEH 记录

0012FF7C  |00472ADF  SE 句柄

0012FF80  |3E312131

选中0012FF7C  |00472ADF  SE 句柄,右健数据窗口根随,选 中,在00472ADF下内存访问断点,shift+F9运行

(2).此时跳到00472ADF         8B5C24 0C       mov ebx,dword ptr ss:[esp+C]

F2下断,shift+f9运行

f2下断,再次shift+f9运行,此时跳至

00472B2F         8B048E          mov eax,dword ptr ds:[esi+ecx*4]

此时取消所有断点和内存断点。

3)选 中断末,如:00472B4B         C3              retn

F4.

 

4.     alt+M打开内存镜像,找到0040100,下f2断点,到达:

004721DC         8B85 04014100   mov eax,dword ptr ss:[ebp+410104]

004721E2         0FB600          movzx eax,byte ptr ds:[eax]

004721E5         83E8 33         sub eax,33

004721E8         3D 99000000     cmp eax,99

004721ED         74 10           je short 窗口化.004721FF

 

记下此处的位置。

 

5.重新运行,在00461001         E8 01000000     call 窗口化.00461007

处,使用esp定律法,此时跳至:

004615FD         55              push ebp

004615FE         8F05 E51C4600   pop dword ptr ds:[461CE5]

00461604         60              pushad

00461605         E8 01000000     call 窗口化.0046160B

再执行一次,会发现跳至00461605         E8 01000000     call 窗口化.0046160B

再执行一次,就到最后一次异常了,说明00461605         E8 01000000     call 窗口化.0046160B,这里壳对代码和资源解压完毕,此时就是最佳的脱壳点。用loadpe脱壳

 

5.     为了方便修复,我们到假的oep处,也就是前面的四步。也就是:

004721DC         8B85 04014100   mov eax,dword ptr ss:[ebp+410104]

然后使用输入表重建,提示找到oep入口,但是当点击获取输入表时,提示:无法读取此进程内存。

如图:

 

本人初次学脱壳,有分析不当之处,请高手指点一下如何解决这个问题?

 

 

 

 

 

posted on 2009-04-17 13:25  jasonM  阅读(596)  评论(0编辑  收藏  举报