安全中国首页 > 文章中心 > 脱壳技术
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:www.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

爱的中体验之Armadillo3.X加壳的双进程基本壳

更新时间:2008-4-25 0:02:49
责任编辑:池天
热 点:
【脱文标题】 爱的中体验之Armadillo3.X加壳的双进程基本壳
   
【脱文作者】 weiyi75[Dfcg]

【作者邮箱】 weiyi75@sohu.com

【作者主页】 Dfcg官方大本营 ---  http://www.chinadfcg.com/

【使用工具】 Ollydbg,Loadpe,Imprec1.6F

【脱壳平台】 Win2K

【软件名称】 NOTEPAD

【软件简介】 Armadillo3.X版双进程标准加壳的Win98的记事本

【软件大小】 212KB  

【本地下载】本地下载
   
【加壳方式】 Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks

【保护方式】 双进程标准方式加壳

【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:

  
--------------------------------------------------------------------------------

【脱壳内容】

运行程序,发现进程里有两个Notepad.exe,昏。看了mysqladm的文章《试玩armadillo3.50a一点心得 》暂时无法吸收,看了Jwh51的文章,照猫画虎搞定,还是自己来一遍加深印像。

首先不要让父进程生成子进程,原理太复杂,没有深入的编程知识无法理解,急,日夜脱壳还是不够,还有N个壳等着要脱。先打好基础吧,慢慢来。

OD载入程序,插件自动隐藏OD,忽略所有异常。

00432999 >/$Content$nbsp; 55            PUSH EBP    //外壳入口
0043299A  |.  8BEC          MOV EBP,ESP
0043299C  |.  6A FF         PUSH -1
0043299E  |.  68 502C4500   PUSH NOTEPAD.00452C50
004329A3  |.  68 80234300   PUSH NOTEPAD.00432380                    ;  SE handler installation
004329A8  |.  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
004329AE  |.  50            PUSH EAX
004329AF  |.  64:8925 00000>MOV DWORD PTR FS:[0],ESP
004329B6  |.  83EC 58       SUB ESP,58
004329B9  |.  53            PUSH EBX
004329BA  |.  56            PUSH ESI
004329BB  |.  57            PUSH EDI
004329BC  |.  8965 E8       MOV DWORD PTR SS:[EBP-18],ESP
004329BF  |.  FF15 4CD14400 CALL DWORD PTR DS:[<&KERNEL32.GetVersion>;  KERNEL32.GetVersion
.....................................................................

命令行下断点 BP OpenMutexA,F9运行。

中断

77E6D78C >  55              PUSH EBP
77E6D78D    8BEC            MOV EBP,ESP
77E6D78F    51              PUSH ECX
77E6D790    51              PUSH ECX
77E6D791    837D 10 00      CMP DWORD PTR SS:[EBP+10],0
77E6D795    56              PUSH ESI
77E6D796    0F84 F0B30200   JE KERNEL32.77E98B8C
.....................................................................

堆栈内容

0012F59C   004145F1  /CALL 到 OpenMutexA 来自 NOTEPAD.004145EB
0012F5A0   001F0001  |Access = 1F0001
0012F5A4   00000000  |Inheritable = FALSE
0012F5A8   0012FBDC  \MutexName = "614:A2AA26D13"  //注意MutexName 这个地址 每个机器不同,以看到的为主。

找一块程序领空空地址,写入一些欺骗Arm的代码。

Ctrl+G 401000

00401000    0000            ADD BYTE PTR DS:[EAX],AL  //都是空地址。
00401002    0000            ADD BYTE PTR DS:[EAX],AL
00401004    0000            ADD BYTE PTR DS:[EAX],AL
00401006    0000            ADD BYTE PTR DS:[EAX],AL
00401008    0000            ADD BYTE PTR DS:[EAX],AL
0040100A    0000            ADD BYTE PTR DS:[EAX],AL
0040100C    0000            ADD BYTE PTR DS:[EAX],AL
0040100E    0000            ADD BYTE PTR DS:[EAX],AL
00401010    0000            ADD BYTE PTR DS:[EAX],AL
00401012    0000            ADD BYTE PTR DS:[EAX],AL

OD直接双击修改,填入以下代码。

00401000    60              PUSHAD
00401001    9C              PUSHFD
00401002    68 DCFB1200     PUSH 12FBDC        //以上面堆栈中地址为准。
00401007    33C0            XOR EAX,EAX
00401009    50              PUSH EAX
0040100A    50              PUSH EAX
0040100B    E8 687BA677     CALL KERNEL32.CreateMutexA
00401010    9D              POPFD
00401011    61              POPAD
00401012  - E9 75C7A677     JMP KERNEL32.OpenMutexA
............................................................

将当前的 Eip 77E6D78C 切换到 401000 来。

点右键 选在此处新建 Eip ,看到Eip 变为 401000

F9运行。

中断

77E6D78C >  55              PUSH EBP     //双击它或F2清除断点。
77E6D78D    8BEC            MOV EBP,ESP
77E6D78F    51              PUSH ECX
77E6D790    51              PUSH ECX
77E6D791    837D 10 00      CMP DWORD PTR SS:[EBP+10],0
77E6D795    56              PUSH ESI
77E6D796    0F84 F0B30200   JE KERNEL32.77E98B8C
77E6D79C    64:A1 18000000  MOV EAX,DWORD PTR FS:[18]
77E6D7A2    FF75 10         PUSH DWORD PTR SS:[EBP+10]
77E6D7A5    8DB0 F80B0000   LEA ESI,DWORD PTR DS:[EAX+BF8]
77E6D7AB    8D45 F8         LEA EAX,DWORD PTR SS:[EBP-8]
77E6D7AE    50              PUSH EAX
77E6D7AF    FF15 8010E677   CALL DWORD PTR DS:[<&NTDLL.RtlInitAnsiSt>; ntdll.RtlInitAnsiString
............................................................

Ctrl+G 401000

00401000    60              PUSHAD
00401001    9C              PUSHFD
00401002    68 DCFB1200     PUSH 12FBDC                              ; ASCII "614:A2AA26D13"
00401007    33C0            XOR EAX,EAX
00401009    50              PUSH EAX
0040100A    50              PUSH EAX
0040100B    E8 687BA677     CALL KERNEL32.CreateMutexA
00401010    9D              POPFD
00401011    61              POPAD
00401012  - E9 75C7A677     JMP KERNEL32.OpenMutexA

选定上面的红色代码,右键撤销选择,看到全部还原为

00401000    0000            ADD BYTE PTR DS:[EAX],AL  //都是空地址。
00401002    0000            ADD BYTE PTR DS:[EAX],AL
00401004    0000            ADD BYTE PTR DS:[EAX],AL
00401006    0000            ADD BYTE PTR DS:[EAX],AL
00401008    0000            ADD BYTE PTR DS:[EAX],AL
0040100A    0000            ADD BYTE PTR DS:[EAX],AL
0040100C    0000            ADD BYTE PTR DS:[EAX],AL
0040100E    0000            ADD BYTE PTR DS:[EAX],AL
00401010    0000            ADD BYTE PTR DS:[EAX],AL
00401012    0000            ADD BYTE PTR DS:[EAX],AL
.....................................................................

1 2 下一页

 
相关文章
一日一文章
 
一日一软件
一日一动画