QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3505|回复: 0
打印 上一主题 下一主题

菜鸟手动脱壳全过程,超详细~~~

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-20 14:44 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 ; D+ H% \4 j5 A; t* N2 K【使用工具】 Ollydbg,Loadpe,Imprec1.6F

' C1 R+ l2 c) S9 d

【脱壳平台】 Win2K

) @ i- |. `& m' z5 o5 A

软件名称】 按键精灵3 V3.11

d$ Y; \' F, d5 m

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

6 H' N7 E- O: l. J K

【保护方式】 Armadillo CopyMem-ll +Debug-Blocker

4 m w& w- M6 I4 J

【脱壳人】飞舞的T恤 + `' F g' \$ s+ k) V--------------------------------------------------------------------------------

. c* U# K2 u3 g1 h" \" p

【脱壳内容】

1 T3 R& o1 v, J+ N N1 [

小弟第一次手动脱壳就碰上了Armadillo CopyMem-ll +Debug-Blocker难缠的东东,所以整理了一下两个星期来脱Armadillo CopyMem-ll +Debug-Blocker的全过程,希望能给第一次脱Armadillo CopyMem-ll +Debug-Blocker新手们一点帮助,始大家少走点弯路(我的弯路走了不少)。

- s5 r$ k! r- A1 F% i

小弟第一次脱壳,本来想从简单的壳开始学习的,可像什么upx、aspack等壳都有工具脱,弄的一点兴趣都没有了(本来脱壳就是想在朋友面前炫一下,有工具脱的壳当然没有挑战性了)。这时忽然发现N久(多久记不到了,反正刚出我就下了,一直没用)前放在咱电脑里的按键精灵3 v3.11,哈哈,小样就从你入手当我脱壳的入门学习吧。

6 V6 A7 b" u v4 U. X( I

用PEiD.exe一看是Armadillo的壳,运行程序发现进程里有两个按键精灵3.exe,哈哈Armadillo 双进程标准壳。在这之前我先看了weiyi75、fly、csjwaman等大大们的双进程标准壳的脱文。最过选择了照着weiyi75大大的脱文《爱的中体验之Armadillo3.x双进程之Mr.Captor》按步就搬的开脱了。主要是weiyi75[Dfcg]的脱文里的脱法简单易学,对我这个新手来说比较直观简便。

% I9 ?) V0 p5 ]

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

# t1 l5 J$ r a5 v [

00485000 按> $Content$nbsp; 60 pushad //外壳入口7 w( O& q6 e5 P 00485001 . E8 00000000 call 按键精灵.00485006' m! N9 M3 D! w( s! k1 o; b1 e: J' M 00485006 $Content$nbsp; 5D pop ebp % _" ?$ [$ ^9 w8 A3 e5 a3 W00485007 . 50 push eax 8 k9 Y' K8 o! Q! \00485008 . 51 push ecx 7 C1 H3 x8 N, }5 e- g* b00485009 . EB 0F jmp short 按键精灵.0048501A 3 R( _) A; t. e% {: ]- z.....................................................................

! F; o6 {. O6 F! d

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

) H8 C8 @8 @ q

中断

5 R8 H! u3 ]( J% }& D+ w; @

77E6C503 K> 55 push ebp) k7 P' D$ {! n) d ~+ F7 o 77E6C504 8BEC mov ebp,esp 3 J" Y- }7 T. L1 B9 y1 l/ B, ?77E6C506 51 push ecx2 b) O7 w7 s8 F" s% Z6 X7 I. F 77E6C507 51 push ecx + G7 F. W2 A |# I: y77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 _- z; |. w f* [77E6C50C 56 push esi. O. }( j1 t9 r+ K! W5 K& k 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D! d" q+ Z% w4 [7 b! L+ n .....................................................................

/ {: K' Z- |. m E7 B- }/ ~$ r8 W- Z' y

堆栈内容

% X9 @7 s H& E) c# N: N- M

0012F574 0045C5F1 /CALL 到 OpenMutexA4 ?- t1 N5 m8 w2 ^( X 0012F578 001F0001 |Access = 1F0001' j; y ]; ~/ r$ y; |; u u 0012F57C 00000000 |Inheritable = FALSE( O8 q9 ? {0 e9 a. t! V 0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

6 }( G a/ I) z. {3 k! _- z! w$ e

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

( |3 ~$ c! e+ p5 G

Ctrl+G 401000

& ?4 M" Y) q1 T; P2 S

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。2 M& o3 @ R2 r1 J 00401002 0000 ADD BYTE PTR DS:[EAX],AL1 ^. l s3 p' S! I 00401004 0000 ADD BYTE PTR DS:[EAX],AL, b% \, z' P( W4 i- O 00401006 0000 ADD BYTE PTR DS:[EAX],AL w$ Q! n& M e) {, r4 ?/ j0 F) L) q1 s00401008 0000 ADD BYTE PTR DS:[EAX],AL; s- u; k, E3 t! [5 Y% p 0040100A 0000 ADD BYTE PTR DS:[EAX],AL9 O/ P4 g" A8 A, k: E1 i' g 0040100C 0000 ADD BYTE PTR DS:[EAX],AL$ ^; P0 ]( V' I2 T( b% X# _$ n 0040100E 0000 ADD BYTE PTR DS:[EAX],AL

) L" x% n i; L" @

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

: Y! P7 \) D! ?+ V: t

00401000 60 pushad6 @, T6 q2 A' z+ o; @9 X; ^. ` 00401001 9C pushfd + ]3 Z* U# i+ P0 E, v00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140") F0 D8 m: g. u3 Q4 A: ` 00401007 33C0 xor eax,eax ; i; E- H: U5 {+ s* \# u00401009 50 push eax `3 u% ?6 ?1 s/ A; P0040100A 50 push eax' p" Y9 ?4 A8 r1 Y6 n* z 0040100B E8 6D97A677 call KERNEL32.CreateMutexA+ c: L' N4 f6 P; h, t$ w 00401010 9D popfd0 C, o+ s0 d; i' u 00401011 61 popad ' t0 l" k8 v' `9 j00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA % o a7 |3 k4 c9 C' c0 Z- `............................................................

3 F1 }! M5 Y7 s

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

" w1 n% ~; G- {, p( c

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

/ j$ l# _. N+ }

F9运行。

) T; A* _" v4 t7 x1 \6 Y

中断

, ], C2 \1 j6 w$ p6 w

77E6C503 K> 55 push ebp //双击它或F2清除断点。 ) n' d8 N' V9 n7 J77E6C504 8BEC mov ebp,esp ( `- m" F1 s5 e7 y+ c77E6C506 51 push ecx : u) ]/ |. D: j8 n: A3 Q77E6C507 51 push ecx% n9 r) W2 Q J 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 1 a/ a& ~6 \) L+ F. A77E6C50C 56 push esi * d5 R: a7 X# I7 I8 o77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D# q4 P: ~6 B* f, L4 W1 d ............................................................

. r* y: e& Y) U9 Z2 L" @

找 magic jmp 命令行下断点,bp GetModuleHandleA

+ H- {( y# Y% ]$ K% o; @

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。 " b. E) q+ j5 o! A77E63DFD 8BEC mov ebp,esp3 Y. R1 K# ?% {/ x+ ?3 [" h/ ^* x! U 77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0; r5 ]/ D( ]4 ^ 77E63E03 74 18 je short KERNEL32.77E63E1D) F& H- @, M0 V5 ?/ f2 v; W 77E63E05 FF75 08 push dword ptr ss:[ebp+8]. _. t# U+ g& }5 R5 H 77E63E08 E8 87FFFFFF call KERNEL32.77E63D94 5 V4 g$ }# R. d( C1 d. G77E63E0D 85C0 test eax,eax 9 Q `* H; b' H% c" J. l77E63E0F 74 08 je short KERNEL32.77E63E19( L% k# n g5 u$ e! R 77E63E11 FF70 04 push dword ptr ds:[eax+4] & @7 Q3 {6 |8 B77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW # b- ]% {6 u( C, H77E63E19 5D pop ebp4 X+ k8 ^7 ^5 C5 \- j% [ 77E63E1A C2 0400 retn 4 - x! S6 u! @ d4 [9 S, @9 L4 c: |........................................................................

9 j! w3 [) a/ R0 C7 w

F9运行,多次硬件中断,注意堆栈值。

4 M$ u1 v @( U

7次F9提示一个非法指令错误,Shift+F9忽略。 0 i/ E( e7 E+ J1 \0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801& ^6 v! I" I* ? @4 X s 0012BEFC 00B2D6C8 \pModule = "kernel32.dll" - ]7 c- x0 \/ y, X; H0012BF00 00B2E67C ASCII "VirtualAlloc"

3 }* d: {3 M( m

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E . \4 q/ D0 Q; H2 L5 U( }/ [0012BEFC 00B2D6C8 \pModule = "kernel32.dll" 3 Z$ N, ^1 A2 ^0012BF00 00B2E670 ASCII "VirtualFree"

[# f6 Z4 o: P7 L% X: c) P

9次F9提示一个非法指令错误,Shift+F9忽略。

$ C+ i) _% t( |0 j

堆栈内容

3 y- |0 P% r' ~7 m8 _4 N% x0 p7 g6 q

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995 9 C5 R0 l; X( P) Y$ N0012BC74 0012BDAC \pModule = "kernel32.dll"

, s K) I4 k% d' q& m

点调试菜单,里面清除硬件断点。

; [% o q2 r2 Y3 E8 O2 Z. c: B

Ctrl+F9 返回。

( l( _- k4 \, Y9 y

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA / n1 f7 `6 R/ e: T9 P# X00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] {& U( B% N/ _: X$ H. x+ w$ I 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax; R! m' J& D/ ^# p 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]/ i" a; E9 N9 B3 ^5 C- A 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi6 o9 y S. x) x, [% E$ H* C0 B2 @4 { 00B079AC 75 16 jnz short 00B079C4 2 v5 F V! h) A00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] & p' R7 |; r/ s- G' t8 i00B079B4 50 push eax * L! r) x; ?0 ~$ ]/ {( n" f00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA' \7 D, w; r6 k% i2 Q% } 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]2 ~/ U5 ]3 |6 j* E 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax . u. M# v* L; u6 Y00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] 9 [; o. N U# R$ f1 k H00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi$ W7 c! m* O9 b7 X5 Y 00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

! _' G9 C( ?7 u

改为

9 [/ t5 r9 c0 p: u9 C; z# [

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA 3 a; ^0 z$ g {9 w2 e+ V00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]( O# m/ _; d: Y# ` V8 J 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax y- R2 \7 f5 s4 X* y, X 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]$ ^# T F1 g+ H2 H( e; Y- F 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi6 H" P1 j' H9 q) Y 00B079AC 75 16 jnz short 00B079C4 " X5 c4 V' n" T! j: Y+ V3 i00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] 7 Z- b. o$ G% P! t2 M! c4 }00B079B4 50 push eax n9 F) u+ P8 x7 Q! K, Q 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA 1 ?- w- A W; l4 ~00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 0 [; z' O/ u) J00B079C1 89040E mov dword ptr ds:[esi+ecx],eax 6 l% j3 B0 g" I+ i0 j; @: N00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]7 X# S3 X9 m5 t3 E$ W( V9 \* t 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi ' o# |. _& ]* Z/ p00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

( N1 W: ^2 W9 [ b7 x

.........................................................

! J O0 }( H9 {0 e" E

清除所有断点。在401000段下内存断点,按F9

. b, _7 M8 H$ _" R3 \% v

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里 0 S" W6 ]; Y! E; U' M00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54] 6 w% M8 l. K. \# u: I00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952605 e u% b! H( { 00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4]& N1 W6 F, @ X/ Y. | 00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260% ~6 b! R1 V; T* ?" L. H 00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74]1 B& K n' Y- Z 00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 0 a$ M! ?5 D) B) e% z00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30] 4 P: x( E% p1 _00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952601 U* i8 ^. ~2 H4 _" l 00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

. i* a0 P7 Y: p

提示被调试程序无法处理异常,Shift+F9忽略,game over程序退出。

- k1 {1 |# m/ |' i$ U/ ^

天哪,我错在那里啦!我怎么就到不了“push ebp //到达地球人都知道的位置”

' w# Y8 ]$ u( `: E# B( J

想想第一次脱壳,没这么顺利也是正常的,那么我们在试试其他大大的方法,在后来三、四天里偶用了能找到的脱标准壳的方法来脱它,TMD没一个成功的,这期间每天晚上19点到1点,我都在学习研究各各armadillo标准壳的脱法,搞的每天上班没精神。还是没有一点收获,总不能半途而废吧?去论谈上问问各位大虾吧。。。

1 P* S5 N8 F4 Y7 L

期间loveboom大大成给于提示说“可能不是标准双进程壳或是高版本的,所以你按双进程的来脱是不行的”可对于新手的我来说,说了等于白说,希望下次小弟提问时,各们大大能提供详细一点的资料。。。^_^

6 }) I8 t; {) Y9 }8 J, f: v' I

后来还多亏wangli_com大大的指点。。。

4 E; G5 ]% L, Z$ a

先找oep,在OD中重开程序,下bp WaitForDebugEvent,F9运行

, X/ x6 i5 I4 o# G

77E7A6CF K> 55 push ebp //来到这里,F2清除断点5 L! C7 K+ ], t$ s! c* U6 @ 77E7A6D0 8BEC mov ebp,esp$ N: X- a- D; r0 X/ W( b# { 77E7A6D2 81EC 9C000000 sub esp,9C % E0 S5 h+ C* P1 ~77E7A6D8 53 push ebx 3 M) \/ ~: D b! w- |" m) T7 G2 a4 c77E7A6D9 56 push esi0 i8 s9 I8 G/ W9 h7 P4 z 77E7A6DA 57 push edi

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-8-14 21:41 , Processed in 0.412241 second(s), 52 queries .

回顶部