本帖最后由 Jian丶ylt 于 2015-11-15 00:54 编辑
1.载入PEID
FSG v1.33 (Eng) -> dulek/xt
2.载入OD,先F8跟一会
[Asm] 纯文本查看 复制代码 004103E3 > BE A4014000 mov esi,fsg1_33.004001A4 ; //程序入口
004103E8 AD lods dword ptr ds:[esi]
004103E9 93 xchg eax,ebx
004103EA AD lods dword ptr ds:[esi]
004103EB 97 xchg eax,edi
004103EC AD lods dword ptr ds:[esi]
3.来到这个位置的时候,我们看到一个push入栈,可以使用ESP定律,下硬件断点,然后shift+F9运行
[Asm] 纯文本查看 复制代码 004103EC AD lods dword ptr ds:[esi]
004103ED 56 push esi
004103EE 96 xchg eax,esi ; //ESP
004103EF B2 80 mov dl,0x80
004103F1 A4 movs byte ptr es:[edi],byte ptr d>
004103F2 B6 80 mov dh,0x80
4.ESP落脚点,然后继续F8,记得向上跳转的下一行F4,这就不多说了
[Asm] 纯文本查看 复制代码 [mw_shl_code=asm,true]0041045A AD lods dword ptr ds:[esi] ; //ESP落脚点
0041045B 48 dec eax
0041045C 74 0A je short fsg1_33.00410468
0041045E 79 02 jns short fsg1_33.00410462
00410460 AD lods dword ptr ds:[esi]
00410461 50 push eax
00410462 56 push esi
5.OK,找到关键跳了,可是这个跳转没有实现,我们需要让他实现,那么就要下条件断点,先分析跳转上一行的汇编代码,这是一个递减语句,具体汇编代码可以查看http://www.52pojie.cn/thread-420306-1-1.html,自己去分析学习。右键--断点--条件断点--输入"[esi]==0"--F9,OK,这样跳转就实现了,继续F8一下就是OEP了
[Asm] 纯文本查看 复制代码 00410482 FE0E dec byte ptr ds:[esi]
00410484 - 0F84 420CFFFF je fsg1_33.004010CC ; //关键跳
0041048A 56 push esi
0041048B 55 push ebp
0041048C FF53 04 call dword ptr ds:[ebx+0x4]
0041048F AB stos dword ptr es:[edi]
6.来到OEP,可以脱壳了
[Asm] 纯文本查看 复制代码 004010CC 55 push ebp ; //来到OEP
004010CD 8BEC mov ebp,esp
004010CF 83EC 44 sub esp,0x44
004010D2 56 push esi
004010D3 FF15 E0634000 call dword ptr ds:[0x4063E0]
004010D9 8BF0 mov esi,eax
004010DB 8A00 mov al,byte ptr ds:[eax]
004010DD 3C 22 cmp al,0x22
7.运行查壳
运行OK,查壳:Microsoft Visual C++ v6.0 SPx
|