首页
社区
课程
招聘
[原创]除夕献礼-Armadillo 4.0单进程之密传精灵脱机V 1.9.5脱壳教程
发表于: 2006-1-28 12:13 9398

[原创]除夕献礼-Armadillo 4.0单进程之密传精灵脱机V 1.9.5脱壳教程

2006-1-28 12:13
9398
本教程配脱壳过程动画,在此感谢 venski 提供下载空间

【脱壳作者】 刹那恍惚
【作者邮箱】 [email]RegKiller2002@yahoo.com.cn[/email]
【作者 QQ 】 14403147
【使用工具】 OllyDBG 汉化第二版,LordPE Deluxe 增强版,ImportREC v1.6F,PEiD v0.94,FI 4.01a
【脱壳平台】 WinXP SP2
【软件名称】 密传精灵脱机V 1.9.5
【下载地址】 http://www.jlwgw.com/   官网的最新版本是V1.94,未提供v1.95下载,我脱的这个版本听说是内测版,一会打包给大家
【软件简介】 本人不玩游戏,反正是个外挂,还是咨询作者来做介绍吧。
【软件大小】 1.50 MB
【加壳方式】 Armadillo 4.0 {glue} SRT
【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
【脱壳时间】2006年01月26日(除夕)

--------------------------------------------------------------------------------
【脱壳内容】

一、准备工作

老规矩设置Ollydbg忽略所有异常,用IsDebug 1.4插件去掉Ollydbg的调试器标志。

侦壳:用PEiD查壳 Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks 这里PEiD显示的是错的。(也许是我的PEiD的签名问题)
        我们再用FI 4.01a 查一下 显示为 Armadillo 4.00 {glue}

这里如何判断到底哪个对呢?记得FLY大狭说过Armadillo V4.0新增的反跟踪手段:

OllyDbg在处理调式包含格式串的消息时存在问题,被跟踪的应用程序可以使OllyDbg崩溃,或可能以进程权限执行任意指令。OutputDebugString函数可发送字符串到调试器上,然后OllyDbg会在底端显示相关状态消息,但是如果包含格式串消息,就可能使OllyDbg崩溃。Armadillo以前的版本没有此种Anti,自V4.0始才有。

有他这句话我们就可以做如下判断了:

OD 载入

下断点 HE OutputDebugStringA

Shift+F9运行,中断下来。看堆栈:

0012EBE8   00E4236B  /CALL 到 OutputDebugStringA 来自 00E42365
0012EBEC   0012F568  \String = "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s"

出现这个说明这个壳我们还是以 FI 4.01a 查出的结果为准

判断进程:启动程序。然后在 Windows 任务管理器或LordPE里查看是单进程的Armadillo还是双进程的。

这个程序是单进程的,我们可以省略分离父子进程的过程。

二 、脱壳

清除断点后OD 重新载入

0060F433 >/$  55            PUSH EBP                                 ;  停在这里
0060F434  |.  8BEC          MOV EBP,ESP
0060F436  |.  6A FF         PUSH -1
0060F438  |.  68 88916300   PUSH mz.00639188
0060F43D  |.  68 70F16000   PUSH mz.0060F170                         ;  SE 处理程序安装

下断点HE GetModuleHandleA

按F9运行中断后,看堆栈:

0012FF38   0060F4FB  /CALL 到 GetModuleHandleA 来自 mz.0060F4F5
0012FF3C   00000000  \pModule = NULL

0012E598   74683BEE  /CALL 到 GetModuleHandleA 来自 74683BE8
0012E59C   0012E5A0  \pModule = "D:\WINDOWS\system32\ntdll.dll"

0012E5A0   74683BEE  /CALL 到 GetModuleHandleA 来自 74683BE8
0012E5A4   0012E5A8  \pModule = "D:\WINDOWS\system32\imm32.dll"

0012E4EC   74683BEE  /CALL 到 GetModuleHandleA 来自 74683BE8
0012E4F0   0012E4F4  \pModule = "D:\WINDOWS\system32\KERNEL32"

0012EC78   7365D4A4  /CALL 到 GetModuleHandleA 来自 msctfime.7365D49E
0012EC7C   0012EC80  \pModule = "D:\WINDOWS\system32\ntdll.dll"

0012E884   77F45BD8  /CALL 到 GetModuleHandleA 来自 77F45BD2
0012E888   77F4501C  \pModule = "KERNEL32.DLL"

0012F6B8   005F8D7B  /CALL 到 GetModuleHandleA 来自 mz.005F8D75
0012F6BC   00000000  \pModule = NULL

0012967C   00E42FF1  /CALL 到 GetModuleHandleA 来自 00E42FEB
00129680   00E53D6C  \pModule = "kernel32.dll"
00129684   00E55D7C  ASCII "VirtualAlloc"

0012967C   00E4300E  /CALL 到 GetModuleHandleA 来自 00E43008
00129680   00E53D6C  \pModule = "kernel32.dll"
00129684   00E55D70  ASCII "VirtualFree"

0012941C   00E35345  /CALL 到 GetModuleHandleA 来自 00E3533F
00129420   00129558  \pModule = "kernel32.dll"                         ; ★注意!在这里清除硬件断点后Alt+F9返回程序

这里说下我判断返回的经验,我的经验是一般出现下面这两句就快到返回点了

0012967C   00E42FF1  /CALL 到 GetModuleHandleA 来自 00E42FEB
00129680   00E53D6C  \pModule = "kernel32.dll"
00129684   00E55D7C  ASCII "VirtualAlloc"                              ; 这句VirtualAlloc

0012967C   00E4300E  /CALL 到 GetModuleHandleA 来自 00E43008
00129680   00E53D6C  \pModule = "kernel32.dll"
00129684   00E55D70  ASCII "VirtualFree"                               ; 这句VirtualAlloc

这里如果说的不对就请大侠们指教了。呵呵。

00E35345    8B0D 34CFE500   MOV ECX,DWORD PTR DS:[E5CF34]            ; 返回到这里
00E3534B    89040E          MOV DWORD PTR DS:[ESI+ECX],EAX
00E3534E    A1 34CFE500     MOV EAX,DWORD PTR DS:[E5CF34]
00E35353    393C06          CMP DWORD PTR DS:[ESI+EAX],EDI
00E35356    75 16           JNZ SHORT 00E3536E
00E35358    8D85 DCFEFFFF   LEA EAX,DWORD PTR SS:[EBP-124]
00E3535E    50              PUSH EAX
00E3535F    FF15 90E0E400   CALL DWORD PTR DS:[E4E090]               ; kernel32.LoadLibraryA
00E35365    8B0D 34CFE500   MOV ECX,DWORD PTR DS:[E5CF34]
00E3536B    89040E          MOV DWORD PTR DS:[ESI+ECX],EAX
00E3536E    A1 34CFE500     MOV EAX,DWORD PTR DS:[E5CF34]
00E35373    393C06          CMP DWORD PTR DS:[ESI+EAX],EDI
00E35376    0F84 2F010000   JE 00E354AB                              ; 改成为 JMP 00E354AB 修改这是为了避开IAT加密
00E3537C    33C9            XOR ECX,ECX
00E3537E    8B03            MOV EAX,DWORD PTR DS:[EBX]
00E35380    3938            CMP DWORD PTR DS:[EAX],EDI
00E35382    74 06           JE SHORT 00E3538A
00E35384    41              INC ECX
00E35385    83C0 0C         ADD EAX,0C
00E35388  ^ EB F6           JMP SHORT 00E35380

继续下断点 bp GetCurrentThreadId
按F9运行中断后,看堆栈:

00128CDC   73391E36  /CALL 到 GetCurrentThreadId 来自 73391E30

00128CBC   7339353F  /CALL 到 GetCurrentThreadId 来自 73393539

00128EF8   73DC9AD7  /CALL 到 GetCurrentThreadId 来自 73DC9AD1

0012F5C4   746908FE  /CALL 到 GetCurrentThreadId 来自 MSCTF.746908F8

0012F59C   7468FA53  /CALL 到 GetCurrentThreadId 来自 MSCTF.7468FA4D

0012F5C4   746908FE  /CALL 到 GetCurrentThreadId 来自 MSCTF.746908F8

0012F5C4   746908FE  /CALL 到 GetCurrentThreadId 来自 MSCTF.746908F8

0012F518   77D6B4FA  /CALL 到 GetCurrentThreadId 来自 USER32.77D6B4F4

0012F71C   00E356DC  /CALL 到 GetCurrentThreadId 来自 00E356D6          ; ★注意!在这里清除断点后Alt+F9返回程序

这里说下我判断返回的经验,我的经验是 00E356D6 跟上面跨段很大。前面都是7开头的,而这个是00E开始的。
这里如果说的不对就请大侠们指教了。呵呵。

00E356DC    50              PUSH EAX                                 ; 返回到这里。我们F8单步向下下走
00E356DD    FF75 FC         PUSH DWORD PTR SS:[EBP-4]
00E356E0    E8 05000000     CALL 00E356EA
00E356E5    83C4 0C         ADD ESP,0C
00E356E8    C9              LEAVE
00E356E9    C3              RETN                                     ; 返回到 00E4966B
00E356EA    E8 82FFFFFF     CALL 00E35671
00E356EF    6A 14           PUSH 14
00E356F1    E8 E0770100     CALL 00E4CED6                            ; JMP 到 msvcrt.??2@YAPAXI@Z
00E356F6    85C0            TEST EAX,EAX
00E356F8    59              POP ECX

00E4966B    6A 00           PUSH 0                                   ; 返回到这里。继续F8向下走
00E4966D    E8 FBFCFEFF     CALL 00E3936D
00E49672    59              POP ECX
00E49673    BF 2089E500     MOV EDI,0E58920
00E49678    8BCF            MOV ECX,EDI
00E4967A    E8 14E9FDFF     CALL 00E27F93
00E4967F    84C0            TEST AL,AL
00E49681    75 09           JNZ SHORT 00E4968C
00E49683    6A 01           PUSH 1
00E49685    8BCF            MOV ECX,EDI
00E49687    E8 E03BFEFF     CALL 00E2D26C
00E4968C    B9 004DE600     MOV ECX,0E64D00
00E49691    C705 3042E500 9>MOV DWORD PTR DS:[E54230],0E55E90
00E4969B    E8 22380000     CALL 00E4CEC2
00E496A0    6A 00           PUSH 0
00E496A2    E8 1B380000     CALL 00E4CEC2
00E496A7    59              POP ECX
00E496A8    33C9            XOR ECX,ECX
00E496AA    380D 448FE500   CMP BYTE PTR DS:[E58F44],CL
00E496B0    75 3C           JNZ SHORT 00E496EE
00E496B2    A1 6C8FE500     MOV EAX,DWORD PTR DS:[E58F6C]
00E496B7    53              PUSH EBX
00E496B8    8B48 58         MOV ECX,DWORD PTR DS:[EAX+58]
00E496BB    894D 08         MOV DWORD PTR SS:[EBP+8],ECX
00E496BE    8BB8 88000000   MOV EDI,DWORD PTR DS:[EAX+88]
00E496C4    3378 6C         XOR EDI,DWORD PTR DS:[EAX+6C]
00E496C7    8B98 84000000   MOV EBX,DWORD PTR DS:[EAX+84]
00E496CD    3358 70         XOR EBX,DWORD PTR DS:[EAX+70]
00E496D0    8D4D 08         LEA ECX,DWORD PTR SS:[EBP+8]
00E496D3    3378 50         XOR EDI,DWORD PTR DS:[EAX+50]
00E496D6    3358 0C         XOR EBX,DWORD PTR DS:[EAX+C]
00E496D9    033D 848FE500   ADD EDI,DWORD PTR DS:[E58F84]            ; mz.00400000
00E496DF    E8 1C79FDFF     CALL 00E21000
00E496E4    33D2            XOR EDX,EDX
00E496E6    F7F3            DIV EBX
00E496E8    8B0C3A          MOV ECX,DWORD PTR DS:[EDX+EDI]
00E496EB    5B              POP EBX
00E496EC    03D7            ADD EDX,EDI
00E496EE    A1 6C8FE500     MOV EAX,DWORD PTR DS:[E58F6C]
00E496F3    3148 58         XOR DWORD PTR DS:[EAX+58],ECX
00E496F6    A1 6C8FE500     MOV EAX,DWORD PTR DS:[E58F6C]
00E496FB    3148 58         XOR DWORD PTR DS:[EAX+58],ECX
00E496FE    A1 6C8FE500     MOV EAX,DWORD PTR DS:[E58F6C]
00E49703    8B16            MOV EDX,DWORD PTR DS:[ESI]
00E49705    8B88 84000000   MOV ECX,DWORD PTR DS:[EAX+84]
00E4970B    3348 78         XOR ECX,DWORD PTR DS:[EAX+78]
00E4970E    3348 10         XOR ECX,DWORD PTR DS:[EAX+10]
00E49711    030D 848FE500   ADD ECX,DWORD PTR DS:[E58F84]            ; mz.00400000
00E49717    85D2            TEST EDX,EDX
00E49719    75 1A           JNZ SHORT 00E49735
00E4971B    8B90 84000000   MOV EDX,DWORD PTR DS:[EAX+84]
00E49721    FF76 18         PUSH DWORD PTR DS:[ESI+18]
00E49724    3350 68         XOR EDX,DWORD PTR DS:[EAX+68]
00E49727    FF76 14         PUSH DWORD PTR DS:[ESI+14]
00E4972A    3310            XOR EDX,DWORD PTR DS:[EAX]
00E4972C    FF76 10         PUSH DWORD PTR DS:[ESI+10]
00E4972F    2BCA            SUB ECX,EDX
00E49731    FFD1            CALL ECX
00E49733    EB 1F           JMP SHORT 00E49754
00E49735    83FA 01         CMP EDX,1
00E49738    75 1D           JNZ SHORT 00E49757
00E4973A    FF76 04         PUSH DWORD PTR DS:[ESI+4]
00E4973D    8B90 84000000   MOV EDX,DWORD PTR DS:[EAX+84]
00E49743    3350 68         XOR EDX,DWORD PTR DS:[EAX+68]
00E49746    FF76 08         PUSH DWORD PTR DS:[ESI+8]
00E49749    3310            XOR EDX,DWORD PTR DS:[EAX]
00E4974B    6A 00           PUSH 0
00E4974D    FF76 0C         PUSH DWORD PTR DS:[ESI+C]
00E49750    2BCA            SUB ECX,EDX
00E49752    FFD1            CALL ECX                                 ; 真正的OEP,F7追进去
00E49754    8945 FC         MOV DWORD PTR SS:[EBP-4],EAX
00E49757    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
00E4975A    5F              POP EDI
00E4975B    5E              POP ESI
00E4975C    C9              LEAVE
00E4975D    C3              RETN

0042C144    55              PUSH EBP                                 ; 追进来后这就是入口了。
0042C145    8BEC            MOV EBP,ESP
0042C147    6A FF           PUSH -1
0042C149    68 98234300     PUSH mz.00432398
0042C14E    68 CAC24200     PUSH mz.0042C2CA                         ; JMP 到 msvcrt._except_handler3
0042C153    64:A1 00000000  MOV EAX,DWORD PTR FS:[0]
0042C159    50              PUSH EAX
0042C15A    64:8925 0000000>MOV DWORD PTR FS:[0],ESP
0042C161    83EC 68         SUB ESP,68
0042C164    53              PUSH EBX
0042C165    56              PUSH ESI
0042C166    57              PUSH EDI
0042C167    8965 E8         MOV DWORD PTR SS:[EBP-18],ESP

三、修复IAT

现在可以用 LordPE DUMP了。完整转存后用 ImportREC v1.6F 修复IAT,OEP处填2C144  自动搜索IAT 获取输入表

显示无效函数
当前输入函数信息:
0 (十进制:0)
129 (十进制:297) 输入函数  增加: +129
(C (十进制:12)  无效指针(s)  增加: +C

这里有12个无效指针,全部CUT掉。修复抓取文件

最后可以给文件做个减肥。用 LordPE 打开脱壳后的文件。把 text1 adata data1 padtat 这4个区段删除掉。然后重建PE文件

--------------------------------------------------------------------------------
【脱壳总结】

单进程的可以省略分离父子进程的过程。

教程配套练习文件 + 脱壳过程动画演示下载

--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

本代码由xTiNt自动着色 http://kbadboy.yeah.net

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 538
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
很长..慢慢琢磨
2006-1-28 13:12
0
雪    币: 191
活跃值: (335)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
3
谁能提供8M空间我把练习文件和脱壳动画发上来
2006-1-28 13:37
0
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
4
kanxue能提供
2006-1-28 13:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我把楼主的相关教程已经上传到FTP了

破解演示录像教程
2006-1-28 14:44
0
雪    币: 243
活跃值: (274)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
双进程怎么办.
2006-1-28 15:12
0
雪    币: 191
活跃值: (335)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
7
双进程就多一步分离进程。差不多
2006-1-28 15:16
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
8
鼓励一下
侦壳工具能测出壳名就不错了,不要对其要求太高
另外,标准壳和CopyMem-II等方式还是有不同的
2006-1-28 16:31
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
看看就算了
吓我一跳 我还以为 脱壳机 给发布了呢
2006-1-28 17:08
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这个我也会脱哦,过程差不多,呵呵,但是你知道脱了之后怎么破解吗?大家一起研究研究.这个外挂应该是假的,用不了吧.
2006-1-28 20:38
0
雪    币: 191
活跃值: (335)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
11
可以用。我用朋友的账号测试过。这里只谈脱壳,没打算破解的。呵呵。
2006-1-28 22:18
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
12
太详细了,太感谢了。
我等你等了很久了~~
2006-1-29 08:45
0
雪    币: 206
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
好玩,好玩~
最近正愁呢~
2006-1-29 13:07
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
就要有图象教程才好学么,西西~!!!
楼主太善良呢~!新年快乐哦~!
2006-1-31 13:16
0
雪    币: 141
活跃值: (162)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
最初由 认真学习 发布
这个我也会脱哦,过程差不多,呵呵,但是你知道脱了之后怎么破解吗?大家一起研究研究.这个外挂应该是假的,用不了吧.


外挂是可以用的,我也用正式用户登录过,但破解找不到关键的地方,那个与服务器断开链接的地方向上找Call,一直向上找不到北了
脱壳的话,我当时不知道4.0的暗桩,我在修改为JMP后返回,再在.text段下断后,运行,马上dump,用peid找出来的OPE直接修复也可以的.
2006-2-1 08:49
0
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
我换了N个帐号都是这个问题,附图你看下
2006-2-7 14:20
0
雪    币: 191
活跃值: (335)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
17
可能有自效验,我只脱壳没做破解。
2006-2-8 07:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
进第一个窗口NO问题,登录进第二个窗口自动关闭,程序非法操作。
使用的是朋友的付费账号
2006-5-22 15:35
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hjm
19
太详细了慢慢琢磨
2006-5-22 21:57
0
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
不错.我慢慢看.收下先
2006-5-22 21:58
0
雪    币: 158
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
太谢谢了......
2006-5-26 00:17
0
雪    币: 372
活跃值: (31)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
22
请问LZ的破文生成器(有语法高亮)是在哪下载的?

能否提供一下 下载地址,谢。。。
2006-5-26 08:01
0
雪    币: 154
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
从1.79开始反破解的难度加大了,强制修改跳转就会出现非法,不过1.79之前的版本倒是非常好破,简直是脆弱。。。

PS:1.79之前帮朋友破过(因为自己没玩嘛),之后朋友没玩了也没关注了
2006-5-27 03:45
0
游客
登录 | 注册 方可回帖
返回
//