-
-
[旧帖] [原创]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
接下来就是脱壳这里就不再叙述。
首先载入加壳程序
第一步:
//壳的入口点如下
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虚拟机自动化脱壳的方法
赞赏
他的文章
- 谁帮忙脱下这个家伙的壳 2541
- [原创]ESP定律+单步跟踪脱PECompact 2.x(申请邀请码) 1294
- [求助]为什么我的OD没有工具菜单 1315
- [求助]脱Armadillo疑问 1338
看原图
赞赏
雪币:
留言: