淡淡的冰 发表于 2006-6-30 10:48:57

关于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 编辑 ]

shuaig81 发表于 2006-6-30 16:01:04

注意堆栈,寻找返回时机~

冷血书生 发表于 2006-6-30 17:01:25

这个在看雪论坛已有教程,请自行去查找!

作者是老K~

淡淡的冰 发表于 2006-7-1 00:15:07

谢谢楼上的两位.

zsl01 发表于 2008-9-27 17:16:00

学习了,多谢分享.

wqhlgr 发表于 2009-1-26 07:13:27

先查准版本,用ARMFP,应该不是1.X-2.X的
页: [1]
查看完整版本: 关于Armadillo 1.xx - 2.xx脱壳的问题