首页
社区
课程
招聘
[原创]手脱未知版本 Armadillo 壳
2013-2-1 19:36 8033

[原创]手脱未知版本 Armadillo 壳

2013-2-1 19:36
8033
最近拿到一个穿山甲的 程序,需要脱壳,试过以前的脚本出现错误不能脱..只好手动脱,居然瞎猫碰死耗子成功了...

来到论坛显摆一下^

最开始用的 ArmaG3ddon_v2.0 显示如下

OS--> Microsoft Windows 7 Ultimate
Edition, 64-bit Service Pack 1 (build 7601)
<------- 01/29/2013 19:00:02 ------->
Loading target:
Ar.exe
Process ID: 14B0
Processing target...
=================================
Armadillo version: 9.40                     《==========这里的版本不知道是否准确,我估计应该没这么高
Exit Process ID: 14B0

以为ArmaG3ddon_v2.0可以自动脱,可是点了半天也不知道怎么用这玩艺儿...只好放弃,有没有 会用的大虾给说说怎么用? 我等菜鸟必感激不尽!

① 用PEID查壳是Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks,运行一下,是单进程。

  用ArmadilloFindProtected12检查,结果如下

目标为Armadillo保护
!- 保护系统级别为 (Digital River)
!-<所使用的保护模式>
标准保护 或 最小保护模式
!- <备份密钥设置>
没有发现注册密钥
!- <目标程序压缩设置>
最小 / 最快的压缩方式
!<其它保护设置>
存储外部环境变量
使用 eSellerate 版本密钥
?-错误 (87) GetThreadContext
地址 00401A8B 010AE8AF
?-问题 进程结束
<- 共消耗时间 00时00分02秒263毫秒 ->

②用OD载入 忽略所有异常

(1)下bp GetModuleHandleA+5断点,一直shift+F9,看堆栈,直到出现下面这个,说明快到了,

00188958  /0018E350
0018895C  |0328AB2C  返回到 0328AB2C 来自 kernel32.GetModuleHandleA
00188960  |0333E058  ASCII "kernel32.dll"
00188964  |0333FF34  ASCII "VirtualAlloc"
00188968  |730AEA54
0018896C  |7822E428
00188970  |01162848  Ar.01162848

在按两下 运行,来到

0018868C  /0018895C
00188690  |032660E4  返回到 032660E4 来自 kernel32.GetModuleHandleA
00188694  |0018880C  ASCII "kernel32.dll"
00188698  |00000000
0018869C  |01162848  Ar.01162848
001886A0  |00000001
001886A4  |01162848  Ar.01162848
001886A8  |00000001

(2)堆栈出现! 来到上面这个地方,取消断点,Ctrl+F9返回,可以看到 kernel32.LoadLibraryA

032660D3   /74 02           je      short 032660D7
032660D5  ^|EB 85           jmp     short 0326605C
032660D7   \8D8D B0FEFFFF   lea     ecx, dword ptr [ebp-150]
032660DD    51              push    ecx
032660DE    FF15 38C33303   call    dword ptr [333C338]              ; kernel32.GetModuleHandleA
032660E4    8B55 F8         mov     edx, dword ptr [ebp-8]        <------------ 返回来到这里
032660E7    8B0D 94AC3603   mov     ecx, dword ptr [336AC94]
032660ED    890491          mov     dword ptr [ecx+edx*4], eax           ;dll句柄保存 在 dword ptr [ecx+edx*4]
032660F0    8B55 F8         mov     edx, dword ptr [ebp-8]
032660F3    A1 94AC3603     mov     eax, dword ptr [336AC94]
032660F8    833C90 00       cmp     dword ptr [eax+edx*4], 0             ; 判断句柄 是否 为 NULL
032660FC    75 5C           jnz     short 0326615A                         ; 此处 nop 掉,告诉 Armadillo 查找dll库没有成功
032660FE    8B4D FC         mov     ecx, dword ptr [ebp-4]
03266101    8B51 08         mov     edx, dword ptr [ecx+8]
03266104    83E2 02         and     edx, 2
03266107    74 38           je      short 03266141
03266109    B8 18000000     mov     eax, 18
0326610E    C1E0 02         shl     eax, 2
03266111    8B0D 9C7A3603   mov     ecx, dword ptr [3367A9C]         ; Ar.01162848
03266117    8B15 9C7A3603   mov     edx, dword ptr [3367A9C]         ; Ar.01162848
0326611D    8B35 9C7A3603   mov     esi, dword ptr [3367A9C]         ; Ar.01162848
03266123    8B5E 1C         mov     ebx, dword ptr [esi+1C]
03266126    335A 18         xor     ebx, dword ptr [edx+18]
03266129    331C01          xor     ebx, dword ptr [ecx+eax]
0326612C    83E3 10         and     ebx, 10
0326612F    F7DB            neg     ebx
03266131    1BDB            sbb     ebx, ebx
03266133    F7DB            neg     ebx
03266135    0FB6C3          movzx   eax, bl
03266138    85C0            test    eax, eax                       
0326613A    75 05           jnz     short 03266141               
0326613C  ^ E9 1BFFFFFF     jmp     0326605C
03266141    8D8D B0FEFFFF   lea     ecx, dword ptr [ebp-150]
03266147    51              push    ecx
03266148    FF15 30C33303   call    dword ptr [333C330]              ; kernel32.LoadLibraryA
                                                                         ; Armadillo 使用LoadLibraryA加载 dll句柄
0326614E    8B55 F8         mov     edx, dword ptr [ebp-8]
03266151    8B0D 94AC3603   mov     ecx, dword ptr [336AC94]             
03266157    890491          mov     dword ptr [ecx+edx*4], eax
0326615A    8B55 F8         mov     edx, dword ptr [ebp-8]
0326615D    A1 94AC3603     mov     eax, dword ptr [336AC94]
03266162    833C90 00       cmp     dword ptr [eax+edx*4], 0                ; 判断句柄 是否 为 NULL
03266166    75 05           jnz     short 0326616D                        ; 此处 nop 掉,告诉 Armadillo 加载dll库也没有成功
03266168  ^ E9 EFFEFFFF     jmp     0326605C
0326616D    C785 A4FEFFFF 0>mov     dword ptr [ebp-15C], 0
03266177    C785 A8FEFFFF 0>mov     dword ptr [ebp-158], 0
03266181    8B4D FC         mov     ecx, dword ptr [ebp-4]
03266184    8B51 04         mov     edx, dword ptr [ecx+4]
03266187    8995 ACFEFFFF   mov     dword ptr [ebp-154], edx
0326618D    EB 0F           jmp     short 0326619E
0326618F    8B85 ACFEFFFF   mov     eax, dword ptr [ebp-154]

(3)避过OD检查
032663CD    8B4D F8         mov     ecx, dword ptr [ebp-8]
032663D0    8B15 94AC3603   mov     edx, dword ptr [336AC94]
032663D6    33348A          xor     esi, dword ptr [edx+ecx*4]
032663D9    8B45 F8         mov     eax, dword ptr [ebp-8]
032663DC    8B0D 94AC3603   mov     ecx, dword ptr [336AC94]
032663E2    893481          mov     dword ptr [ecx+eax*4], esi
032663E5  ^ E9 72FCFFFF     jmp     0326605C
032663EA    EB 03           jmp     short 032663EF                         ;一直往下拉,到这里,按F4
                                                                        ;中断在这里,取消断点,并撤销前面的修改(nop的地方),

032663EC    D6              salc
032663ED    D6              salc
032663EE    8F              ???                                      ; 未知命令
032663EF    8B15 AC063703   mov     edx, dword ptr [33706AC]

(4)下bp CreateThread 断点,shift+F9后,Ctrl+F9返回,用F8单步走,
03270F16    50              push    eax                        ;回到这里
03270F17    FF15 A0C33303   call    dword ptr [333C3A0]              ; kernel32.CloseHandle
03270F1D    5E              pop     esi
03270F1E    5B              pop     ebx
03270F1F    8BE5            mov     esp, ebp
03270F21    5D              pop     ebp
03270F22    C3              retn                        ;F8 跟着走

然后往下拉找到类似 call 寄存器,下面是代码

...省略若干代码
03297248    8B55 08         mov     edx, dword ptr [ebp+8]
0329724B    8B42 04         mov     eax, dword ptr [edx+4]
0329724E    50              push    eax
0329724F    8B4D 08         mov     ecx, dword ptr [ebp+8]
03297252    8B51 08         mov     edx, dword ptr [ecx+8]
03297255    52              push    edx
03297256    6A 00           push    0
03297258    8B45 08         mov     eax, dword ptr [ebp+8]
0329725B    8B48 10         mov     ecx, dword ptr [eax+10]
0329725E    51              push    ecx
0329725F    8B55 F4         mov     edx, dword ptr [ebp-C]
03297262    2B55 D8         sub     edx, dword ptr [ebp-28]
03297265    FFD2            call    edx                                ;<===  这里 F7进入
03297267    8945 FC         mov     dword ptr [ebp-4], eax
0329726A    8B45 FC         mov     eax, dword ptr [ebp-4]
0329726D    5E              pop     esi
0329726E    8BE5            mov     esp, ebp
03297270    5D              pop     ebp
03297271    C3              retn
03297272    CC              int3

进去就来到OEP了,接下来的就是Dump 了

(5)打开load pe dump full

(6)打开 ImportREC (用1.7,一开始我用1.6X的折腾半天发现找出来的输入表有问题,改为1.7就正常,怀疑是win7 x64兼容性问题)

1、填入 OEP  
2、IAT AutoSearch
3、Get Imports
4、Show Invalid
5、Cut thunks
6、Fix Dump

③ 运行 修正后的文件发现还会出错,载入OD检查,发现数据(.data) 段有问题,造成内存错误

用OD载入 忽略所有异常
直接 bp CreateThread ,然后 Ctrl+G 到OEP 按F4 让程序停在OEP

用loadpe  dump 数据段-〉保存为 文件data.dmp

用ultraEdit或者winHex 打开脱壳后的文件 把data.dmp 文件的内容覆盖到 脱壳后文件对应的数据段。。

运行修改后的文件 。。。运行成功。。。

虽然不知道还有没有暗桩,不过已经可以运行。就满足要求!

脱壳方法不知道是否正确,请各位大牛批评指正,谢谢!

(本贴同发 pediy 和 unpack ,转载请保留出处,万分感谢)

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
打赏
分享
最新回复 (6)
雪    币: 161
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
非法操作 2013-2-1 22:05
2
0
谢谢分享 请问一下Magic Jump 不用修改成jmp吗?
雪    币: 2951
活跃值: (1682)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chixiaojie 2013-2-1 22:41
3
0
确实有这么高的版本的穿山甲,只是你没下载到而己。
雪    币: 333
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wan 2013-2-2 10:45
4
0
看看ArmaG3ddon_v2.0的标题你就知道,对WIN7还没支持好
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
binglan212 2013-2-2 12:33
5
0
nop 的方法和 jmp 差不多,都是改变程序流程
雪    币: 56
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
首选影魔 1 2013-2-14 20:29
6
0
大侠你好,我最近在破解epubBuilder这款软件,查的应该是armadillo 4.40全保护的壳,看了看雪很多教程以及一些视频教程,脱完后程序倒是没崩溃,但是也没任何反应,程序既不退出也不崩溃,但是也不弹出主窗口,不知道咋回事?
雪    币: 145
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
winnip 1 2013-2-14 20:53
7
0
程序发出来嘛我也脱脱过过瘾
游客
登录 | 注册 方可回帖
返回