QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 1 }) @3 {2 ~, ~: r【使用工具】 Ollydbg,Loadpe,Imprec1.6F

2 S" S* f, j) z) t! `5 m

【脱壳平台】 Win2K

; b: v9 d% e4 G6 b" c" y5 i7 l2 Q. O

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

+ `$ ]/ Q/ ` _2 c3 w: O

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

6 d0 }& ?4 k9 N! ^+ Q, P

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

$ S7 \( [' Q: Y' z

【脱壳人】飞舞的T恤 9 T! F9 p% c9 ?% _& V--------------------------------------------------------------------------------

) d, E7 E2 Z! z& g8 C2 H& T2 ^8 y7 Z

【脱壳内容】

7 a- j0 |* q4 Y% x ^' [

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

, W5 ~8 M6 ?$ K" i; t( h

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

! R, K# o6 E0 i

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

3 J, v! H8 N- Y$ S0 k$ ~8 q

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

n, j3 h7 w9 t* k: h! V

00485000 按> $Content$nbsp; 60 pushad //外壳入口1 Z, q5 C6 F$ P7 Z+ s 00485001 . E8 00000000 call 按键精灵.00485006 0 ~5 b! {5 q, S" F( u00485006 $Content$nbsp; 5D pop ebp6 d/ _* [! |& u& z. {0 _ 00485007 . 50 push eax6 P" u( O2 |* X 00485008 . 51 push ecx3 [% x4 \5 q+ F# M2 T: E# s 00485009 . EB 0F jmp short 按键精灵.0048501A 9 W, d! ~; T- C9 k' D.....................................................................

% W+ j: j. @! J; y6 f6 @9 t

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

/ t3 ?/ f g, `. B* _

中断

* i( @: \) G* O8 Z7 y

77E6C503 K> 55 push ebp+ U1 y8 I, @0 w0 [ 77E6C504 8BEC mov ebp,esp 0 B! G2 A, n$ E" q O. f( g77E6C506 51 push ecx J6 { S4 _/ y# x% J! }" u 77E6C507 51 push ecx3 Z1 Q* q: g' M* j 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0/ x4 y1 O! R# {6 } 77E6C50C 56 push esi/ @! p. m4 I+ [, d6 | 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D7 i0 i% [- d5 c5 E m( G5 _ .....................................................................

: O J$ f$ a1 i& \( _: o

堆栈内容

1 x K& n4 X0 b I) d

0012F574 0045C5F1 /CALL 到 OpenMutexA 4 O, q9 Y5 i9 l6 Y) n4 v0012F578 001F0001 |Access = 1F0001; [ |3 c6 j: N7 e) T* M, d( j 0012F57C 00000000 |Inheritable = FALSE; ]7 ^% N3 ^+ H& |# a 0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

/ R# J' U; S$ [: H0 D/ q

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

. v$ x% t. b. ~: N

Ctrl+G 401000

: ^) v [9 ^& Q, J3 P7 k

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。 . l- a, ?3 u5 ]9 \' |00401002 0000 ADD BYTE PTR DS:[EAX],AL # p- j1 A1 {( i' ~( P- m00401004 0000 ADD BYTE PTR DS:[EAX],AL4 U- E$ o8 l; y! [/ v2 Q5 P 00401006 0000 ADD BYTE PTR DS:[EAX],AL / v4 K; z) g8 A, W& Q00401008 0000 ADD BYTE PTR DS:[EAX],AL3 r, D. |0 k2 F9 ]+ O+ w 0040100A 0000 ADD BYTE PTR DS:[EAX],AL: q' d; i, d( x1 q3 S' { 0040100C 0000 ADD BYTE PTR DS:[EAX],AL 0 }2 U" ~, w2 L$ X0040100E 0000 ADD BYTE PTR DS:[EAX],AL

0 r$ H, {' {( L% w3 a. O. f/ D

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

, ^3 D4 m5 p3 G' k2 l

00401000 60 pushad * v \2 L( r+ R C0 W. A00401001 9C pushfd & f; p+ A$ c8 \00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140" . ]/ d0 K9 D2 l& @00401007 33C0 xor eax,eax6 K6 k, h. n9 B& J 00401009 50 push eax2 ]$ P E/ Y0 j2 Y- C2 c% ]8 _ 0040100A 50 push eax / v: C' ~5 s# u, v; n8 w0040100B E8 6D97A677 call KERNEL32.CreateMutexA7 b; N, J' {: b8 L% l, y9 b3 L 00401010 9D popfd ! u4 z) s1 ~) e* a00401011 61 popad 3 z5 {9 v/ u3 L# T00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA2 Z- D# L/ F$ |2 D) O& B ............................................................

+ y: k& S, d9 J- C( E1 b

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

6 \7 O) n: U) n/ e. x7 n+ J

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

. P' V- I; L0 C1 I; U( A2 g

F9运行。

1 r0 I% m& e. l% s

中断

+ ^) F$ T* _1 Q% U

77E6C503 K> 55 push ebp //双击它或F2清除断点。 9 M7 {3 b) l5 ]- P# F: @- L77E6C504 8BEC mov ebp,esp8 a& Z3 p1 x7 P% O5 l) @ 77E6C506 51 push ecx& t* S5 H7 }/ D; \. s, }5 ? 77E6C507 51 push ecx/ z/ ]3 p) l' G% p+ L% v- A8 ~ 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0) q) Z' M; z" n/ I% B# G* o1 e 77E6C50C 56 push esi9 Q8 X( t, A5 z( b2 H3 {; p! _ 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D [* r9 e9 W9 v1 h ............................................................

7 l# ?0 y/ p% R) X4 I

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

: T% k. n$ [( @$ y

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。+ o6 G Y; P. I% N 77E63DFD 8BEC mov ebp,esp+ z# d' l5 x- }6 W+ S 77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0$ U) ~" e* a) R' M, G) l 77E63E03 74 18 je short KERNEL32.77E63E1D. o3 r7 c' c% k* F6 {: ]) W 77E63E05 FF75 08 push dword ptr ss:[ebp+8] 4 G/ `. ~) G z, p: u77E63E08 E8 87FFFFFF call KERNEL32.77E63D94! B* v3 U( Y# X. A! C 77E63E0D 85C0 test eax,eax 7 S1 b& t/ w3 e% c7 a8 _( |77E63E0F 74 08 je short KERNEL32.77E63E19/ b7 ]# K9 n( l& a8 |# v 77E63E11 FF70 04 push dword ptr ds:[eax+4] , w2 q0 ]* M" N) q; x77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW, y5 O9 F# B$ `! o7 R, C6 X 77E63E19 5D pop ebp ( d0 a( `8 _3 }+ R77E63E1A C2 0400 retn 4! ]; i+ T+ y* R) g; o/ C% K ........................................................................

+ w6 A) z, B/ A! `$ |

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

7 t6 |. w0 B. y" u8 E

7次F9提示一个非法指令错误,Shift+F9忽略。 ' Z9 ?7 K- H9 C' X& i" j: L0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801 ! B6 J4 u* ?6 u" C7 ]0012BEFC 00B2D6C8 \pModule = "kernel32.dll"& o1 N* b- q4 \0 p 0012BF00 00B2E67C ASCII "VirtualAlloc"

. X+ l4 b- b9 q& y0 t

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E. h; e. C! [" b6 ?9 |& A: E 0012BEFC 00B2D6C8 \pModule = "kernel32.dll"; J& E( B4 f/ S8 J 0012BF00 00B2E670 ASCII "VirtualFree"

% x0 l( R( t/ T! L& w- D: q

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

! V; z& N; P' W+ |# B1 k

堆栈内容

- P6 h( I* A' l( n: Z

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995, u* m& Y: s$ D 0012BC74 0012BDAC \pModule = "kernel32.dll"

8 n5 F# ^7 f6 S' |" M; v

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

# v2 P/ C9 s- Y( S- v

Ctrl+F9 返回。

1 A- g7 H/ Z) S! J

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA # h, p) K( t( d' [* a; b* s00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] ' Q1 k, S! E7 G5 n, G% L00B079A1 89040E mov dword ptr ds:[esi+ecx],eax% D1 V1 R' m$ G. u1 } 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0] 4 s9 ^" X% y! F00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi# t& q6 d; s/ f3 [/ z7 n9 S- O 00B079AC 75 16 jnz short 00B079C4: R( F2 R3 c# I. Z- e% j6 y 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]+ C5 L& _2 B% D+ B# v0 Y, G 00B079B4 50 push eax* t4 F. Q' F6 y( V3 e+ N# E 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA- K/ y. _# U% P/ u8 M8 N 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]3 z P$ b; @& a+ c6 g" Y 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax 7 t7 Y8 V- D- c5 @' C8 F. E/ d7 ?7 v00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] " K' J4 f/ Q$ G5 E8 x, }00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi 7 s, u W" J2 n( L: ?+ S. q00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

) Y" l, S2 X7 Y0 w( z; x" f' \6 _3 s

改为

2 y* J4 J& N& B$ \4 }

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA j! b. u: M6 B9 J* Z 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]* s L. A, d6 Z( h' b8 I* f 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax ) A) r' A4 F+ P! M* Y; f00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]5 C1 I8 K4 }* g+ n( i4 s# E7 { 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi . _8 o& W8 L5 F00B079AC 75 16 jnz short 00B079C4 9 X6 V+ g8 X$ C) a# {00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] 8 ^! U% c2 h' J! e8 O00B079B4 50 push eax7 i5 H4 H# J: A8 C% C- x 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA9 \$ B3 m7 r0 @* v, d& B 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]% w2 a$ c" Z9 _2 J3 ^ 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax: Q4 }4 p l! a# J 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] 4 n+ L5 {# A; c; p+ K) w00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi 1 I' F9 P3 n5 p" p F) m00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

" F6 K6 p2 k4 R% N% f

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

' G# O0 M; x" |$ M, y

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

2 Z' f; j% p: U6 h+ f

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里2 Z* m. E$ \. k, `* m U 00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54]( ]' r1 F7 h5 t% r' r. g1 ? h 00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260; Y; y4 F8 b( J( |2 \! T 00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4] 8 N2 N8 Q8 _3 ^4 ]: j# g00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952601 a. D6 C8 Q2 |/ ^ 00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74] $ j7 s; M2 |1 V00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 7 Q7 o; L2 t& r0 M7 s. M P00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30]1 y8 ?. z% |2 H0 R% r- F1 y 00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 : y8 @+ z4 Q) m& M$ O3 h; p00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

m6 z9 ], R6 a4 U

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

. s3 x) M. F5 }7 e

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

; U' h( G( A! s

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

! Y {" c+ t& W5 G+ M" e& v

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

9 V1 ^1 V ?' h a- Q8 \% y

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

- L! Y3 B" J2 g% c; b, Y# h# S

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

, g* W2 e( X5 W, f) O

77E7A6CF K> 55 push ebp //来到这里,F2清除断点& U- e& n2 ^# Q5 G2 Z0 V; } 77E7A6D0 8BEC mov ebp,esp7 y+ H) x& {$ c# ]& A! m; g! M 77E7A6D2 81EC 9C000000 sub esp,9C: e2 Z# }2 R* ~" o8 K, l 77E7A6D8 53 push ebx# u3 p$ Q F( }( g/ y+ [. y 77E7A6D9 56 push esi0 o! Q+ T# R r& t3 N* B+ B: g1 M 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-10-18 01:47 , Processed in 1.946920 second(s), 52 queries .

回顶部