首页
社区
课程
招聘
[旧帖] [原创]ESP定律+单步跟踪脱PECompact 2.x(申请邀请码) 0.00雪花
发表于: 2010-3-23 20:40 1293

[旧帖] [原创]ESP定律+单步跟踪脱PECompact 2.x(申请邀请码) 0.00雪花

2010-3-23 20:40
1293
来论坛学习一段时间了,写一篇入门菜鸟级的脱壳文章
首先载入加壳程序
第一步:
//壳的入口点如下
00401000 >  B8 90A85A00     mov eax,UnicornV.005AA890
00401005    50              push eax
00401006    64:FF35 0000000>push dword ptr fs:[0]//到此处时寄存器中的esp值变红,右键在数据窗口中跟随。此时寄存器和数据窗口的数据如第二步中所示。
0040100D    64:8925 0000000>mov dword ptr fs:[0],esp
00401014    33C0            xor eax,eax
00401016    8908            mov dword ptr ds:[eax],ecx
00401018    50              push eax
00401019    45              inc ebp
0040101A    43              inc ebx
0040101B    6F              outs dx,dword ptr es:[edi]
0040101C    6D              ins dword ptr es:[edi],dx
0040101D    70 61           jo short UnicornV.00401080
0040101F    637432 00       arpl word ptr ds:[edx+esi],si

第二步:
=============寄存器窗口=================
EAX 005AA890 UnicornV.005AA890
ECX 0012FFB0
EDX 7C92E4F4 ntdll.KiFastSystemCallRet
EBX 7FFD7000
ESP 0012FFC0
EBP 0012FFF0
ESI FFFFFFFF
EDI 7C930208 ntdll.7C930208
=============数据窗口==================
0012FFC0  005AA890  UnicornV.005AA890//右键断点硬件访问断点word
0012FFC4  7C817067  返回到 kernel32.7C817067
0012FFC8  7C930208  ntdll.7C930208
0012FFCC  FFFFFFFF
0012FFD0  7FFD7000
0012FFD4  80545C7D
0012FFD8  0012FFC8
0012FFDC  861AA9A8
0012FFE0  FFFFFFFF  SEH 链尾部
0012FFE4  7C839AC0  SE 句柄
按shift+F9

第三步:跳转到如下
7C94A9B5    3B45 F8         cmp eax,dword ptr ss:[ebp-8]
7C94A9B8    72 09           jb short ntdll.7C94A9C3
7C94A9BA    3B45 F4         cmp eax,dword ptr ss:[ebp-C]
7C94A9BD  ^ 0F82 53F9FFFF   jb ntdll.7C94A316
7C94A9C3    50              push eax
7C94A9C4    E8 67000000     call ntdll.7C94AA30
删除硬件断点。

第四步:接下来就是一步一步的单步跟踪
遇到第一个return返回到如下:
7C92E46A    0AC0            or al,al
7C92E46C    74 0C           je short ntdll.7C92E47A
7C92E46E    5B              pop ebx
7C92E46F    59              pop ecx
7C92E470    6A 00           push 0
7C92E472    51              push ecx
7C92E473    E8 C8EBFFFF     call ntdll.ZwContinue
//到这里之后再次转到如下:
005AA8C3    53              push ebx//继续单步下去
005AA8C4    51              push ecx
005AA8C5    57              push edi
005AA8C6    56              push esi
005AA8C7    52              push edx
005AA8C8    8D98 57120010   lea ebx,dword ptr ds:[eax+10001257]
005AA8CE    8B53 18         mov edx,dword ptr ds:[ebx+18]
005AA8D1    52              push edx
005AA8D2    8BE8            mov ebp,eax
005AA8D4    6A 40           push 40
005AA8D6    68 00100000     push 1000
005AA8DB    FF73 04         push dword ptr ds:[ebx+4]

很快就到如下位置:
005AA94C    5A              pop edx
005AA94D    5E              pop esi
005AA94E    5F              pop edi
005AA94F    59              pop ecx
005AA950    5B              pop ebx
005AA951    5D              pop ebp
005AA952  - FFE0            jmp eax  //此时数据窗口中的EAX值如下
EAX 004FA799 UnicornV.004FA799
ECX 0012FFB0
EDX 7C92E4F4 ntdll.KiFastSystemCallRet
EBX 7FFD7000
ESP 0012FFC4
EBP 0012FFF0
一个大的跳转,终于到达了OEP,如下所示:
004FA799    55              push ebp
004FA79A    8BEC            mov ebp,esp
004FA79C    6A FF           push -1
004FA79E    68 506E5600     push UnicornV.00566E50
004FA7A3    68 68ED4F00     push UnicornV.004FED68
004FA7A8    64:A1 00000000  mov eax,dword ptr fs:[0]
004FA7AE    50              push eax

接下来就是脱壳这里就不再叙述。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//