关于Armadillo 1.xx - 2.xx脱壳的问题
【软件名称】:PowerPoint to Flash 1.6.7【下载地址】:http://www.dreamingsoft.com/download/pfsetup.exe
【加密保护】:Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks(双线程)
1.分离父进程,使程序把自己当成子进程运行
设置Ollydbg忽略所有其它异常选项。老规矩:用IsDebug 1.4插件去掉Ollydbg的调试器标志。
Ollydbg载入主程序:
00483914 >55 push ebp // OD载入后停在这里
00483915 8BEC mov ebp,esp
00483917 6A FF push -1
00483919 68 D0D54800 push pptFlash.0048D5D0
0048391E 68 34344800 push pptFlash.00483434
00483923 64:A1 00000000 mov eax,dword ptr fs:
00483929 50 push eax
0048392A 64:8925 00000000 mov dword ptr fs:,esp
00483931 83EC 58 sub esp,58
00483934 53 push ebx
00483935 56 push esi
00483936 57 push edi
00483937 8965 E8 mov dword ptr ss:,esp
0048393A FF15 68A14800 call dword ptr ds:[<&KERNEL32.GetVersion>] ; kernel32.GetVersion
00483940 33D2 xor edx,edx
命令行下断:BP OpenMutexA 然后F9运行:
77E62391 >55 push ebp // 注意观察堆栈
77E62392 8BEC mov ebp,esp
77E62394 51 push ecx
77E62395 51 push ecx
77E62396 837D 10 00 cmp dword ptr ss:,0
77E6239A 56 push esi
77E6239B 0F84 C2E30100 je kernel32.77E80763
77E623A1 64:A1 18000000 mov eax,dword ptr fs:
77E623A7 FF75 10 push dword ptr ss:
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
注意看BP OpenMutexA 时的堆栈:
0012F5B8 0047E85D/CALL 到 OpenMutexA 来自 pptFlash.0047E857
0012F5BC 001F0001|Access = 1F0001
0012F5C0 00000000|Inheritable = FALSE
0012F5C4 0012FBF8\MutexName = "7A4::DA3935EA83" ★注意这个地址:0012FBF8
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
Ctrl+G:401000键入以下代码:
00401000 60 pushad
00401001 9C pushfd
00401002 68 F8FB1200 push 12FBF8 ★ 堆栈里看到的值
00401007 33C0 xor eax,eax
00401009 50 push eax
0040100A 50 push eax
0040100B E8 B5A6A577 call kernel32.CreateMutexA
00401010 9D popfd
00401011 61 popad
00401012- E9 7A13A677 jmp kernel32.OpenMutexA
在401000处新建起源,F9运行,再次中断在OpenMutexA处,此时Ctrl+G:401000 撤销刚才的修改的代码,使代码还原。OK,父进程分离完毕!把这段代码以二进制保存起来,下次用时直接粘贴,修改00401002处push的值就OK了。
二进制代码:60 9C 68 F8 FB 12 00 33 C0 50 50 E8 B5 A6 A5 77 9D 61 E9 7A 13 A6 77
—————————————————————————————————
2、寻找Magic Jump,避开IAT加密
取消以前所有的断点,下断:BP GetModuleHandleA 然后F9运行:
77E5AD86 >837C24 04 00 cmp dword ptr ss:,0 // 断在这,注意看堆栈
77E5AD8B 0F84 37010000 je kernel32.77E5AEC8
77E5AD91 FF7424 04 push dword ptr ss:
77E5AD95 E8 F8050000 call kernel32.77E5B392
77E5AD9A 85C0 test eax,eax
77E5AD9C 74 08 je short kernel32.77E5ADA6
77E5AD9E FF70 04 push dword ptr ds:
77E5ADA1 E8 27060000 call kernel32.GetModuleHandleW
77E5ADA6 C2 0400 retn 4
......
我按照这个方法脱,但到了这一步:
2、寻找Magic Jump,避开IAT加密
取消以前所有的断点,下断:BP GetModuleHandleA 然后F9运行:
我按F9运行后却跳到了
77E80B1A >55 PUSH EBP
77E80B1B 8BEC MOV EBP,ESP
77E80B1D 837D 08 00 CMP DWORD PTR SS:,0
77E80B21 75 0E JNZ SHORT KERNEL32.77E80B31
77E80B23 64:A1 18000000MOV EAX,DWORD PTR FS:
77E80B29 8B40 30 MOV EAX,DWORD PTR DS:
77E80B2C 8B40 08 MOV EAX,DWORD PTR DS:
请问出错是什么原因?
[ 本帖最后由 淡淡的冰 于 2006-6-30 10:51 编辑 ] 注意堆栈,寻找返回时机~ 这个在看雪论坛已有教程,请自行去查找!
作者是老K~ 谢谢楼上的两位. 学习了,多谢分享. 先查准版本,用ARMFP,应该不是1.X-2.X的
页:
[1]