QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 7 X: A" B( Q# A& \: H: r, B【使用工具】 Ollydbg,Loadpe,Imprec1.6F

; S) a9 M; o/ G7 n

【脱壳平台】 Win2K

& V- @) O8 C# K

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

6 R6 @ n$ T3 E! f

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

6 H1 p2 L4 x# |8 s9 s

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

! f3 S! }( Y1 @1 A0 q, i* t% W

【脱壳人】飞舞的T恤8 _( P1 d, O, Q( K' p$ d8 ^ G --------------------------------------------------------------------------------

. J& Q2 b: {' V8 X8 N

【脱壳内容】

* [& F- u4 H! j$ [

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

* w4 w* y' v; S) g( H# N. ^; p

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

, M! Z" I/ F6 v/ D/ C; X

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

6 t9 x7 } T+ k- K; M8 V# U( y3 n

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

, F) y: |* z( o& ], Z; {0 i

00485000 按> $Content$nbsp; 60 pushad //外壳入口# O; Q6 ?" @7 \ 00485001 . E8 00000000 call 按键精灵.00485006$ C! V4 Y- x9 U5 a8 d 00485006 $Content$nbsp; 5D pop ebp! X3 s1 w" |" d4 |; F" {$ g 00485007 . 50 push eax8 e# a/ x: J- q3 @% z6 X) N 00485008 . 51 push ecx 8 ~/ K( k' }! C! J. A00485009 . EB 0F jmp short 按键精灵.0048501A( r- O% a4 z6 H9 `0 Z4 R7 Z& [ .....................................................................

3 P2 p8 E' f8 r f" ~; J& C

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

& R; V# F8 V6 X/ ^

中断

* |$ I8 w+ T. ], h# G: s/ ^' u6 z

77E6C503 K> 55 push ebp5 M- [" P( w8 J1 Q" n 77E6C504 8BEC mov ebp,esp, F; U! T, A& {2 Z0 H+ R 77E6C506 51 push ecx ; i8 s+ b- ~ n2 f1 m$ `77E6C507 51 push ecx( L; p( Y- J+ l9 E* m8 d& q 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 / q& }* k {2 T; o77E6C50C 56 push esi ; P1 m, e# Z% W; B) T) v6 U77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D : F- u6 i, m+ V+ F0 ?$ n.....................................................................

% ?3 l9 ^5 | Q* }

堆栈内容

/ a7 p' F b5 C$ S

0012F574 0045C5F1 /CALL 到 OpenMutexA3 t- v- i( Z" K# J r/ P9 ]' }1 g; O 0012F578 001F0001 |Access = 1F0001 % ^- C8 J5 _+ Q2 w0012F57C 00000000 |Inheritable = FALSE ) _1 m' N- N+ Z$ \$ Z' H; ?0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

: R z% b, }) p: R& F

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

, N; \1 E1 C J& u

Ctrl+G 401000

3 l+ M, i# t! M0 c! `

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。 % ] b0 |( F" x M) \) X00401002 0000 ADD BYTE PTR DS:[EAX],AL / D. [* x" d* \/ m9 R% I00401004 0000 ADD BYTE PTR DS:[EAX],AL/ A7 e5 F: E& X: I 00401006 0000 ADD BYTE PTR DS:[EAX],AL 0 E; K6 h7 b' x, d00401008 0000 ADD BYTE PTR DS:[EAX],AL & r% m) z( D( e \8 s# j# e8 e$ y0040100A 0000 ADD BYTE PTR DS:[EAX],AL / u) X: \* L3 x0 U0040100C 0000 ADD BYTE PTR DS:[EAX],AL9 C( U, {7 Z& s, q2 U% n9 O* s 0040100E 0000 ADD BYTE PTR DS:[EAX],AL

9 ?) |! ^+ N g# J1 |8 Q

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

# O3 H4 ^5 V6 p. p6 ]

00401000 60 pushad0 S- n- r# r' M" ^ l 00401001 9C pushfd8 w; W, P; [- ^+ ^. {" b+ c 00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140" " Z4 M8 B5 X( q( K5 h$ X6 m00401007 33C0 xor eax,eax) A" h2 G8 g1 p 00401009 50 push eax% ?9 |1 c' U6 l: B5 n- z* N0 z3 _ 0040100A 50 push eax 5 S; ^9 W7 {4 X, |. D" c0040100B E8 6D97A677 call KERNEL32.CreateMutexA/ y) h* ]# D+ q4 a 00401010 9D popfd # V2 U/ C6 }% R j6 R+ P2 ~00401011 61 popad " D1 V% w8 R+ h( D0 J1 q00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA / c- `) d8 Y* G5 n1 W* I............................................................

1 T- J# b& b* P7 d1 P

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

8 G6 j0 }0 L7 S, r& s- `

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

' V5 w# S4 B r+ [

F9运行。

- y3 W5 X1 Q7 q) x0 q9 l8 F

中断

' f9 Q: ?1 ]* N* W3 { K9 N

77E6C503 K> 55 push ebp //双击它或F2清除断点。3 J- D* G6 S& r8 O9 r+ a0 p; t- H2 C 77E6C504 8BEC mov ebp,esp 7 J5 S1 R7 C' H; `77E6C506 51 push ecx " J4 N& I' O/ h$ c5 l77E6C507 51 push ecx ! s- Y/ ]6 n y. k3 z77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 ) s) v+ I9 S# e9 H1 ^77E6C50C 56 push esi , q7 o3 y3 X! j1 M, c77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D2 _: |9 k% ?2 h' m% P S, y ............................................................

. b, x6 w* D+ ~: ?; h

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

0 N5 ~2 j; a0 `9 k$ \

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。2 M/ J3 P! t4 f8 x8 e 77E63DFD 8BEC mov ebp,esp; \+ P7 w% m( G; v- Q8 _; s 77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0 ! ^$ [' p2 _7 T, y @* Q77E63E03 74 18 je short KERNEL32.77E63E1D * o2 S! ^% h# J3 z: z+ D1 ?! X9 H77E63E05 FF75 08 push dword ptr ss:[ebp+8] / s# Z* y; O( v; }9 L77E63E08 E8 87FFFFFF call KERNEL32.77E63D94* f9 c) h% J9 F$ X K2 N. L 77E63E0D 85C0 test eax,eax ( g! x Q7 _9 d% `& N) F77E63E0F 74 08 je short KERNEL32.77E63E199 N5 z. Z8 T' X, e% f0 _6 R 77E63E11 FF70 04 push dword ptr ds:[eax+4]7 @3 d" q, p: i( _% r" [ R9 u: w5 B 77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW+ H& B9 l ?6 |5 _5 R$ W 77E63E19 5D pop ebp. Z U+ M/ k% p$ h2 d. Y# p 77E63E1A C2 0400 retn 4 ) z" q( l, \5 v3 A) }........................................................................

z! I% o4 X* }

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

2 F: K! u# z( [+ w0 q

7次F9提示一个非法指令错误,Shift+F9忽略。, J/ m& I7 s( M8 k+ e 0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801 7 p5 H: V \: d- Y* d0012BEFC 00B2D6C8 \pModule = "kernel32.dll"" h* n3 A7 g6 P6 d 0012BF00 00B2E67C ASCII "VirtualAlloc"

5 r; h! T. G% ?

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E 2 Q* R8 b" T0 Z1 M0012BEFC 00B2D6C8 \pModule = "kernel32.dll"2 T, ^' _' b' b$ E 0012BF00 00B2E670 ASCII "VirtualFree"

3 L6 c+ Z* {0 V) C0 ]

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

1 i0 X; Q. d* d" L: L6 ~+ \" o+ X6 d/ f

堆栈内容

* g4 b- Q# B: d! W

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B079958 v, s4 d0 [0 m 0012BC74 0012BDAC \pModule = "kernel32.dll"

1 V0 O; A8 `% P9 p

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

2 M; [% w! K1 e) J

Ctrl+F9 返回。

+ `! G% B: b) @/ y

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA0 }' B2 @" G+ F7 N* K8 K& r 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] " h2 p ~4 M. d- I! Z; r0 [& J00B079A1 89040E mov dword ptr ds:[esi+ecx],eax5 B9 e Z. ?; G$ G$ W/ y 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]6 b( m& @) u7 S& d5 [3 P$ T4 c 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi $ O* c9 u8 a* h, A8 Q2 O00B079AC 75 16 jnz short 00B079C4 8 }0 e$ y; h. _4 E00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]- A6 f! [) t6 P. c 00B079B4 50 push eax 9 c+ ^5 a& u0 v8 l. U" r00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA ) ~! R) V5 Q+ i' Y00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]5 C& I5 r. S- j; R 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax, D" e3 b+ }3 o0 N2 E8 H 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]9 b" F# p* l# A 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi" [" r% A7 D7 G 00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

, q4 W& F; k2 P1 |" F( c5 y" t

改为

# c( X6 U" C/ m9 p

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA - D% [7 h3 H# ]0 r7 h. O9 c00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] # f% L6 l }, n) J, c7 ~$ Z; K00B079A1 89040E mov dword ptr ds:[esi+ecx],eax+ G1 @ b( b/ w/ M. H- |# _$ E 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]5 i! u5 F1 u% f4 n5 y; ?; u 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi( a9 j f+ R! O 00B079AC 75 16 jnz short 00B079C4 4 g' C0 y$ L, m; |& L: p3 f$ b# I5 q00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]+ w* e. E! k/ y/ E# m 00B079B4 50 push eax . `4 m$ F& k. ]3 {4 Y00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA + N3 W: T }5 k1 C+ K i4 F00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 2 b% r; w0 z+ q: ^; `; K00B079C1 89040E mov dword ptr ds:[esi+ecx],eax 0 _& M4 D6 `& W3 B V00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] 9 W8 _: m C7 _" ]2 p: k2 K8 j00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi ! o, a# _6 C6 f. P3 \: r00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

" Z+ B6 K* K2 A3 V0 p& y

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

* G {+ V9 N9 R0 k5 s6 @9 d: j9 w" D

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

$ e& g" S% b, C+ L G

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里 " e! J8 p1 \; X" w: g: p! }00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54] ) b( L; O- q& U0 `6 A8 Y00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260! ~* I; u& O, J1 N+ m0 S 00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4], w* E" R& s& C5 h' d5 u* Y, q 00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 4 A5 n* y A7 i I8 _2 r4 ~0 n0 G00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74] 1 {" a6 o) _, O00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260% F; g& G, f k- o 00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30]5 p0 J7 K& ~5 |0 _8 q 00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952608 Q6 r2 B: {$ l) u 00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

- v6 g( B5 L! m5 d/ \3 C& X/ K

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

1 r" o; r+ A- I% a

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

/ c* P6 y/ T% _& |. g' o5 A

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

V/ ^# J/ z+ Y3 Z2 b' }/ J

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

/ ?2 P C, q5 Z0 \# s! r

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

8 j$ O4 V0 d9 M, P O6 d/ Y

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

6 Z9 @$ ]3 Z) S! x: ?( P' ~: V

77E7A6CF K> 55 push ebp //来到这里,F2清除断点$ F0 H0 q9 q1 T2 n/ ~) r! ?) [ Y 77E7A6D0 8BEC mov ebp,esp * N4 _- M3 H6 t8 b77E7A6D2 81EC 9C000000 sub esp,9C * r; _% Z( u; r, ~" ?! A; F" {77E7A6D8 53 push ebx " O3 I; M& t. M6 g77E7A6D9 56 push esi% n+ F6 ?# G7 a7 q 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 01:50 , Processed in 0.385873 second(s), 52 queries .

回顶部