-
-
[原创][求助]VMP 2.07 脱壳测试 --> 脱壳DUMP后一点问题请教大牛!
-
发表于:
2011-8-18 21:21
13351
-
[原创][求助]VMP 2.07 脱壳测试 --> 脱壳DUMP后一点问题请教大牛!
020588A4 call Test_3.01FDC1E5 -->这是程序载入 OD 后的入口
020588A9 lea esp,dword ptr ss:[esp+0x8]
020588AD je Test_3.0209E009
020588B3 lea ebx,dword ptr ss:[esp+0xEDE09A4A]
020588BA pushad
020588BB call Test_3.02056812
020588C0 lea esp,dword ptr ss:[esp+0x48]
020588C4 ^jnz Test_3.01FE5C41
下 BP VirtualProtect + 13 断点 --> F9 直到堆栈出现
0012F668 FFFFFFFF |hProcess = FFFFFFFF
0012F66C 01D43000 |Address = Test_3.01D43000
0012F670 00024B54 |Size = 24B54 (150356.)
0012F674 00000002 |NewProtect = PAGE_READONLY
0012F678 0012FF98 \pOldProtect = 0012FF98
取消断点,查看内存窗口 --> 在 .text 段下内存访问断点,程序停在以下地方,删除内存断点
0209FB6C xor al,byte ptr ds:[edx] --> 跟网上找的教程类似
0209FB6E push ebx -->
0209FB6F push esp
0209FB70 call Test_3.020A0973 -->这 3 句跟教程不一样,F7跟进
↓
020A0973 mov byte ptr ss:[esp+0x4],0xDE
020A0978 inc edx ---> edx=004035EF
020A0979 ^jmp Test_3.020A0132
↓
020A0132 dec dword ptr ss:[ebp] -->SS:[0012F794]=00000D98
020A0135 pushad
020A0136 lea esp,dword ptr ss:[esp+0x30]
020A013A ^jnz Test_3.0209F3FC --->在这个地方 F4 步过
020A0140 push 0x5BB6FB7C
在 .text 段下内存访问断点,程序还是一样停在 (在原地循环,跳不出验证)
0209FB6C xor al,byte ptr ds:[edx] --> 跟网上找的教程类似
------------------------->继续F7跟进到
020A013A ^jnz Test_3.0209F3FC --->在这个地方 F4 步过
020A0140 push 0x5BB6FB7C
在这里换个步骤;查看内存窗口,在.data 段下内存访问断点,程序停在 -->
0096B208 mov edi,edi ---->很明显,像是VC++8.0入口的第一
0096B20A push ebp ---->个CALL,分析下,返回调用的地
0096B20B mov ebp,esp ---->方
0096B20D sub esp,0x10
0096B210 mov eax,dword ptr ds:[0xC558CC]
0096B215 and dword ptr ss:[ebp-0x8],0x0
0096B219 and dword ptr ss:[ebp-0x4],0x0
0096B21D push ebx
0096B21E push edi
返回到调用这个 CALL 的地方,来到这个位置 --> (很明显的VC++8.0 入口)
0096AAAF . call Test_3.0096B208 -->在此处新建 EIP
0096AAB4 .^jmp Test_3.0096A7EF
0096AAB9 int3
0096A7EF >push 0x58
0096A7F1 . push Test_3.00C0EFD8
0096A7F6 . call Test_3.0096AE50
0096A7FB . xor ebx,ebx
0096A7FD . mov dword ptr ss:[ebp-0x1C],ebx
0096A800 . mov dword ptr ss:[ebp-0x4],ebx
0096A803 . lea eax,dword ptr ss:[ebp-0x68]
0096A806 . push eax ; /pStartupinfo
0096A807 . call dword ptr ds:[0xB1E11C] ; \GetStartupInfoA
打开 LoadPE --> dump Test_3.exe进程....,试运行后 出现 004FBD4A 引用的 0016FC30 不能为READ
...
位置在以下代码;
004FBD3D . mov eax,dword ptr ss:[ebp]
004FBD40 . pushfd
004FBD41 . mov byte ptr ss:[esp],0x17
004FBD45 . push 0xF53DA4D0
004FBD4A . mov eax,dword ptr ds:[eax]
004FBD4C . pushad
004FBD4D . mov byte ptr ss:[esp+0x4],dl
004FBD51 . mov dword ptr ss:[ebp],eax
首次判断为 antidump .... 按 patch 方法 ,下 BP LocalAlloc +2,断下后,ALT+F9 返回到用户代
码
01FEA741 not si
01FEA744 pushfd
01FEA745 mov ebx,eax
01FEA747 call Test_3.01FE5643
01FEA74C push dword ptr ss:[esp+0x4]
--> EAX = 0016FFD8
SOD 申请内存,写入一段 patch,
pushad
push 40
push 3000
push 1000
push 0
call VirtualAlloc
cmp eax,400000
jb XXXXXXX
popad
nop
nop
之后从新 用LoadPE -->dump ,新建内存PATCH的区段,运行后还是出错。
问下各位大牛,我这样脱法正确么?那个错误是antidump?怎么解决?为什么那个入口跟断点后的特征
跟教程的差别很大...
附上软件地址:http://u.115.com/file/dnh7lykd#
Back.rar 8.76MB
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)