【文章标题】: 第一次手脱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
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课