首先提供软件下载地址/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 窗口化
00461008 04 24 add al,24
0046100B C3 retn
3. 先使用最后一次异常法
(1).F9执行,此时断点断在00472AFB CD 01 int 1这一行处,此时堆栈表示如下:
0012FF78 /0012FFE0 指针到下一个 SEH 记录
0012FF
0012FF80 |3E312131
选中0012FF
(2).此时跳到00472ADF 8B
F2下断,shift+f9运行
再f2下断,再次shift+f9运行,此时跳至
00472B
此时取消所有断点和内存断点。
(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
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入口,但是当点击获取输入表时,提示:无法读取此进程内存。
如图:
本人初次学脱壳,有分析不当之处,请高手指点一下如何解决这个问题?