QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 % v, p' z% N, q6 D/ c0 Y8 v【使用工具】 Ollydbg,Loadpe,Imprec1.6F

9 f% n6 B* S" ^! {; s

【脱壳平台】 Win2K

4 P9 o6 v4 X: {: L }0 s

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

9 J1 C7 `& a! c; e F: d U6 K

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

& x, b( W5 e: s0 m; _8 ~

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

, T% L+ Y6 S0 i2 E8 K6 D P* F/ H* S

【脱壳人】飞舞的T恤3 k S, l; b5 u! X( B3 f --------------------------------------------------------------------------------

) n/ @. v; B' P) t) s$ G5 A

【脱壳内容】

2 i: z4 C7 f2 ~0 K4 s3 ~

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

2 U0 [7 t* c1 y9 _

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

) f2 E5 A" k, c% E6 C1 _

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

" q$ d2 B4 k: h8 c

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

; v: T( ~* J. q

00485000 按> $Content$nbsp; 60 pushad //外壳入口1 c+ G) R) P( ] 00485001 . E8 00000000 call 按键精灵.00485006 7 {. B& F" g: h00485006 $Content$nbsp; 5D pop ebp: W' S( l& U& X* d. i' [3 t. p6 X 00485007 . 50 push eax 9 H8 R' [5 A8 Q$ n6 K P00485008 . 51 push ecx / D& z$ X- D- x9 X: g$ g- j7 a: F9 Z00485009 . EB 0F jmp short 按键精灵.0048501A 4 v. D# c; c. [2 q" K" M, w.....................................................................

5 [8 J9 y. _0 }, N/ w5 F

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

- i8 v* d/ A! x: E" X

中断

$ C' I) _1 V/ A2 w4 a6 I$ u

77E6C503 K> 55 push ebp$ g; y3 G. U/ g' o 77E6C504 8BEC mov ebp,esp! c: z6 k+ s/ ~, e9 e1 G 77E6C506 51 push ecx$ {$ p) J( E) w3 A; }) n 77E6C507 51 push ecx # r( z3 y+ T" W$ L1 Z$ j: h' E0 Q77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 # k, s' q! I% l6 e* f77E6C50C 56 push esi % `. k( ~6 g6 B77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D / y* `# }8 |! X. @) l: h/ K9 ~* x" m.....................................................................

& b# o4 v+ t. d9 u

堆栈内容

3 [1 i1 F; X, O1 L( L/ s% e

0012F574 0045C5F1 /CALL 到 OpenMutexA ' \9 w/ p, y# l0012F578 001F0001 |Access = 1F0001: b1 n" A) T2 V2 z 0012F57C 00000000 |Inheritable = FALSE, y% C2 u: e7 t8 L 0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

: t( h3 L5 R! ~$ M3 @* [

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

" o0 }% |% G: u1 x: h h

Ctrl+G 401000

0 N3 Q+ l9 j( O! ?

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。) Q: r1 D7 ` F- r 00401002 0000 ADD BYTE PTR DS:[EAX],AL 8 @9 D1 w, K7 F4 a$ w0 z0 E00401004 0000 ADD BYTE PTR DS:[EAX],AL* G# p0 e3 r: E5 q$ k 00401006 0000 ADD BYTE PTR DS:[EAX],AL4 ~( `* i. p% P4 N0 I4 | 00401008 0000 ADD BYTE PTR DS:[EAX],AL, |- u1 \: W( ~# `' B4 H 0040100A 0000 ADD BYTE PTR DS:[EAX],AL. j: g* N4 C8 B1 _% N, ` 0040100C 0000 ADD BYTE PTR DS:[EAX],AL2 C2 N# ~- _& m( `+ |* m7 r, j- w 0040100E 0000 ADD BYTE PTR DS:[EAX],AL

$ ]0 z: L: m9 k" b) _0 K" C2 H8 _' P

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

/ g, w7 ^6 q6 N7 u

00401000 60 pushad6 n" Y; z' D; `% N 00401001 9C pushfd5 n9 p5 A) X ]' T 00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140" + f6 L x4 \4 _, L00401007 33C0 xor eax,eax' P2 ^8 g0 b$ c, w/ C 00401009 50 push eax5 g/ o- e8 U, C: b 0040100A 50 push eax # v. K" f5 l2 I0040100B E8 6D97A677 call KERNEL32.CreateMutexA5 e" [1 R+ t$ O& v, R$ _2 f% E+ u 00401010 9D popfd , r: G/ H0 u8 z) e00401011 61 popad& b( K4 X* `& B% G! Y1 M 00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA 4 B! l- E; _% j2 `1 ^4 t6 @............................................................

6 ~) y: X6 }8 r# q0 c

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

+ m0 L/ h! N% f, q- x

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

/ X- B8 l- Q7 t

F9运行。

' Q; B* m: Q- i2 F

中断

/ V; `. h9 Y5 f5 X8 A

77E6C503 K> 55 push ebp //双击它或F2清除断点。 # E6 d& ]2 P; _" [7 W- |77E6C504 8BEC mov ebp,esp' ^! i) V: P8 U8 W 77E6C506 51 push ecx8 X0 C# T% f3 V1 O 77E6C507 51 push ecx0 \& I4 u: Q/ N. n3 U 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0# `$ N5 y( j6 {( [ 77E6C50C 56 push esi ) N) d; [7 D/ b77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D) r$ ]" _+ d- J* t! {5 S. \( @ ............................................................

& u, n7 q2 M7 o# f) y5 d

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

1 Q3 o. b: Y' A

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。 9 y+ K' o, T( r8 G; X77E63DFD 8BEC mov ebp,esp $ e% R+ t. _& d" y77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0 ]9 m' c" {# @) `' }) W 77E63E03 74 18 je short KERNEL32.77E63E1D 0 C0 o' B" k; F0 e77E63E05 FF75 08 push dword ptr ss:[ebp+8]3 W) l C4 p$ K0 g4 ?0 t 77E63E08 E8 87FFFFFF call KERNEL32.77E63D94$ N5 f4 }% j k2 O5 E# q/ E5 } 77E63E0D 85C0 test eax,eax + a0 g0 h9 N( k. }1 V/ c77E63E0F 74 08 je short KERNEL32.77E63E19& ^$ V$ y4 f* U5 ~) a 77E63E11 FF70 04 push dword ptr ds:[eax+4]* Y7 h+ Z& X2 d) Y 77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW _; S, J( a4 C( ?77E63E19 5D pop ebp( a9 u$ Q' v5 S+ s2 ]3 | 77E63E1A C2 0400 retn 4 : S9 z3 u! e: x( d6 N5 A2 V" Y........................................................................

" w2 V. a% X" g

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

4 d; S7 Y3 J% m$ d4 F: {

7次F9提示一个非法指令错误,Shift+F9忽略。 * z+ I% w" \ Y1 p+ w; t0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801 4 ?3 l5 z) s3 @- F0012BEFC 00B2D6C8 \pModule = "kernel32.dll" 6 U9 s3 `6 f( H, R) l0012BF00 00B2E67C ASCII "VirtualAlloc"

# d+ d7 S9 d, d

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E0 }2 _( W% h6 U) W7 X, \1 T- u8 D 0012BEFC 00B2D6C8 \pModule = "kernel32.dll" * @3 p6 k' K+ k0012BF00 00B2E670 ASCII "VirtualFree"

4 k* v, q0 N8 U- i1 [

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

1 L& p q' y1 B/ c% u

堆栈内容

2 K; n1 P1 {0 P8 W: `: H

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995 r2 s2 `1 ?% i 0012BC74 0012BDAC \pModule = "kernel32.dll"

3 ~/ Z: @) E/ S4 m9 u% [, V! E! v

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

* x! E, S, n; _, x! T

Ctrl+F9 返回。

% p) E2 s- K0 Z

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA ) ?& G! H3 I& A00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] A$ X: s7 U/ J6 Y! L9 d 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax 8 K, F7 j. a) y/ Q; y00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0] 4 W2 M2 O( Q+ Z" M \) W) o00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi 8 V6 I9 ~, E, X/ r( T9 J00B079AC 75 16 jnz short 00B079C4; L; E8 Y; E" |: q3 K* w8 q 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]" z! u s! k a 00B079B4 50 push eax' n* O9 ?- |* r, r a: N 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA / ]) _. M0 B9 s4 r4 U3 M00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] ; S/ q- U, u$ Z. Q: y00B079C1 89040E mov dword ptr ds:[esi+ecx],eax 8 H* J/ ?: c" g8 P, o% ~! c% S# D00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]( _ R" y- e. f 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi , ? C q, p( R, u4 a% K: J4 f3 K00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

. u9 b: V3 |: Z& e0 a

改为

g6 a. f$ x/ c3 o& `

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA 7 r0 v6 x5 x' E4 M4 w00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] " ^; L1 \1 e- @; A4 ~3 Y00B079A1 89040E mov dword ptr ds:[esi+ecx],eax" X4 o6 S5 o* o7 k/ ~' u 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]: v( Z( d. p" b6 |# O 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi ! o( j% ]+ m: v1 C2 K# _, |5 g o00B079AC 75 16 jnz short 00B079C4 5 ?1 r Y9 o. F00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]3 k4 ]9 d6 r2 z) ` 00B079B4 50 push eax 2 |. W- s! b2 v8 l( f00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA % l. } s9 R; [' B2 n {7 |8 R0 R00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] , ~ o+ A0 v+ K( W' G: a9 R E00B079C1 89040E mov dword ptr ds:[esi+ecx],eax & I& v- U' }/ W% N$ A, f. H00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]( ^. ]: `/ b* {4 o6 I 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi1 Y: l. l! k0 ~; z 00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

: k) X S! y" X" e) i. o

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

) H7 e5 `$ m6 o: x" \

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

- ?! ^' X* I9 e5 l& d4 ^3 q

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里4 ]6 W: B4 S& J* i8 {3 \, b 00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54] ; A& s }. p' o( i) i00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260, v: p6 T8 s9 B$ g4 q2 i/ d 00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4] # @' u! M- [1 W1 K4 ]! \ V00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260/ t( U$ S% C9 v* c, o: X& ] 00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74] 9 [3 ?$ [- z3 T# K- M00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 + e! P; p2 m( ~00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30] + Y y2 c+ F3 h& k00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260& j+ b8 F! \! a- a& O& a% d) z: J 00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

, c" |* w+ E. K) e# S6 h

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

- ], I# a8 i% E! t/ B0 Z( s+ _

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

1 L: F( Y' e+ V# ]0 x& w

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

1 Q! ], X% N+ k

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

' o) t# g$ i2 }7 Z6 D

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

- M, M' B) G, U; ~

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

1 g& V8 R; p* n# y3 A) [

77E7A6CF K> 55 push ebp //来到这里,F2清除断点7 I7 i. s" @% R/ U0 \ 77E7A6D0 8BEC mov ebp,esp % y' ~8 C/ _9 r& r3 k77E7A6D2 81EC 9C000000 sub esp,9C , r+ }; f8 [& ] `4 n; M2 p77E7A6D8 53 push ebx. W7 j8 V3 n; [. p0 O3 t; | 77E7A6D9 56 push esi+ u+ N# @: A5 Q8 e1 q) F 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-6-11 07:05 , Processed in 0.355527 second(s), 52 queries .

回顶部