试着学习脱Armadillo的壳
(CopyMem-II,Armadillo V4.X CopyMem-II脱壳 -魔法转换(Magic Converter) V4.0正式版)
按照FLY大侠文字和Reg killer录像对着来脱,到下面解压完毕,可以用LORDPE去Dump 子进程,但是LORDPE 提示无法抓取内存,但是大侠的录像和文字显示都可以抓取,即是选择修正了内存大小选项后,也无法抓取内存。
请大侠指点一二。
附无法抓取的内存的代码位置:(原大侠的代码现在不在手)
先找oep,在OD中重开程序,下bp WaitForDebugEvent,F9运行
77E7A6CF K> 55 push ebp //来到这里,F2清除断点
77E7A6D0 8BEC mov ebp,esp
77E7A6D2 81EC 9C000000 sub esp,9C
77E7A6D8 53 push ebx
77E7A6D9 56 push esi
77E7A6DA 57 push edi
看堆栈窗口
0012DA98 0046AD67 /CALL 到 WaitForDebugEvent 来自 按键精灵.0046AD61
0012DA9C 0012EB5C |pDebugEvent = 0012EB5C
0012DAA0 000003E8 \Timeout = 1000. ms
在0012EB5C上下转存中跟随
在下bp WriteProcessMemory,F9运行
77E7ADB9 K> 55 push ebp //来到这里
77E7ADBA 8BEC mov ebp,esp
77E7ADBC 51 push ecx
77E7ADBD 51 push ecx
77E7ADBE 8B45 0C mov eax,dword ptr ss:[ebp+C]
77E7ADC1 53 push ebx
77E7ADC2 8945 F8 mov dword ptr ss:[ebp-8],eax
看数据转存窗口
0012EB5C 01 00 00 00 68 03 00 00 ...h..
0012EB64 C4 00 00 00 01 00 00 80 ?....€
0012EB6C 00 00 00 00 00 00 00 00 ........
0012EB74 00 CC 43 00 02 00 00 00 .藽.... //大家看到没有43CC00就是OEP
再在OD中重开程序,下硬件断点:he WaitForDebugEvent,运行停住。回到壳空间,查找常数FFFFFFF8,得到结果:
0046B3D6 OR EAX, FFFFFFF8
0046B3F1 OR EDX, FFFFFFF8
0046B41A OR ECX, FFFFFFF8
0046B8F0 OR EDX, FFFFFFF8
0046B90B OR ECX, FFFFFFF8
0046B933 OR EAX, FFFFFFF8
在0046B3D6上双击,来到这代码处,朝上几行看:
0046B38A 83BD D0F5FFFF 00 cmp dword ptr ss:[ebp-A30],0 //这就是tDasm大侠文中提到的关键代码。
0046B391 0F8C A9020000 jl 按键精灵.0046B640
0046B397 8B8D D0F5FFFF mov ecx,dword ptr ss:[ebp-A30]
0046B39D 3B0D E4B54900 cmp ecx,dword ptr ds:[49B5E4]
0046B3A3 0F8D 97020000 jge 按键精灵.0046B640
0046B3A9 8B95 44F6FFFF mov edx,dword ptr ss:[ebp-9BC]
0046B3AF 81E2 FF000000 and edx,0FF
0046B3B5 85D2 test edx,edx
0046B3B7 0F84 AD000000 je 按键精灵.0046B46A
0046B3BD 6A 00 push 0
0046B3BF 8BB5 D0F5FFFF mov esi,dword ptr ss:[ebp-A30]
0046B3C5 C1E6 04 shl esi,4
0046B3C8 8B85 D0F5FFFF mov eax,dword ptr ss:[ebp-A30]
0046B3CE 25 07000080 and eax,80000007
0046B3D3 79 05 jns short 按键精灵.0046B3DA
0046B3D5 48 dec eax
0046B3D6 83C8 F8 or eax,FFFFFFF8 //断在这里向上看
0046B3D9 40 inc eax
0046B3DA 33C9 xor ecx,ecx
0046B3DC 8A88 809A4900 mov cl,byte ptr ds:[eax+499A80]
0046B3E2 8B95 D0F5FFFF mov edx,dword ptr ss:[ebp-A30]
0046B3E8 81E2 07000080 and edx,80000007
0046B3EE 79 05 jns short 按键精灵.0046B3F5
0046B3F0 4A dec edx
0046B3F1 83CA F8 or edx,FFFFFFF8
0046B3F4 42 inc edx
0046B3F5 33C0 xor eax,eax
0046B3F7 8A82 819A4900 mov al,byte ptr ds:[edx+499A81]
0046B3FD 8B3C8D 60524900 mov edi,dword ptr ds:[ecx*4+495260]
0046B404 333C85 60524900 xor edi,dword ptr ds:[eax*4+495260]
0046B40B 8B8D D0F5FFFF mov ecx,dword ptr ss:[ebp-A30]
0046B411 81E1 07000080 and ecx,80000007
0046B417 79 05 jns short 按键精灵.0046B41E
0046B419 49 dec ecx
0046B41A 83C9 F8 or ecx,FFFFFFF8
0046B41D 41 inc ecx
0046B41E 33D2 xor edx,edx
0046B420 8A91 829A4900 mov dl,byte ptr ds:[ecx+499A82]
0046B426 333C95 60524900 xor edi,dword ptr ds:[edx*4+495260]
0046B42D 8B85 D0F5FFFF mov eax,dword ptr ss:[ebp-A30]
0046B433 99 cdq
0046B434 B9 1C000000 mov ecx,1C
0046B439 F7F9 idiv ecx
0046B43B 8BCA mov ecx,edx
0046B43D D3EF shr edi,cl
0046B43F 83E7 0F and edi,0F
0046B442 03F7 add esi,edi
0046B444 8B15 D4B54900 mov edx,dword ptr ds:[49B5D4]
0046B44A 8D04B2 lea eax,dword ptr ds:[edx+esi*4]
0046B44D 50 push eax
0046B44E 8B8D D0F5FFFF mov ecx,dword ptr ss:[ebp-A30]
0046B454 51 push ecx
0046B455 E8 FF1F0000 call 按键精灵.0046D459
0046B45A 83C4 0C add esp,0C
0046B45D 25 FF000000 and eax,0FF 《--- 修改此处
0046B462 85C0 test eax,eax
在0046B38A处下一硬件执行断点,运行停住。 按照tDasm的方法,修改代码为:
0046B45D FF05 48EB1200 inc dword ptr ds:[12EB48]
0046B463 C705 E8B54900 010000>mov dword ptr ds:[49B5E8],1
0046B46D ^ E9 18FFFFFF jmp 按键精灵.0046B38A
把12EB48处置0,去掉所有硬件断点,并在0046b640处下断,运行,停住。好,所有代码都强制解压完成。
运行LordPE,选择第2个进程(有2个同名进程),即可完全dump出来了
[培训]科锐逆向工程师培训第53期2025年7月8日开班!