首页
社区
课程
招聘
[求助]关于Armadillo 1.xx - 2.xx脱壳的问题
发表于: 2006-6-30 10:45 6128

[求助]关于Armadillo 1.xx - 2.xx脱壳的问题

2006-6-30 10:45
6128
【软件名称】: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:[0]
00483929 50 push eax
0048392A 64:8925 00000000 mov dword ptr fs:[0],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:[ebp-18],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:[ebp+10],0
77E6239A 56 push esi
77E6239B 0F84 C2E30100 je kernel32.77E80763
77E623A1 64:A1 18000000 mov eax,dword ptr fs:[18]
77E623A7 FF75 10 push dword ptr ss:[ebp+10]

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

注意看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:[esp+4],0 // 断在这,注意看堆栈
77E5AD8B 0F84 37010000 je kernel32.77E5AEC8
77E5AD91 FF7424 04 push dword ptr ss:[esp+4]
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:[eax+4]
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:[EBP+8],0
77E80B21    75 0E           JNZ SHORT KERNEL32.77E80B31
77E80B23    64:A1 18000000  MOV EAX,DWORD PTR FS:[18]
77E80B29    8B40 30         MOV EAX,DWORD PTR DS:[EAX+30]
77E80B2C    8B40 08         MOV EAX,DWORD PTR DS:[EAX+8]

请问出错是什么原因?

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
BP GetModuleHandleA+5
不要直接下到GetModuleHandleA ,否则会被检测到

2006-6-30 10:48
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
BP GetModuleHandleA+5
下这个断点,结果出错。
提示内存不能为read..

我看那篇文章里下BP GetModuleHandleA断点可以成功.
我是2000的系统,不会有什么不一样吧?
2006-6-30 10:57
0
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
Ctrl+G
输入GetModuleHandleA
在GetModuleHandleA函数尾部下断。

或用硬件断点也行
2006-6-30 10:59
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
还是跟文章里的不一样。

我再试一试吧

谢谢了。
2006-6-30 11:05
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
http://bbs.pediy.com/showthread.php?threadid=16342
我是参考的这篇文章,但第2步总跟他不一样。
2006-6-30 11:09
0
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
7
最初由 淡淡的冰 发布
还是跟文章里的不一样。

我再试一试吧

谢谢了。


不同操作系统中GetModuleHandleA函数汇编代码当然不一样,只要你中断在GetModuleHandleA就行了。
不要死按教学来,变通一些。
2006-6-30 11:11
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
明白了,谢谢指导
2006-6-30 11:18
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
9
标准壳的话可以试试脚本
Armadillo V4.0-V4.44.Standard.Protection.oSc
2006-6-30 11:39
0
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
10
最初由 淡淡的冰 发布
http://bbs.pediy.com/showthread.php?threadid=16342
我是参考的这篇文章,但第2步总跟他不一样。


http://bbs.pediy.com/showthread.php?threadid=16342

按照这篇文章,完全可以脱掉

完全照抄都能达到目的!
2006-6-30 17:18
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我试脱了下,,脱后运行出现这个窗口,,不知道什么意思,,谁能解释下
上传的附件:
2006-6-30 20:20
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
12
最初由 kmjyq 发布
我试脱了下,,脱后运行出现这个窗口,,不知道什么意思,,谁能解释下


这个应该是自校验吧。
看堆栈,跟随后,修改了跳转就ok了。
2006-6-30 21:10
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
13
最初由 冷血书生 发布
http://bbs.pediy.com/showthread.php?threadid=16342

按照这篇文章,完全可以脱掉

完全照抄都能达到目的!


2006-6-30 22:35
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
14
最初由 fly 发布
标准壳的话可以试试脚本


该系列软件程序都使用了ARM的注册系统,所以使用脚本对这个是无用的
2006-6-30 22:37
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
最初由 冷血书生 发布
http://bbs.pediy.com/showthread.php?threadid=16342

按照这篇文章,完全可以脱掉

完全照抄都能达到目的!


下断:BP GetModuleHandleA 然后F9运行:

77E5AD86 >  837C24 04 00        cmp dword ptr ss:[esp+4],0           // 断在这,注意看堆栈

而我下断后运行却断在
77E80B1A >  55              PUSH EBP
这里。

不知道为什么.
2006-7-1 00:13
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
16
最初由 淡淡的冰 发布
下断:BP GetModuleHandleA 然后F9运行:

77E5AD86 > 837C24 04 00 cmp dword ptr ss:[esp+4],0 // 断在这,注意看堆栈

........


上面这个不可能是GetModuleHandleA,应该是BP GetModuleHandleA+n。
再说,不管+n,只要没检查BP GetModuleHandleA处的断点,效果一样的。
2006-7-1 07:50
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
最初由 cyto 发布
这个应该是自校验吧。
看堆栈,跟随后,修改了跳转就ok了。


OD载入脱壳后文件堆积来到这
7C816D42    6A 09           PUSH 9
7C816D44    6A FE           PUSH -2
7C816D46    FF15 A013807C   CALL DWORD PTR DS:[<&ntdll.NtSetInformat>; ntdll.ZwSetInformationThread
7C816D4C    FF55 08         CALL DWORD PTR SS:[EBP+8]
7C816D4F    50              PUSH EAX
7C816D50    E8 545FFFFF     CALL kernel32.ExitThread
7C816D55    90              NOP

这方面知识还不够,无法下手改,介绍几编相关知识学习下。。谢谢了
2006-7-1 10:23
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
18
我传一个吧
顺便测试下
上传的附件:
2006-7-1 11:20
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
自己又研究了下,OD载入。超级字串参考+   
超级字串参考+        , 条目 470
地址=0043B304
反汇编=PUSH dumped_.004AF048
文本字串=system fault, the application will be shut down immediately!
system fault, the application will be shut down immediately!这个是我电脑上弹出的出错内容,
双击来到下面
0043B2E9    8D7C24 0C       LEA EDI,DWORD PTR SS:[ESP+C]
0043B2ED    68 88F04A00     PUSH dumped_.004AF088                    ; _ds_protected_
0043B2F2    8BCE            MOV ECX,ESI
0043B2F4    E8 27FCFFFF     CALL dumped_.0043AF20
0043B2F9    85C0            TEST EAX,EAX
0043B2FB    75 21           JNZ SHORT dumped_.0043B31E
0043B2FD    51              PUSH ECX
0043B2FE    8BCC            MOV ECX,ESP
0043B300    896424 24       MOV DWORD PTR SS:[ESP+24],ESP
0043B304    68 48F04A00     PUSH dumped_.004AF048                    ; system fault, the application will be shut down immediately!
0043B309    E8 02AFFCFF     CALL dumped_.00406210
0043B30E    E8 EDFEFFFF     CALL dumped_.0043B200
0043B313    83C4 04         ADD ESP,4
0043B316    6A FF           PUSH -1
0043B318    FF15 CCB24A00   CALL DWORD PTR DS:[<&kernel32.ExitProces>; kernel32.ExitProcess

判断0043B2FB   /75 21           JNZ SHORT dumped_.0043B31E

修改为jmp SHORT dumped_.0043B31E
另存。。运行,,呵呵,出错窗口没出来了,,运行正常了
2006-7-1 13:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
好好学习 天天向上
2006-7-2 14:12
0
游客
登录 | 注册 方可回帖
返回
//