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

爱的中体验之Armadillo3.x仿Fly大侠的壹次脱壳法之Mr.Captor(图)

更新时间:2008-5-11 0:06:34
责任编辑:流火
热 点:
【脱文标题】 爱的中体验之Armadillo3.x仿Fly大侠的壹次脱壳法之Mr.Captor

【脱文作者】 weiyi75[Dfcg]

【作者邮箱】 weiyi75@sohu.com

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

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

【脱壳平台】 Win2K

【软件名称】 Mr.Captor

【软件简介】 Mr.Captor 是一个非常好用的屏幕截图程序!他可以帮助你把看到的任何图片忠实的保留下来!并可以保存为BMP, PCX, GIF, JPEG, PNG, TIFF, TGA, CUR, ICO, AVI等格式!支持自定义热键!非常容易使用呀!

【软件大小】 1686 KB

【下载页面   http://www.skycn.com/soft/11437.html

【加壳方式】 Armadillo 3.00a - 3.61 -> Silicon Realms Toolworks

【保护方式】 标准方式加壳

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

前言,在看雪论坛看了Fly大侠写的脱文,就这篇看懂了,为了使大家学习Fly大侠的技术,我仿真了这篇脱文。可能因为Mr.Captor V2.7 版被Fly脱壳加破解,作者一怒之下没有加Arm双进程了,有点可惜啊。

MrCaptor.exe用PEiD查壳  Armadillo 3.00a-3.61,运行看是单进程的标准壳。

以前脱Armadillo标准壳一般有两种流程的操作方法:

1、先走到OEP,脱壳。第2次调试,找到并直接修改Magic Jump处为JMP,得到输入表,这时程序无法运行,但IAT可以修复。

2、在Magic Jump 处下硬件断点,每次改变标志位使其跳转,继续内存断点到达OEP,这样也是一次就脱壳、修复输入表,但是很慢。

这个程序判断软件过期代码在壳里面,脱壳后日期限制也不存在,过分依耐壳也是共享软件被破解的原因。

现在科技这么发达,下载一个自动隐藏OD插件,我已经在论坛里给出下载地址,以后根本无需隐藏OD调试,用抗AntiDbg 的OD--Ukillod 调试猛壳也很省心,和原版Od无任何区别,只是增加了反Anti功能。OD载入程序,忽略所有异常。

脱Arm标准壳一般分两个步骤。

1.找magic jmp  调试过几个arm壳发现,magic jmp 位置和GetModuleHandleA 非常近。

2.找oep,在入口脱壳程序。注意Arm修改了Pe头,让OD插件无法脱壳,但对Loadpe一点效果都没有。

我用Fly大侠的 BP GetModuleHandleA+5  软硬断点都无法断下来,可能我运气不好,于是用GetModuleHandleA
硬断点,注意Arm壳严格校验普通断点,至少我机器上面是这样的,普通断点经常导致各种异常导致程序直接退出。

因为这个程序没有Nag提示,所以命令行直接下断点

BP GetModuleHandleA

修改普通断点为硬件断点,取消普通断点

004BD000 >  60              PUSHAD  //外壳入口代码
004BD001    E8 00000000     CALL MrCaptor.004BD006
004BD006    5D              POP EBP
004BD007    50              PUSH EAX
004BD008    51              PUSH ECX
004BD009    EB 0F           JMP SHORT MrCaptor.004BD01A
004BD00B    B9 EB0FB8EB     MOV ECX,EBB80FEB
004BD010    07              POP ES                                   ; 修正的段位寄存器
004BD011    B9 EB0F90EB     MOV ECX,EB900FEB
004BD016    08FD            OR CH,BH
004BD018    EB 0B           JMP SHORT MrCaptor.004BD025
....................................................

F9运行Arm典型的两个异常,Shift+F9 忽略。

异常1

004BF4A3    F0:             PREFIX LOCK:                             ; 多余的前缀
004BF4A4    F0:C7           ???                                      ; 未知命令
004BF4A6    C8 6033C9       ENTER 3360,0C9
004BF4AA    75 02           JNZ SHORT MrCaptor.004BF4AE
004BF4AC    EB 15           JMP SHORT MrCaptor.004BF4C3
004BF4AE    EB 33           JMP SHORT MrCaptor.004BF4E3
004BF4B0    C9              LEAVE
004BF4B1    75 18           JNZ SHORT MrCaptor.004BF4CB
004BF4B3    7A 0C           JPE SHORT MrCaptor.004BF4C1
004BF4B5    70 0E           JO SHORT MrCaptor.004BF4C5
004BF4B7    EB 0D           JMP SHORT MrCaptor.004BF4C6
004BF4B9    E8 720E79F1     CALL F1C50330
004BF4BE    FF15 00790974   CALL DWORD PTR DS:[74097900]
004BF4C4    F0:EB 87        LOCK JMP SHORT MrCaptor.004BF44E         ; 锁定前缀是不允许的
..........................................................

异常2

004BF5BC    F0:             PREFIX LOCK:                             ; 多余的前缀
004BF5BD    F0:C7           ???                                      ; 未知命令
004BF5BF    C8 64678F       ENTER 6764,8F
004BF5C3    06              PUSH ES
004BF5C4    0000            ADD BYTE PTR DS:[EAX],AL
004BF5C6    83C4 04         ADD ESP,4
004BF5C9    8B85 5E3E0000   MOV EAX,DWORD PTR SS:[EBP+3E5E]
004BF5CF    60              PUSHAD
004BF5D0    33C9            XOR ECX,ECX
004BF5D2    75 02           JNZ SHORT MrCaptor.004BF5D6
004BF5D4    EB 15           JMP SHORT MrCaptor.004BF5EB
004BF5D6    EB 33           JMP SHORT MrCaptor.004BF60B
004BF5D8    C9              LEAVE
..........................................................

GetModuleHandleA 硬件中断1

77E756DB >  55              PUSH EBP
77E756DC    8BEC            MOV EBP,ESP
77E756DE    837D 08 00      CMP DWORD PTR SS:[EBP+8],0
77E756E2    0F84 BC670000   JE KERNEL32.77E7BEA4
77E756E8    FF75 08         PUSH DWORD PTR SS:[EBP+8]
77E756EB    E8 B1F6FFFF     CALL KERNEL32.77E74DA1
77E756F0    85C0            TEST EAX,EAX
77E756F2    74 08           JE SHORT KERNEL32.77E756FC
77E756F4    FF70 04         PUSH DWORD PTR DS:[EAX+4]
77E756F7    E8 C384FFFF     CALL KERNEL32.GetModuleHandleW
77E756FC    5D              POP EBP
77E756FD    C2 0400         RETN 4

堆栈提示

0012D8F8   77CAADB7  /CALL 到 GetModuleHandleA 来自 77CAADB1
0012D8FC   77CAC4B0  \pModule = "KERNEL32.DLL"   //注意不断改变的参数。
0012D900   77D0FA08
0012D904   00000094
0012D908   00000005
0012D90C   00000000
..........................................................

继续F9八次直到

77E756DB >  55              PUSH EBP
77E756DC    8BEC            MOV EBP,ESP
77E756DE    837D 08 00      CMP DWORD PTR SS:[EBP+8],0
77E756E2    0F84 BC670000   JE KERNEL32.77E7BEA4
77E756E8    FF75 08         PUSH DWORD PTR SS:[EBP+8]
77E756EB    E8 B1F6FFFF     CALL KERNEL32.77E74DA1
77E756F0    85C0            TEST EAX,EAX
77E756F2    74 08           JE SHORT KERNEL32.77E756FC
77E756F4    FF70 04         PUSH DWORD PTR DS:[EAX+4]
77E756F7    E8 C384FFFF     CALL KERNEL32.GetModuleHandleW
77E756FC    5D              POP EBP
77E756FD    C2 0400         RETN 4

堆栈提示

0012BE5C   00C16A5C  /CALL 到 GetModuleHandleA 来自 00C16A56
0012BE60   0012BF98  \pModule = "advapi32.dll"  //看到这个动态库就要慢些了,有些软件在这里返回就可以到Magic jmp,有些软件在下一次中断返回,总之在附近。
0012BE64   0012EF60
0012BE68   01081BA0
0012BE6C   00000000
0012BE70   00000004
0012BE74   0000CC27
..........................................................

在F9一次。

堆栈提示

0012C0E8   00C2E9AC  /CALL 到 GetModuleHandleA 来自 00C2E9A6
0012C0EC   00000000  \pModule = NULL
0012C0F0   0012EF60
0012C0F4   01081BA0
0012C0F8   00000000
..........................................................

删除硬件断点,Ctrl+F9返回.

00C2E9A6    FF15 C4D0C300   CALL DWORD PTR DS:[C3D0C4]               ; KERNEL32.GetModuleHandleA
00C2E9AC    3985 B0E9FFFF   CMP DWORD PTR SS:[EBP-1650],EAX  //返回到这里。
00C2E9B2    75 0F           JNZ SHORT 00C2E9C3
00C2E9B4    C785 ACE9FFFF 4>MOV DWORD PTR SS:[EBP-1654],0C41240
00C2E9BE    E9 C4000000     JMP 00C2EA87
00C2E9C3    83A5 84E7FFFF 0>AND DWORD PTR SS:[EBP-187C],0
00C2E9CA    C785 80E7FFFF 3>MOV DWORD PTR SS:[EBP-1880],0C41838
00C2E9D4    EB 1C           JMP SHORT 00C2E9F2
00C2E9D6    8B85 80E7FFFF   MOV EAX,DWORD PTR SS:[EBP-1880]
00C2E9DC    83C0 0C         ADD EAX,0C
00C2E9DF    8985 80E7FFFF   MOV DWORD PTR SS:[EBP-1880],EAX
00C2E9E5    8B85 84E7FFFF   MOV EAX,DWORD PTR SS:[EBP-187C]
00C2E9EB    40              INC EAX
00C2E9EC    8985 84E7FFFF   MOV DWORD PTR SS:[EBP-187C],EAX
00C2E9F2    8B85 80E7FFFF   MOV EAX,DWORD PTR SS:[EBP-1880]
00C2E9F8    8338 00         CMP DWORD PTR DS:[EAX],0
00C2E9FB    0F84 86000000   JE 00C2EA87    //很大一个magic jmp 跳转,注意,修改它为jmp 00a3142a 程序将异常无法继续运行,但IAT已经没有加密了。这里用Fly的另类方法。

1 2 3 下一页

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