首页
社区
课程
招聘
[求助]Armadillo 3.78 - 4.xx疑问??
发表于: 2008-11-18 13:48 10941

[求助]Armadillo 3.78 - 4.xx疑问??

2008-11-18 13:48
10941
最近学习脱穿山甲,遇到这个壳无法手脱,请教疑问??期待看到脱壳文章。
软件下载地址:http://hyperionics.swmirror.com/HS6Setup.exe
peid查壳
Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks [Overlay]       (双进程附加数据)
AFP查保护模式
!- Protected Armadillo

<Protection Options>
Standard protection or Minimum protection
CopyMem-II                           
Enable Import Table Elimination
Enable Memory-Patching Protections

<Backup Key Options>
Variable Backup Keys
Fixed Backup Keys

<Compression Options>
Better/Slower Compression
Best/Slowest Compression
--------------------------------------------------------------------
OD忽略所有异常,载入程序,来到如下代码:
00718000 >  60              pushad                    //入口点
00718001    E8 00000000     call    00718006
00718006    5D              pop     ebp
00718007    50              push    eax
00718008    51              push    ecx
00718009    0FCA            bswap   edx
0071800B    F7D2            not     edx
0071800D    9C              pushfd
双进程转化单进程
下断点 bp OpenMutexA,Shift+F9运行,断在如下代码:
7C80EAAB >  8BFF            mov     edi, edi          //断在此处
7C80EAAD    55              push    ebp
7C80EAAE    8BEC            mov     ebp, esp
7C80EAB0    51              push    ecx
7C80EAB1    51              push    ecx
7C80EAB2    837D 10 00      cmp     dword ptr [ebp+10], 0
7C80EAB6    56              push    esi
去掉IAT加密:
Ctrl+G跟随到00401000,手动添加如些代码:
00401000      60             pushad                                          //右键设置为EIP
00401001      9C             pushfd
00401002      68 B8DD1200    push 12DDB8      ; ASCII "5BC::DA3CC3BE78"       //此处地址12DDB8,看堆栈MutexName对应的地址,自己修改
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

60 9C 68 B8 DD 12 00 33 C0 50 50 E8 B5 A6 A5 77 9D 61 E9 7A 13 A6 77         //上述代码的二进制形式
添加完成,F9运行,断下,F2取消断点,撤销修改.
下断 BP GetModuleHandleA+5,不停的shift+F9运行,同时观察堆栈窗口的变化,经过几次后,堆栈如下:
0012943C  /0012EB50
00129440  |00FE5C65  返回到 00FE5C65 来自 kernel32.GetModuleHandleA
00129444  |01011BA8  ASCII "kernel32.dll"
00129448  |01012B44  ASCII "VirtualAlloc"         //关键提示信息
0012944C  |ED9633DE
00129450  |00728380  HprSnap6.00728380
继续shift+F9,堆栈如下:
0012943C  /0012EB50
00129440  |00FE5C83  返回到 00FE5C83 来自 kernel32.GetModuleHandleA
00129444  |01011BA8  ASCII "kernel32.dll"
00129448  |01012B38  ASCII "VirtualFree"         //关键提示信息
0012944C  |ED9633DE
00129450  |00728380  HprSnap6.00728380
再一次shift+F9,堆栈如下:
0012918C  |00FC83E4  返回到 00FC83E4 来自 kernel32.GetModuleHandleA
00129190  |00129308  ASCII "kernel32.dll"       //关键提示信息
00129194  |00000000
00129198  |00728380  HprSnap6.00728380
0012919C  |00000000
此处是返回程序领空的返回时机,取消断点,ALT+f9来到如下代码:
00FC83E4    8B55 F4         mov     edx, dword ptr [ebp-C]
00FC83E7    8B0D 84EF0101   mov     ecx, dword ptr [101EF84]
00FC83ED    890491          mov     dword ptr [ecx+edx*4], eax
00FC83F0    8B55 F4         mov     edx, dword ptr [ebp-C]
00FC83F3    A1 84EF0101     mov     eax, dword ptr [101EF84]
00FC83F8    833C90 00       cmp     dword ptr [eax+edx*4], 0
00FC83FC    75 5C           jnz     short 00FC845A
00FC83FE    8B4D F8         mov     ecx, dword ptr [ebp-8]
00FC8401    8B51 08         mov     edx, dword ptr [ecx+8]
00FC8404    83E2 02         and     edx, 2
00FC8407    74 38           je      short 00FC8441
00FC8409    B8 12000000     mov     eax, 12
00FC840E    C1E0 02         shl     eax, 2
00FC8411    8B0D 04CB0101   mov     ecx, dword ptr [101CB04]         ; HprSnap6.00728380
00FC8417    8B15 04CB0101   mov     edx, dword ptr [101CB04]         ; HprSnap6.00728380
00FC841D    8B35 04CB0101   mov     esi, dword ptr [101CB04]         ; HprSnap6.00728380
00FC8423    8B5E 30         mov     ebx, dword ptr [esi+30]
00FC8426    335A 68         xor     ebx, dword ptr [edx+68]
00FC8429    331C01          xor     ebx, dword ptr [ecx+eax]
00FC842C    83E3 10         and     ebx, 10
00FC842F    F7DB            neg     ebx
00FC8431    1BDB            sbb     ebx, ebx
00FC8433    F7DB            neg     ebx
00FC8435    0FB6C3          movzx   eax, bl
00FC8438    85C0            test    eax, eax
00FC843A    75 05           jnz     short 00FC8441
00FC843C  ^ E9 1BFFFFFF     jmp     00FC835C
00FC8441    8D8D C8FEFFFF   lea     ecx, dword ptr [ebp-138]
00FC8447    51              push    ecx
00FC8448    FF15 88F00001   call    dword ptr [100F088]              ; kernel32.LoadLibraryA         //关键信息
00FC844E    8B55 F4         mov     edx, dword ptr [ebp-C]
00FC8451    8B0D 84EF0101   mov     ecx, dword ptr [101EF84]
00FC8457    890491          mov     dword ptr [ecx+edx*4], eax
00FC845A    8B55 F4         mov     edx, dword ptr [ebp-C]
00FC845D    A1 84EF0101     mov     eax, dword ptr [101EF84]
00FC8462    833C90 00       cmp     dword ptr [eax+edx*4], 0
00FC8466    75 05           jnz     short 00FC846D                       //此处为关键点,NOP掉,取消IAT加密
00FC8468  ^ E9 EFFEFFFF     jmp     00FC835C
00FC846D    C785 BCFEFFFF 0>mov     dword ptr [ebp-144], 0
00FC8477    C785 C0FEFFFF 0>mov     dword ptr [ebp-140], 0
00FC8481    8B4D F8         mov     ecx, dword ptr [ebp-8]
00FC8484    8B51 04         mov     edx, dword ptr [ecx+4]
00FC8487    8995 C4FEFFFF   mov     dword ptr [ebp-13C], edx
00FC848D    EB 0F           jmp     short 00FC849E
00FC848F    8B85 C4FEFFFF   mov     eax, dword ptr [ebp-13C]
00FC8495    83C0 0C         add     eax, 0C
00FC8498    8985 C4FEFFFF   mov     dword ptr [ebp-13C], eax
00FC849E    8B8D C4FEFFFF   mov     ecx, dword ptr [ebp-13C]
00FC84A4    8339 00         cmp     dword ptr [ecx], 0
00FC84A7    74 11           je      short 00FC84BA
修改后,继续向下面找到如下代码:
00FC86E2    893481          mov     dword ptr [ecx+eax*4], esi
00FC86E5  ^ E9 72FCFFFF     jmp     00FC835C
00FC86EA    EB 03           jmp     short 00FC86EF                //此处下F2断点
00FC86EC    D6              salc                                  //提示信息
00FC86ED    D6              salc                                  //提示信息
00FC86EE    8F              ???                                      ; 未知命令
F9运行,撤销nop修改,取消断点。
下断 bp CreatThread,F9运行断不下来。最后一步F9断不下来,请教这个壳如何脱??CC是什么意思??
我QQ是783552533

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

收藏
免费 1
支持
分享
最新回复 (20)
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
2
弄错了 是单进程非标准版的,有人就这个软件写个文章吧?虽然网上这种文章满天飞但是,说的不明白,按照操作也不行。看了天草的教程也弄不出来这个,高手们帮帮忙,来瞧瞧这个程序吧??
2008-11-18 22:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
~~~虽然不懂,但是帮你顶一下。
2008-11-19 09:16
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
仍然没人过问,国内气氛真不是太好啊
2008-11-19 12:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我有个和你一样的 壳  真汗啊。。搞不动/。。。。
<------- 19-11-2008 13:23:14 ------->
C:\Program Files\模拟考试\模拟考试(分辨率1024,768).exe
!- 目标为Armadillo保护
!- 保护系统级别为 (专业版)      
!- <所用到的保护模式有>
屏蔽调试器   
双进程模式
!- <备份密钥设置>      
固定的备份密钥   
!- <目标程序压缩设置>   
较好 / 较慢 的压缩方式   
!- <其它保护设置>
使用 Digital River 版本密钥   
<- Start <Stop debug>

!- 分离子进程  
子进程识别号为:  00000F40
入口点为 :  0062B000
原始字节为 :   60E8
!- 共使用的时间 00h 00m 24s 984ms
请选择下载方式:

直接下载  (提取码 095945dc)
2008-11-19 13:23
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
别死板教条,我看这程序没有双进程啊,干嘛非要双变单??
我也是菜鸟,但前几天脱个双进程非标准ARM时有个小经验
先修复OD的内存泄露补丁,就是先下断bp OutputDebugStringA
之后试着脱一下

要么用自动脱壳机,或者从pediy下载arm的脚本,脱一下,如果能成功脱掉,就完成任务
如果你是想学习为什么自动脱壳机或脚本能脱掉,而手工脱不掉
就再分析脚本都做了什么是你之前没有做的,就学习了

这个壳应该是5.42的吧

<------- 19-11-2008 15:59:20 ------->
C:\Documents and Settings\Administrator\桌面\HS6Setup\HprSnap6.exe
!- Protected Armadillo
Protection system (Professional)
!- <Protection Options>
Standard protection or Minimum protection
Enable Import Table Elimination
Enable Strategic Code Splicing
!- <Backup Key Options>
Variable Backup Keys
!- <Compression Options>
Best/Slowest Compression
!- <Other Options>
Disable Monitoring Thread
47BA1C00 Version 5.42 19-02-2008
!- Elapsed Time 00h 00m 00s 313ms
2008-11-19 15:11
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这个确实够郁闷人的,我也郁闷中
2008-11-20 00:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼上的,我们彼此彼此啊!我也想把穿山甲的壳给剥开,但是水平,是一个很重要的东西!!继续学中……
2008-11-20 10:25
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
9
继续学习啊,穿山甲其实也没什么,哈哈
2008-11-20 12:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我好像遇到一个穿山甲全保护的,猛啊!
2008-11-20 15:01
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
可以alt+m 在内存区下内存断点
2009-3-6 12:47
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
单进程

脱壳破解均已完成
2009-3-6 14:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
现在也正学习穿山甲的壳...
2009-3-13 13:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
同样问题,一直关注
2009-3-13 13:21
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
15
回头来看  仍然没有破文出现  看来还是要自己动手啊  过段时间我还是我自己来写破文吧
2009-4-5 01:08
0
雪    币: 2506
活跃值: (1000)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
16
前段时间专门写过一个脚本脱HyperSnap的。用OD载入程序后运行下面的脚本,等脚本运行完,用 ArmInline 修复 Code Splicing 及 Import Elimination 即可。

/*
Script written by CCDebuger
Script   : Armadillo 4.xx 6.x.x Standard Protect Unpack
版本     : v0.1
日期     : 15-2-2009
调试环境 : OllyDbg 1.1, ODBGScript 1.65, WINXP, WIN2000
调试选项 : 设置 OllyDbg 忽略所有异常选项 
工具 : OllyDbg, ODBGScript 1.65
感谢 : Oleh Yuschuk - author of OllyDbg
       SHaG - author of OllyScript
       hnhuqiong - author of ODbgScript
       某位提供双进程转单进程脚本的朋友。若有谁知道作者,请告知
*/

var temp
var GetModuleHandleA
var GetTickCount
var CreateThread
var MagicJump
var IATThunk
var CountJump
var FunctionChar
var oep

msg "请忽略所有异常,并添加忽略C000001E异常,然后运行本脚本!"
cmp $VERSION, "1.65"
jb errorver
bc
bphwcall
dbh
gpa "OpenMutexA","kernel32.dll"
bp $RESULT
esto
exec
pushad
pushfd
push edx
xor eax,eax
push eax
push eax
call kernel32.CreateMutexA
popfd
popad
jmp kernel32.OpenMutexA
ende
bc eip

gpa "GetModuleHandleA""kernel32.dll"
mov GetModuleHandleA, $RESULT + 5
bp GetModuleHandleA
esto

findFree:
esto
mov temp, [esp + 0C]
add temp, 7
cmp [temp], #46726565#    ;VirtualFree 中的字串 Free
jne findFree
esto
rtu
bc

arm5:

/*查找以下内容:
012B74AA   /EB 03           JMP SHORT 012B74AF
012B74AC   |D6              SALC
012B74AD   |D6              SALC
*/

find eip, #EB03D6D6#
bp $RESULT
find eip, #833C90007505#
mov MagicJump, $RESULT
cmp MagicJump, 0
je arm4
add MagicJump, 4
mov [MagicJump], 9090, 2        ;改成 nop
esto
bc
mov [MagicJump], 0575, 2
jmp Count

arm4:

/*查找以下内容:
01235FF7    391C06          CMP DWORD PTR DS:[ESI+EAX],EBX
01235FFA    0F84 2F010000   JE 0123612F                              ; magic jump,改成JMP
*/
find eip, #391C060F84#
mov MagicJump, $RESULT
cmp MagicJump, 0
je exit
add MagicJump, 3
mov [MagicJump], E990, 2
esto
bc
mov [MagicJump], 840F, 2

Count:
bc
gpa "GetTickCount""kernel32.dll"
mov GetTickCount, $RESULT + 5
bp GetTickCount

Count_Next:
esto
mov temp, [esp]

/*查找以下命令:
0124C6B5    8B8D 68CAFFFF   MOV ECX,DWORD PTR SS:[EBP-3598]
0124C6BB    8908            MOV DWORD PTR DS:[EAX],ECX               ; 这里写入 API 函数。这里设个断,可以看见输入表函数的开始地址是013ACB20。数据窗口中跟随这个地址查看
0124C6BD    8B85 10D9FFFF   MOV EAX,DWORD PTR SS:[EBP-26F0]
0124C6C3    83C0 04         ADD EAX,4
*/

find temp, #8B8D????????89088B??????????83??04#
mov IATThunk, $RESULT
cmp IATThunk, 0
je Count_Next

/*查找以下命令:
018DBE3A    81C1 D0070000   ADD ECX,7D0
018DBE40    3BC1            CMP EAX,ECX
018DBE42    76 07           JBE SHORT 018DBE4B                       ; 重点,这里改成 JMP,然后把代码往下拉,到刚出这段红色代码下的那个JMP处设硬件执行断点
*/

find IATThunk, #81C1D00700003BC17607#
mov CountJump, $RESULT
cmp CountJump, 0
je Count_Next
bc
add IATThunk, 6
bphws IATThunk, "x"
lc
find IATThunk, #EB03D6D6#
bp $RESULT
add CountJump, 8
mov [CountJump], 0EB, 1
esto
log eax"输入表中某函数的 VA = "
bphwcall
esto
mov [CountJump], 76, 1
bc

gpa "CreateThread""kernel32.dll"
mov CreateThread, $RESULT
bp CreateThread
esto
bc
rtu
rtr
sto

/*查找以下命令:
018E0475    FFD2            CALL EDX                                 ; 关键,这里就是到 OEP 的。在这设个硬件执行断点,SHIFT+F9 断下后再 F7 就到 OEP 了。
018E0477    8945 FC         MOV DWORD PTR SS:[EBP-4],EAX
018E047A    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
*/

find eip, #FF??8945??8B45??#
mov oep, $RESULT
cmp oep, 0
je exit
bp oep
sub oep, eip
find eip, #FF??8945#, oep
mov temp, $RESULT
cmp temp, 0
je arm4oep
jmp SetOherbp

arm4oep:
find eip, #FF??EB??83#, oep
mov temp, $RESULT
cmp temp, 0
je RuntoOep

SetOherbp:
bp temp

RuntoOep:
esto
bc
sti
mov oep, eip
log oep, "OEP VA = "
cmt eip"这就是 OEP 了"

exit:
ret

errorver:
msg "运行此脚本需要 ODbgScript 1.65 或更高的版本,您的版本过低,请更新 ODbgScript 后再试。"
ret
2009-4-5 20:28
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
17
谢谢副坛主   我想学习下手动脱这个壳
2009-5-27 17:19
0
雪    币: 184
活跃值: (47)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
手脱更简单  不过不需要修改magic jmp 那个作用不大 只能去修改push 100 这个开头 直接的去ret 就避让开IAT加密了 然后createthread才能断下来
2009-5-28 04:13
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
脚本更方便。学习了。
ArmInline 0.96很好用。
我也是手脱后,无法修复。
用了ArmInline,心情好多了。
2009-8-19 23:39
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
脱壳修复完成后,启动提示程序被修改自检验信息,若跳过这个错误信息,接着启动升级程序,同意或不同意升级,都再次启动脱壳程序,并提示程序发发生异常(非前面提示的自检验信息),即将退出。不知该如何下手。
2009-8-21 12:05
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
学习,向大虾学习。
2010-4-20 16:49
0
游客
登录 | 注册 方可回帖
返回
//