QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 2 N. Q6 j( u& N `. h 【使用工具】 Ollydbg,Loadpe,Imprec1.6F

+ p" n f a2 |/ m! [0 h3 }

【脱壳平台】 Win2K

+ e; S# f4 a7 P8 ?# L

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

; O& P+ Z5 E4 f" z0 S+ P

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

. s& R. j: X/ D

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

( B3 L' w. Q( I1 M

【脱壳人】飞舞的T恤 5 p1 c7 L n( v4 m0 c* Q6 m) I--------------------------------------------------------------------------------

$ }" F0 y0 b0 ?$ S% j

【脱壳内容】

" l4 T+ B4 H, G: I8 ?1 l

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

8 }/ f" ?) x4 I# z" T

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

' I# R* a6 t/ x, [

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

& d) G" u( K6 g$ s8 w' ?

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

' @3 E( O- S$ F: M1 Y" x( j

00485000 按> $Content$nbsp; 60 pushad //外壳入口 ; F: K* V/ ]3 g6 U& i8 ?: y00485001 . E8 00000000 call 按键精灵.00485006 . ~1 [% o" c0 ]00485006 $Content$nbsp; 5D pop ebp 6 L' t, I( T4 k3 c S Q00485007 . 50 push eax . U5 |) r7 }% A/ U00485008 . 51 push ecx 0 a4 u+ b8 K0 @7 u7 @9 l4 @00485009 . EB 0F jmp short 按键精灵.0048501A& r+ @" X+ q; e; N$ D3 }: w/ i .....................................................................

3 p: B1 D7 l2 w, B. r+ W

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

7 L J7 J p6 t- c9 b

中断

- A9 E& F& i' U1 h

77E6C503 K> 55 push ebp- S. J* u" [% `+ q- j$ F. B 77E6C504 8BEC mov ebp,esp6 b5 q8 X, _' k 77E6C506 51 push ecx 6 i/ r: c0 z6 M% T3 c77E6C507 51 push ecx " ~9 _; p a" L9 K77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0. C6 n4 J, j w) J: D: @ 77E6C50C 56 push esi5 h2 K& U) i4 ^& H2 j, U" [ 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D+ |1 i- F/ X+ t9 N. f .....................................................................

7 G4 V2 }% C3 u/ D0 J. N1 H5 w$ j

堆栈内容

3 ]# D$ T* F* n \

0012F574 0045C5F1 /CALL 到 OpenMutexA4 d6 [/ |, C) x' s 0012F578 001F0001 |Access = 1F0001+ F( L0 q% m7 d- h4 D 0012F57C 00000000 |Inheritable = FALSE6 `, |1 E) j3 B4 L) S; `% z 0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

# @. w/ |3 Y4 l/ y5 m4 g- W9 L

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

# I- Q* n( d4 {

Ctrl+G 401000

( H' E6 b2 q0 L, m. b

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。 # E$ _# X3 k! K, _; |00401002 0000 ADD BYTE PTR DS:[EAX],AL & y' p7 o- Q7 f00401004 0000 ADD BYTE PTR DS:[EAX],AL / ]' Y" @0 C7 n# |& Z+ _00401006 0000 ADD BYTE PTR DS:[EAX],AL' n2 [" k1 D. [! W# n 00401008 0000 ADD BYTE PTR DS:[EAX],AL' M6 F3 B8 W' J" |. x 0040100A 0000 ADD BYTE PTR DS:[EAX],AL 8 n9 R" f: J5 ]6 ?7 c( w7 \0 Z: q0040100C 0000 ADD BYTE PTR DS:[EAX],AL 6 I" Y# V$ W5 [1 R( _$ F; o0040100E 0000 ADD BYTE PTR DS:[EAX],AL

, Q/ |% G& m3 e0 l/ I3 p; U3 P K9 \, E

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

9 C( p8 g) }% c( O3 Z/ @% ^( f% F

00401000 60 pushad% e+ ?0 O3 H% F 00401001 9C pushfd0 C" g8 ]. _8 |0 L( z 00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140"8 M* x! f2 ^8 C& x- F* t9 q. f 00401007 33C0 xor eax,eax * d9 r1 `# V+ r4 V8 G00401009 50 push eax+ J& \" R( P! F9 k, X 0040100A 50 push eax1 y% Z5 x; y0 ]8 X 0040100B E8 6D97A677 call KERNEL32.CreateMutexA/ ]8 w) F' Q0 R+ W: q" K 00401010 9D popfd + |4 R! F( A' G: I9 X3 n9 n+ c00401011 61 popad 0 m* M' V9 _0 ?7 g6 J5 F& o, B00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA4 b! k# R# |3 q ............................................................

$ V& ^% `8 L/ w4 ^$ P

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

q2 G4 a9 h+ i- h% m: B& y

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

! R2 Y U* m @

F9运行。

" [) n2 W" K) |, Y- t

中断

6 Q& O% G2 ]+ Y! i' U* o

77E6C503 K> 55 push ebp //双击它或F2清除断点。 4 _: j p8 v+ V+ z# w: K+ Z }4 j77E6C504 8BEC mov ebp,esp9 J& I2 N5 ?- j) w) n/ n% U7 G 77E6C506 51 push ecx $ A9 e# r' T {9 x/ n77E6C507 51 push ecx# v6 H# [, X0 G( |2 i1 R0 h 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 + h; ^# ]. S% G: L2 b+ E77E6C50C 56 push esi 2 p0 }2 {: V" f0 b! U; R77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D0 \" ^. x% ?2 I$ d$ N& `2 `4 w ............................................................

$ K" ~- @( p6 u& A" m( f& S: U

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

6 }2 R K. U- |& i) J5 C7 L

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。3 A6 R% _. L' y* m( k 77E63DFD 8BEC mov ebp,esp 7 H7 [7 w7 L" S# Z& d( C+ w' M77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0 7 L" e8 l# Z0 V0 a' O! h; U# P77E63E03 74 18 je short KERNEL32.77E63E1D+ I) n6 I% _) V, C. R. p+ A 77E63E05 FF75 08 push dword ptr ss:[ebp+8] $ D4 U' \4 _ B. J+ g77E63E08 E8 87FFFFFF call KERNEL32.77E63D94" w2 L5 U3 D/ L( x* l$ C0 ] 77E63E0D 85C0 test eax,eax' O4 l8 [! r: {. P* z 77E63E0F 74 08 je short KERNEL32.77E63E19 # F0 i2 w |; D; a77E63E11 FF70 04 push dword ptr ds:[eax+4]# }% q; d n: W/ N/ I- | 77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW 0 l$ X$ y) ]# {# r# Z77E63E19 5D pop ebp E$ |' z' g* Z1 S' l( k77E63E1A C2 0400 retn 4& x8 m- B) t! B# I% P! f" Y P- x ........................................................................

8 p: G4 a+ C3 e6 q" H! y" U& c

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

0 |1 `9 N; Q+ H

7次F9提示一个非法指令错误,Shift+F9忽略。: F' ?: O. X+ M; @ 0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801) o# w' O0 O0 o6 P0 F 0012BEFC 00B2D6C8 \pModule = "kernel32.dll" 8 Q: B% a" J2 |% \8 D' I0012BF00 00B2E67C ASCII "VirtualAlloc"

! z1 P6 @5 }! o) Q8 \9 G

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E . [& g$ z* V* a- d0012BEFC 00B2D6C8 \pModule = "kernel32.dll" " @6 O& f9 R" X( _0 S, w0012BF00 00B2E670 ASCII "VirtualFree"

; p0 ~; e0 R1 Y8 }& s8 l

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

: q6 l; ?. k9 {6 u/ B! k! z+ U

堆栈内容

2 D0 C8 }; ]. ^4 A& E# w$ x

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995. a$ ~! s) t* `' a 0012BC74 0012BDAC \pModule = "kernel32.dll"

: d* c1 i8 N, b* g4 _

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

u* D: d0 `7 V p0 N( N: }8 [

Ctrl+F9 返回。

: ] X: U4 {) Z3 V1 {

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA 8 \9 v3 ]( m. G# T) A00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 2 k9 E U' R9 C& k- q00B079A1 89040E mov dword ptr ds:[esi+ecx],eax : _1 _( u' A' [1 P* M% Y00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0] + s4 v" e' d( r/ _00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi z* }0 ]/ m* m0 P. Q00B079AC 75 16 jnz short 00B079C4 , u3 @# f# c1 M3 t* b00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]' y8 K1 H- I" K' E1 [" r5 o 00B079B4 50 push eax; \6 M$ W7 x' v/ \ 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA4 f* t4 p) I1 S, u 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] + n; @: ]- k! u& b/ e2 o00B079C1 89040E mov dword ptr ds:[esi+ecx],eax 8 A, q+ V1 e- H$ J0 E' J) |" _00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] 8 T: Y: r8 a7 I0 o$ [00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi ! W; F' S' r& j' @, K' D9 [- L00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

$ F1 E Y# g! [6 [6 D

改为

' V6 u r H7 \, h) I

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA5 K+ |3 t; }; h! M; m p 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]+ @" o) W% u8 p: `! P6 \# V 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax , b3 Y; ?( X6 ^ |; [3 B$ R00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]$ ~: _1 v3 U6 u; _7 N$ w1 O 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi $ G* h1 s. C x7 R00B079AC 75 16 jnz short 00B079C4 % R6 E6 H v7 O4 j9 d7 \$ ^00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]7 l7 }) f1 F/ n( W/ [ 00B079B4 50 push eax. ~2 V& m0 f2 l( [ 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA5 s$ ` V2 f( }! D/ \ 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]* E8 l: ]0 S4 p3 I8 E 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax& }& |5 M0 s. C& N 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] " L' d& s, ?) N1 B: t! n00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi# f8 z1 C7 E4 X) U 00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

6 x$ k0 I5 p" P5 `' b

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

5 }$ _ K: f5 C4 [. a5 }

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

. t: u& ^) o3 C% m$ K- E; d& x

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里# y( I* C. g4 v& w: i 00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54]$ H# m. Y3 R) @$ I2 Q4 q# P Q 00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260. I6 I7 w0 `& M2 C1 f { 00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4] + A$ e2 Q3 s* G$ u/ w00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260; \) w$ g( |5 @# g o 00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74]2 }: _+ S# K& \# X) O# t' r! D6 s 00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260! B/ l9 I% a& e 00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30]7 e7 S+ f, A2 T! |- R9 o+ x; G6 f) l 00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260# ?+ b" a/ o# O* ~9 p H 00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

' z2 M6 c7 g# v- E6 X) w

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

- l5 @. F7 i8 j* f; ~9 N# q

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

2 ^, y/ M0 c; Q% d

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

3 S1 h% `; |5 `8 C

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

0 W# K6 f" y1 @

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

, ~6 I$ q; g% E2 L9 \$ t! y" l) e# {

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

4 D2 d; H+ S9 G! j. r3 V! }9 ~' H& ]

77E7A6CF K> 55 push ebp //来到这里,F2清除断点" @6 [9 H6 D+ O1 _" ^7 f 77E7A6D0 8BEC mov ebp,esp + z2 Y% D; c+ J1 ^$ g. @" e I77E7A6D2 81EC 9C000000 sub esp,9C # {( @9 \3 t8 k" ^77E7A6D8 53 push ebx0 V2 G, d" n3 d$ C5 x& s5 q1 g2 ] 77E7A6D9 56 push esi 6 s+ f2 o8 A( e& t0 X77E7A6DA 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 19:29 , Processed in 0.470593 second(s), 52 queries .

回顶部