首页
社区
课程
招聘
[原创]脱 Armadillo 5.0 标准方式+反调试+IAT混淆
发表于: 2007-7-1 23:59 11432

[原创]脱 Armadillo 5.0 标准方式+反调试+IAT混淆

2007-7-1 23:59
11432
【文章标题】: 脱 Armadillo 5.0 标准方式+反调试+IAT混淆
【文章作者】: 王猛
【作者邮箱】: 12985462@QQ.com
【作者主页】: 0c4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6e0R3I4L8h3W2D9i4K6u0W2j5$3^5`.
【作者QQ号】: 12985462
【下载地址】: 自己搜索下载
【加壳方式】: Armadillo v5 标准方式+反调试+IAT混淆
【使用工具】: 野猪,ImpREC、ArmaPD、ArmaFp
【操作平台】: Windows SP2
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  穿山甲这款壳子很早以前我就在网络上见过,只是我遇到的软件都不会用穿山甲来加壳,所以也就没过多的关注它。
  
  首先,以一个穿山甲5.0版的CrackME做例子展示如何脱壳,当然,我同样准备了一个视频文件作为VIP教材发布给学员班的同学们使用。在这里
  感谢SND团队的教导,没有他们的教程,没有他们的网站我真不知道再有那里可以找到如此多的新手教程。
  
  我们工作的环境和需要的工具:
  
  Windows XP SP2 (简称:XP)
  理由:我们用到的一款工具只支持WINDOWS SP2,我试过Windows 2000平台这款工具是没法工作的。
  
  Ollydbg v1.10 *野猪DBG v2.0 修改版* (简称:野猪 ;))
  理由:这款修改版可以绕过多款强壳的调试器检测,最特别的地方是他采用了注入方式。
  
  Armadillo Process Detach v1.1 (简称:ArmaPD)
  
  一款可以帮助我们附加到穿山甲进程上的工具,附加到进程上是脱被穿山甲保护程序的基础工作。这款工具,也是我刚刚提到的只支持Windows
  XP SP2的那个东东。
  
  Armadillo find protected v1.3 (简称:ArmaFP)
  
  一款用来检测穿山甲壳子加密状态的工具,可以识别用来加密的穿山甲版本和使用了哪些加密技术。这款工具和PEID等识别工具类似,识别版
  本是否准确也要依靠签名,所以请您经常更新该软件的签名库文件。
  
  Import REConstructor v1.6 (简称ImpREC)
  
  一款用来修复IAT的工具,IAT是与否保证可是程序可以顺利运行的基础。我们将使用这款工具DUMP数据并修复进行修复。
  
  LordPE-Deluxe (简称:LoadPE)
  
  一款PE文件工具,在重建PE文件时会用到他。
  
  首先,我们使用ArmaFP检测下程序受保护的状态。打开ArmaFP并将程序拖入主窗口,ArmaFP非常利落的告诉我们程序受到保护的状态:
  
  
  !- Protected Armadillo
  Protection system (Professional) <-- 穿山甲的版本类型,此为专业版
  !- <Protection Options>
  Standard protection or Minimum protection <-- 加密选项
  CopyMem-II
  Enable Import Table Elimination
  Enable Strategic Code Splicing
  !- <Backup Key Options>             <-- key 备份
  No Registry Keys at All
  !- <Compression Options>            <-- 数据压缩
  Minimal/Fastest Compression
  !- <Other Options>                  <-- 其他选项
  Store Environment Vars Externally
  Allow Only One Copy
  Use eSellerate Edition Keys
  Use Digital River Edition Keys
  ……
  
  最后应该有签名和号码的,可惜ArmaFP目前的版本在我的XP上,检测穿山甲5.0的程序会造成崩溃,所以没有获得到版本号。(怪:这个工具在
  Windows 2000上检测5.0可是正常的说!)
  
  事前检测是个好的习惯,这让我们心里有了底。比如眼前这款程序使用的是穿山甲的标准加密方式。现在些准备功夫!
  
  打开ArmaPD,将目标程序入主界面,当看到下面的结果时说明ArmaPD已经为我们进行附加进程做好了准备。
  
  DONE!
  Child process ID: 00000BE0
  Entry point: 004A2DC2
  Original bytes: E8E3
  
  Child process ID 告诉我们将要附加的进程编号。
  Entry point 告诉我们穿山甲的入口点位置。为便于我们附加进程ArmaPD在后台会替换入口点004A2DC2的代码。
  Original Bytes 原始代码。我们要把这些代码记住,我们附加进去后为了进行调试代码还是要替换过来的。
  
  ok,说了这么多基本的东西,相信大家已经迫不及待的要动手了干了。跟我来!
  
  打开野猪,并附加到ArmaPD告诉我们的BE0进程上。此时,程序会停在 DbgBreakPoint 断点上,在堆栈中观察会得到类似结果:
  
  7C9707A8  RETURN to ntdll.7C9707A8 from ntdll.DbgBreakPoint
  
  接着用 Ctrl + F12 飞到 ArmaPD 告诉我们的穿山甲的入口点。注意,这里的代码已经被ArmaPD修改过!
  
  004A2DC2 UnpackM>- EB FE                JMP     SHORT 004A2DC2                           ; UnpackMe.<Modul3EntryPoint>
  004A2DC4           40                   INC     EAX
  004A2DC5           0000                 ADD     BYTE PTR DS:[EAX], AL
  004A2DC7         ^ E9 16FEFFFF          JMP     004A2BE2                                 ; UnpackMe.004A2BE2
  
  ok!为了进行调试,现在我们需要把入口点的代码替换回ArmaPD告诉我们的原始代码。选中004A2DC2一行,按 Ctrl+E 打开二进制编辑窗口,
  在HEX+02一栏用E8E3替换EBFE,点确定保存!完成后代码便恢复到原始状态。我们可以开始调试了!
  
  
  004A2DC2 UnpackM>  E8 E3400000          CALL    004A6EAA                                 ; UnpackMe.004A6EAA
  004A2DC7         ^ E9 16FEFFFF          JMP     004A2BE2                                 ; UnpackMe.004A2BE2
  
  删除全部 软硬断点 设置断点 VirtualProtect  尝试恢复IAT!
  
  BP  VirtualProtect
  
  Shift + F9 继续,
  
  程序断在0048E8F7处,注意堆栈。 穿山甲开始建立虚拟机了!
  
  0012F648   0048E8F7  /C4LL to VirtualProtect from UnpackMe.0048E8F1
  0012F64C   00E61000  |Address = 00E61000
  0012F650   0006C82C  |Size = 6C82C (444460.)
  0012F654   00000040  |NewProtect = PAGE_EXECUTE_READWRITE
  0012F658   0012F67C  \pOldProtect = 0012F67C
  
  按Shift+F9继续走,注意每次中断时堆栈的编号。
  
  
  当看到类似下面的内容时,停下来。
  
  00129470   00EAA814  /C4LL to VirtualProtect from 00EAA80E
  00129474   0045F118  |Address = UnpackMe.0045F118
  00129478   0000008C  |Size = 8C (140.)
  0012947C   00000004  |NewProtect = PAGE_READWRITE
  00129480   0012C028  \pOldProtect = 0012C028
  
  有些朋友或许会问,为什么是这里?因为这里是PUSH 14之前最后一次断在 VirtualProtect 处。如果您感觉很陌生,不停的用Shift+F9似乎不
  是一个好注意。老套的,善用Ctrl+F9以及用F8两个快捷键走下来是非常明智的做法。                  
  
  现在,我们改按 Ctrl+F9 + F8 走到下面:
  
  00EAA814           6A 14                PUSH    14
  00EAA816           E8 FBCA0000          CALL    00EB7316
  00EAA81B           83C4 04              ADD     ESP, 4
  00EAA81E           8985 84ABFFFF        MOV     DWORD PTR SS:[EBP+FFFFAB84], EAX
  00EAA824           83BD 84ABFFFF 00     CMP     DWORD PTR SS:[EBP+FFFFAB84], 0
  
  我们看到了什么?PUSH 14 啊哈!穿山甲的经典的入口!我们现在下来代码找寻PUSH 100指令,并修改它下方第一个CALL呼叫地址的代码为为
  RETN。这是为了防止穿山甲在IAT上捣乱!
  
  双击EIP,让我们回到
  
  00EAA814           6A 14                PUSH    14
  00EAA816           E8 FBCA0000          CALL    00EB7316
  00EAA81B           83C4 04              ADD     ESP, 4
  00EAA81E           8985 84ABFFFF        MOV     DWORD PTR SS:[EBP+FFFFAB84], EAX
  00EAA824           83BD 84ABFFFF 00     CMP     DWORD PTR SS:[EBP+FFFFAB84], 0
  
  清除所有的断点,用命令 BP CreateThread 拦截CreateThread断点。
  
  Shift+F9,Ctrl+F9,再F8,再Ctrl+9,再F8,我们来到了00EAFEF处,这里是VM将要载入代码的地方,穿山甲的VM载入程序必须要走到真实的
  OEP。
  
  00EAF1EF           83C4 04              ADD     ESP, 4
  00EAF1F2           B9 B8B4ED00          MOV     ECX, 0EDB4B8
  00EAF1F7           E8 B4BFFBFF          CALL    00E6B1B0
  00EAF1FC           0FB6D0               MOVZX   EDX, AL
  00EAF1FF           85D2                 TEST    EDX, EDX
  
  瞪大眼睛注意ECX,穿山甲系列的壳子OEP地址都出现在ECX寄存器。
  
  我们搜索代码 CALL NEAR ECX,掠过第一个,在第二个下手!
  
  用F2下段,F9走过来,再F7过去!!嘿嘿!现在,我们就到了OEP了!
  
  打开ImpREC,有两个同名的进程,要选择我们附加的进程, 。。。。。。。。。。(ArmaPD会告诉你地址)。
  
  输入OEP的地址XXXXX,点击获取按钮,我们将得到一个不完整的IAT列表,不过没关系。
  
  点击显示“无效函数”按钮,让ImpREC帮我们找处那些函数无效。点右键选择“跟踪级别一”,ImpREC忙碌了一阵子之后,是不是还有很多函
  数无法修复??别失望,这就对了!再“无效函数”按钮,可以找出一大把东西,在右键菜单中选择“剪切函数”,嘿嘿,再看看,是不是全
  部的函数都已经被你找到了!
  
  现在开始DUMP,在右键菜单试用高级指令-->“选择代码区段” 命令,点击“完整转储”把数据DUMP下来。点主界面上的“修复转储文件”按
  钮修复刚才DUMP出来的文件,嘿嘿!我们完工了!
  
--------------------------------------------------------------------------------
【经验总结】
  常见问题:
  
  在这次Dump过程中,我自己卡壳很多次,包括工具准备和写这篇文章前后总过花费了8个小时,我把一些我遇到的问题和解
  决方法在和大家分享
  一下。希望可以节约下您的时间!
  
  一、那里可以下载到文中提到的工具?
  网络,这些软件都是公开的工具,你可以在网络上轻易获得。
  
  二、为什么附加进程后要按Ctrl+F12?
  没有为什么,纯属我的习惯,您可以用F9+F12或者其他什么方法,总之能走到穿山甲的OPE就好了。
  
  三、为什么野猪在修改代码的时候会崩溃?
  野猪基本上不太会,因此它没带advancedolly.dll这个插件,如果您遇到了这样的问题,把advancedolly.dll升级到1.26
  Beta 10或者暂时删
  除这个插件,问题就解决了。
  
  四、为什么下了VirtualProtect断点后,按Shift+F9程序,但是没有被拦截在 VirtualProtect 断点上?
  
  基本上是你太粗心了!记得把代码修改会ArmaFP提示给您的原始代码!
  
  五、为什么我脱壳出来的文件,修复后可以看到程序界面,但是会有弹出很多的错误提示对话框?
  
  排除程序本身自校验的问题。应该是ImpREC参数设置上存在问题!在ImpREC选项中,至少要选中 “创建新的IAT”和 “修
  正EP到OEP”!
  
  六、这篇文章只对Armadillo 5 有效吗?
  不是的,再脱Armadillo 4.66的时候也可以这么做!只是Armadillo加密保护方式上,只能对付使用标准方式保护的程序。
  
--------------------------------------------------------------------------------
【版权声明】: 本文由王猛(ae4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6e0R3I4L8h3W2D9i4K6u0W2j5$3&6Q4c8f1k6Q4b7V1y4Q4z5o6W2Q4c8e0g2Q4z5p5g2Q4z5f1k6Q4c8e0g2Q4z5o6S2Q4z5f1u0Q4c8e0k6Q4z5e0u0Q4b7U0m8Q4c8e0g2Q4z5o6k6Q4z5e0W2Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0S2Q4b7V1c8Q4b7f1y4Q4c8e0S2Q4b7V1c8Q4b7V1c8Q4c8e0S2Q4b7f1k6Q4b7U0N6Q4c8e0k6Q4b7U0y4Q4b7e0S2Q4c8e0k6Q4z5e0S2Q4z5p5g2Q4c8e0c8Q4b7V1c8Q4z5f1y4Q4c8e0S2Q4z5o6m8Q4z5o6g2Q4c8e0g2Q4b7U0W2Q4b7U0k6Q4c8e0c8Q4b7V1k6Q4z5f1c8Q4c8e0k6Q4z5p5y4Q4z5o6q4Q4c8e0k6Q4z5e0k6Q4z5o6N6Q4c8e0N6Q4b7f1u0Q4b7e0m8Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0g2Q4b7f1g2Q4z5p5y4Q4c8e0k6Q4z5e0g2Q4b7U0c8Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0S2Q4b7U0m8Q4b7e0u0Q4c8e0S2Q4b7U0m8Q4b7e0u0Q4c8f1k6Q4b7V1y4Q4z5o6p5`.

                                                       2007年07月01日 23:09:42

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好文章,,谢谢了
2007-7-2 02:55
0
雪    币: 512
活跃值: (574)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我给你顶一个,好文!
2007-7-2 12:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不错!!是好文章!!是要多多学习一下!!
2007-7-2 12:35
0
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
5
呵呵,应该来自某个动画教程!不过还是支持一下!
2007-7-2 20:37
0
雪    币: 191
活跃值: (73)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
我的东西到你手里去了呀?
2007-7-4 09:14
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
ding ding
2007-7-5 00:24
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
忙碌了8个小时,不错,分析的很好~!辛苦了~!
2007-7-7 21:59
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
怎么不加精华?
2007-7-8 13:37
0
雪    币: 203
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这篇文章是该加精的!
2007-7-8 16:05
0
雪    币: 205
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
新手学习中,刚遇到Armadillo 4.48 发愁中。。。
现在学习了,好文~~~
2007-7-9 17:08
0
雪    币: 204
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
精典,呵呵,楼主太强了,向你学习
2007-7-9 19:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
太强了
[字数破解补丁~]
2007-7-9 21:23
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
菜鸟我看不懂.5555
2007-7-20 00:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
忙碌了8个小时,不错,分析的很好~!辛苦了~!
2007-7-21 10:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
好东西啊,我要试试看
2007-7-31 22:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
厉害啊~~!
楼主加个动画就完美了 呵呵
2007-10-8 20:49
0
雪    币: 384
活跃值: (1840)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
18
学习一下,那里有动画下载啊
2007-10-8 21:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
好文章,不过没有软件练手
2007-11-20 10:51
0
雪    币: 731
活跃值: (233)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
好东东,收藏
2007-12-5 19:36
0
游客
登录 | 注册 方可回帖
返回