首页
社区
课程
招聘
仿<<按键精灵3 V3.11>>的脱文――脱Armadillo 3.0
发表于: 2005-2-3 08:36 4599

仿<<按键精灵3 V3.11>>的脱文――脱Armadillo 3.0

2005-2-3 08:36
4599
仿<<按键精灵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”, 不知什么原因,请各位大侠指点一二。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
2
很奇怪不行,很多地方写的太简单了,跟不来。。。
2005-6-10 20:52
0
游客
登录 | 注册 方可回帖
返回
//