首页
社区
课程
招聘
[原创]第一次手脱Armadillo
发表于: 2006-6-28 13:51 4949

[原创]第一次手脱Armadillo

2006-6-28 13:51
4949
【文章标题】: 第一次手脱Armadillo
【文章作者】: decolor
【软件名称】: PaperPort 9 Pro Office 简体中文零售版
【软件大小】: 90.7M
【下载地址】: http://lib.verycd.com/2006/06/23/0000108039.html
【加壳方式】: Armadillo 3.78 - 4.xx -> Silicon Realms
【编写语言】: Microsoft Visual C++
【使用工具】: OllyDBG 汉化第二版,LordPE Deluxe 增强版,ImportREC v1.6F,PEiD v0.94,FI 4.01a
【操作平台】: WinXP+SP2
【软件介绍】: PaperPort是一款文件管理软件。它可以帮你在你的个人电脑上整理、访问、共享和管理文档和图片文件。
              提供功能:
              *创建、编辑、管理PDF文档
              *用流行的文件格式(PDF,JPEG,TIFF)直接扫描文档和图片
              *从你的数码相机获取图片,用PaperPort自带的工具整理和索引他们
              *将文档打印成图片或PDF文件
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

一、查壳

程序用序列号安装后需要上网激活,不激活只能使用5次,算了,先查壳
用PEiD查壳 Armadillo 3.78 - 4.xx -> Silicon Realms
用FI 4.01a 查一下 显示为 Armadillo v3.75c-d big {glue}

二、寻找OEP并DUMP

设置Ollydbg忽略所有异常,同时忽略指定C0000001-C0009898范围内的异常

OD 载入

004D7000 > $  60            PUSHAD                               ; OD入口点
004D7001   .  E8 00000000   CALL PaprPort.004D7006
004D7006   $  5D            POP EBP
004D7007   .  50            PUSH EAX
004D7008   .  51            PUSH ECX
004D7009   .  0FCA          BSWAP EDX
004D700B   .  F7D2          NOT EDX

下断点HE GetModuleHandleA

按F9运行,中间会有两次提示,Shift+F9继续,中断后,看堆栈:

00138CB0   00B80445  /CALL 到 GetModuleHandleA 来自 00B8043F
00138CB4   00B93D68  \pModule = "kernel32.dll"
00138CB8   00B94F30  ASCII "VirtualAlloc"

00138CB0   00B80462  /CALL 到 GetModuleHandleA 来自 00B8045C
00138CB4   00B93D68  \pModule = "kernel32.dll"
00138CB8   00B94F24  ASCII "VirtualFree"

00138A28   00B699C1  /CALL 到 GetModuleHandleA 来自 00B699BB
00138A2C   00138B64  \pModule = "kernel32.dll"                       ; ★在这里清除硬件断点后Alt+F9返回程序

00B699C1    8B0D 2091B900   MOV ECX,DWORD PTR DS:[B99120]            ; 返回在这里
00B699C7    89040E          MOV DWORD PTR DS:[ESI+ECX],EAX
00B699CA    A1 2091B900     MOV EAX,DWORD PTR DS:[B99120]
00B699CF    393C06          CMP DWORD PTR DS:[ESI+EAX],EDI
00B699D2    75 16           JNZ SHORT 00B699EA
00B699D4    8D85 B4FEFFFF   LEA EAX,DWORD PTR SS:[EBP-14C]
00B699DA    50              PUSH EAX
00B699DB    FF15 D4E0B800   CALL DWORD PTR DS:[B8E0D4]               ; kernel32.LoadLibraryA
00B699E1    8B0D 2091B900   MOV ECX,DWORD PTR DS:[B99120]
00B699E7    89040E          MOV DWORD PTR DS:[ESI+ECX],EAX
00B699EA    A1 2091B900     MOV EAX,DWORD PTR DS:[B99120]
00B699EF    393C06          CMP DWORD PTR DS:[ESI+EAX],EDI
00B699F2    0F84 B3000000   JE 00B69AAB                              ; Magic Jump!修改为:jmp 00B69AAB  ★
00B699F8    33C9            XOR ECX,ECX
00B699FA    8B03            MOV EAX,DWORD PTR DS:[EBX]
00B699FC    3938            CMP DWORD PTR DS:[EAX],EDI
00B699FE    74 06           JE SHORT 00B69A06
00B69A00    41              INC ECX
00B69A01    83C0 0C         ADD EAX,0C
00B69A04  ^ EB F6           JMP SHORT 00B699FC

继续下断点bp CreateThread,F9 运行

运行中断后,到这里

7C81082F >  8BFF            MOV EDI,EDI
7C810831    55              PUSH EBP
7C810832    8BEC            MOV EBP,ESP
7C810834    FF75 1C         PUSH DWORD PTR SS:[EBP+1C]
7C810837    FF75 18         PUSH DWORD PTR SS:[EBP+18]
7C81083A    FF75 14         PUSH DWORD PTR SS:[EBP+14]
7C81083D    FF75 10         PUSH DWORD PTR SS:[EBP+10]
7C810840    FF75 0C         PUSH DWORD PTR SS:[EBP+C]
7C810843    FF75 08         PUSH DWORD PTR SS:[EBP+8]
7C810846    6A FF           PUSH -1
7C810848    E8 D9FDFFFF     CALL kernel32.CreateRemoteThread
7C81084D    5D              POP EBP
7C81084E    C2 1800         RETN 18

看堆栈:

0013D744   00B6F8B0  /CALL 到 CreateThread 来自 00B6F8AA             ; ★在这里清除断点后Alt+F9返回程序
0013D748   00000000  |pSecurity = NULL
0013D74C   00000000  |StackSize = 0
0013D750   00B700B8  |ThreadFunction = 00B700B8
0013D754   00000000  |pThreadParm = NULL
0013D758   00000000  |CreationFlags = 0
0013D75C   0013D764  \pThreadId = 0013D764
0013D760   004ED558  PaprPort.004ED558

取消断点,Alt+F9 返回到这里,F8运行
00B6F8B0    5E              POP ESI                                  ; PaprPort.004ED558
00B6F8B1    C9              LEAVE
00B6F8B2    C3              RETN                                     ; 返回到00B88B29

F8继续运行

00B88B29    6A 00           PUSH 0
00B88B2B    C705 8842B900 A>MOV DWORD PTR DS:[B94288],0B94FAC        ; ASCII "RC"
00B88B35    E8 E90BFEFF     CALL 00B69723
00B88B3A    59              POP ECX
00B88B3B    59              POP ECX
00B88B3C    E8 35F6FEFF     CALL 00B78176
00B88B41    8BF8            MOV EDI,EAX
00B88B43    A1 90D5B900     MOV EAX,DWORD PTR DS:[B9D590]
00B88B48    8B88 80000000   MOV ECX,DWORD PTR DS:[EAX+80]
00B88B4E    3348 44         XOR ECX,DWORD PTR DS:[EAX+44]
00B88B51    3348 14         XOR ECX,DWORD PTR DS:[EAX+14]
00B88B54    03F9            ADD EDI,ECX
00B88B56    8B0E            MOV ECX,DWORD PTR DS:[ESI]
00B88B58    85C9            TEST ECX,ECX
00B88B5A    75 32           JNZ SHORT 00B88B8E
00B88B5C    8BB8 80000000   MOV EDI,DWORD PTR DS:[EAX+80]
00B88B62    E8 0FF6FEFF     CALL 00B78176
00B88B67    8B0D 90D5B900   MOV ECX,DWORD PTR DS:[B9D590]            ; PaprPort.004E7310
00B88B6D    FF76 14         PUSH DWORD PTR DS:[ESI+14]
00B88B70    8B51 44         MOV EDX,DWORD PTR DS:[ECX+44]
00B88B73    FF76 10         PUSH DWORD PTR DS:[ESI+10]
00B88B76    3351 14         XOR EDX,DWORD PTR DS:[ECX+14]
00B88B79    FF76 0C         PUSH DWORD PTR DS:[ESI+C]
00B88B7C    33D7            XOR EDX,EDI
00B88B7E    03C2            ADD EAX,EDX
00B88B80    8B51 38         MOV EDX,DWORD PTR DS:[ECX+38]
00B88B83    3351 30         XOR EDX,DWORD PTR DS:[ECX+30]
00B88B86    33D7            XOR EDX,EDI
00B88B88    2BC2            SUB EAX,EDX
00B88B8A    FFD0            CALL EAX
00B88B8C    EB 28           JMP SHORT 00B88BB6
00B88B8E    83F9 01         CMP ECX,1
00B88B91    75 25           JNZ SHORT 00B88BB8
00B88B93    FF76 04         PUSH DWORD PTR DS:[ESI+4]
00B88B96    FF76 08         PUSH DWORD PTR DS:[ESI+8]
00B88B99    6A 00           PUSH 0
00B88B9B    E8 D6F5FEFF     CALL 00B78176
00B88BA0    50              PUSH EAX
00B88BA1    A1 90D5B900     MOV EAX,DWORD PTR DS:[B9D590]
00B88BA6    8B88 80000000   MOV ECX,DWORD PTR DS:[EAX+80]
00B88BAC    3348 38         XOR ECX,DWORD PTR DS:[EAX+38]
00B88BAF    3348 30         XOR ECX,DWORD PTR DS:[EAX+30]
00B88BB2    2BF9            SUB EDI,ECX
00B88BB4    FFD7            CALL EDI                                 ; 真正的OEP,F7追进去
00B88BB6    8BD8            MOV EBX,EAX
00B88BB8    5F              POP EDI
00B88BB9    8BC3            MOV EAX,EBX
00B88BBB    5E              POP ESI
00B88BBC    5B              POP EBX
00B88BBD    C3              RETN

进入00B88BB4

0046ECDA    55              PUSH EBP                                 ; 追进来后这就是OEP了
0046ECDB    8BEC            MOV EBP,ESP
0046ECDD    6A FF           PUSH -1
0046ECDF    68 68274800     PUSH PaprPort.00482768
0046ECE4    68 A2F04600     PUSH PaprPort.0046F0A2                   ; JMP 到 MSLURT._except_handler3
0046ECE9    64:A1 00000000  MOV EAX,DWORD PTR FS:[0]
0046ECEF    50              PUSH EAX
0046ECF0    64:8925 0000000>MOV DWORD PTR FS:[0],ESP
0046ECF7    83EC 68         SUB ESP,68
0046ECFA    53              PUSH EBX
0046ECFB    56              PUSH ESI
0046ECFC    57              PUSH EDI
0046ECFD    8965 E8         MOV DWORD PTR SS:[EBP-18],ESP
0046ED00    33DB            XOR EBX,EBX
0046ED02    895D FC         MOV DWORD PTR SS:[EBP-4],EBX

不关OD,用 LordPE FULL DUMP进程

三、修复IAT

完整转存后用 ImportREC v1.6F 修复IAT,OEP处填6ECDA  自动搜索IAT 获取输入表

当前输入表:
0 (十进制:0) 个有效模块
387 (十进制:903) 个输入函数. (已添加: +387 (十进制:+903))
(15 (十进制:21) 个未识别的指针) (已添加: +15 (十进制:+21))

这里有21个无效指针,全部CUT掉,最后修复抓取文件

四、优化

保存修复后用peid扫描还有壳

Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks

学习fly的经验
用PETools->PE Ediotr打开脱壳后文件
->Optional Header
修改Major Linker Version、Minor Linker Version为00 00

最后用 LordPE 打开脱壳后的文件,把 text1 adata data1 padtat 这4个区段删除掉,重建PE文件
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年06月28日 11:27:35

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

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
支持并鼓励一下 :-)
2006-6-28 13:54
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
3
最初由 dINO 发布
支持并鼓励一下 :-)


Again  
2006-6-28 14:38
0
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
4
支持~~~继续~~
2006-6-28 15:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
加油,顶一下!
2006-6-29 13:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
努力??中 ....

目前只?用程式去?? ,然後再暴力破 ..... 唉 !!!

手?? Armadillo 3.78 - 4.xx -> Silicon Realms ... 完全不? ..

呵呵 , 著著大大分享 !!
2006-6-29 16:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
DLL的ARMADILLO壳不知道好不好脱啊,我还是新人。要努力学习
2006-8-7 15:05
0
游客
登录 | 注册 方可回帖
返回
//