仿<<按键精灵3 V3.11>>的脱文――脱Armadillo 3.00a-3.61双进程标准壳
仿<<按键精灵3 V3.11>>的脱文――脱Armadillo 3.00a-3.61双进程标准壳 【脱壳目标】 Frontbase Image to Icon v2.00
【加壳方式】 Armadillo 3.00a - 3.61 -> Silicon Realms Toolworks
【保护方式】 双进程标准方式加壳
【脱壳平台】 Win2000
【脱壳工具】 Peid、Ollydbg、Loadpe、Imprec1.6F
【脱壳说明】 在参考其他脱文的基础上,深入学习“飞舞的T恤”大侠撰写的<<按键精灵3 V3.11>>的脱文,初步掌握Armadillo 3.00a-3.61双进程标准壳的脱壳技巧,及时提出在脱壳中遇到的一些难题,仅供大家学习、交流和解答。
【下载页面】
http://www.abcdown.com/soft/5148.htm
(网上有许多下载地址)
【脱壳步骤】
一、先找程序的oep
(一)设置Ollydbg,载入Frontbase Image to Icon v2.00
00511000 > 60 PUSHAD *进入OD后停在这儿*
00511001 E8 00000000 CALL image2ic.00511006
00511006 5D POP EBP
00511007 50 PUSH EAX
00511008 51 PUSH ECX
00511009 EB 0F JMP SHORT image2ic.0051101A
(二)下断点:bp WaitForDebugEvent,F9运行
77E7A6CF > 55 PUSH EBP*来到这里,F2清除断点,看看堆栈*
77E7A6D0 8BEC MOV EBP,ESP
77E7A6D2 81EC 9C000000 SUB ESP,9C
bp WaitForDebugEvent断下 时的堆栈:
0012DAAC 004EE7F0 /CALL 到 WaitForDebugEvent 来自 image2ic.004EE7EA
0012DAB0 0012EB60 |pDebugEvent = 0012EB60
0012DAB4 000003E8 \Timeout = 1000. ms
(三)在0012EB60上下转存中跟随
(四)下断点:bp WriteProcessMemory,F9运行
77E7ADB9 > 55 PUSH EBP*来到这里,F2清除断点,看转存窗口*
77E7ADBA 8BEC MOV EBP,ESP
77E7ADBC 51 PUSH ECX
77E7ADBD 51 PUSH ECX
77E7ADBE 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
看数据转存窗口:
0012EB60 01 00 00 00 24 02 00 00 ...$ ..
0012EB68 44 03 00 00 01 00 00 80 D .. ..?
0012EB70 00 00 00 00 00 00 00 00 ........
0012EB78 C9 FF 48 00 02 00 00 00 ?H. ...
0012EB80 00 00 00 00 C9 FF 48 00 ....?H.
0012EB88 C9 FF 48 00 A0 D5 28 81 ?H._?// 48FFC9就是OEP //
二、强制解压所有代码
(一)再在OD中重开程序,下硬件断点:he WaitForDebugEvent
(说明:OD插件自动隐藏OD,除“单步中断”外忽略所有异常)
77E7A6CF WaitForDeb> 55 PUSH EBP //断在这儿//
77E7A6D0 8BEC MOV EBP,ESP
77E7A6D2 81EC 9C000000 SUB ESP,9C
(二)按ALT+F9回到壳空间,搜索全部常数FFFFFFF8
004EEE5F OR EAX, FFFFFFF8
004EEE7A OR EDX, FFFFFFF8
004EEEA3 OR ECX, FFFFFFF8
004EF31E OR EDX, FFFFFFF8
004EF339 OR ECX, FFFFFFF8
004EF361 OR EAX, FFFFFFF8
(三)在004EEE5F上双击,来到以下代码处,朝上几行看:
004EEE13 83BD D4F5FFFF 00 CMP DWORD PTR SS:[EBP-A2C],0
// 找到 004EEE13 后,清除以前下的断点,在004EEE13处下硬件执行断点,运行停住 //
004EEE13 83BD D4F5FFFF 00 CMP DWORD PTR SS:[EBP-A2C],0
004EEE1A 0F8C 4E020000 JL image2ic.004EF06E// 这是关键代码
004EEE20 8B8D D4F5FFFF MOV ECX,DWORD PTR
(四)修改三处代码
找到以下三处代码,修改前:
004EEEE6 25 FF000000 AND EAX,0FF
004EEEEB 85C0 TEST EAX,EAX
004EEEED 0F84 7B010000 JE image2ic.004EF06E
修改后:
004EEEE6 FF05 4CEB1200 INC DWORD PTR DS:[12EB4C]
(说明:在004EEE13处下硬件执行断点,F9运行到004EEE13处,就会得到ebp-A2C=12EB4C)
004EEEEC 90 NOP
004EEEED ^E9 21FFFFFF JMP image2ic.004EEE13
(五)把12EB4C处置0,去掉所有硬件断点
按CTRL+G后输入12EB4C,然后在转存地址12EB4C上,按右键使用二进制00填充。
去掉所有硬件断点
(六)在0046b640处下断点,运行停住
004EF06E E9 4D0E0000 JMP image2ic.004EFEC0//断在这儿
004EF073 8B0D 7C125200 MOV ECX,DWORD PTR DS:[52127C]
004EF079 81F1 050000C0 XOR ECX,C0000005
004EF07F 398D DCF5FFFF CMP DWORD PTR SS:[EBP-A24],ECX
到此所有代码都强制解压完成。
三、运行LordPE,选择第2个进程(有2个同名进程),dump出程序
问题:当选择第2个进程时,按右键选择“完全脱壳”项时,程序却显示“无法得到进程内存”;若按右键先选择“激活脱壳引擎”项中的“InteliDump”子项,再选择“完全脱壳”项时,程序又显示“0*9E000 of 0*245000 bytes could not be dumped and were padded with zeros”, 不知什么原因,请各位大侠指点一二。
[课程]FART 脱壳王!加量不加价!FART作者讲授!