QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 ( b8 w7 \! ]4 T( v7 q8 E: {' r# X 【使用工具】 Ollydbg,Loadpe,Imprec1.6F

0 L: s- Y+ f, B

【脱壳平台】 Win2K

7 F1 \2 N: ^5 P! ?+ |

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

+ o$ ]% j% j6 e! O8 n

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

: [1 h+ w# m% ?% x* o. }: S5 z+ r

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

' H n; o8 F8 d( y. Y

【脱壳人】飞舞的T恤+ G! P& ^% {% A3 l --------------------------------------------------------------------------------

9 H! @$ q& T5 M# u/ N! L- z

【脱壳内容】

2 u3 {! l/ |4 K8 k; U) V4 Q

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

; |/ F. w! `9 ^

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

1 I2 ^3 X) D4 a, _0 s0 i

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

q% M( Z' V: g2 @

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

( r% g* T3 t! J

00485000 按> $Content$nbsp; 60 pushad //外壳入口 4 `% y8 q. h/ E00485001 . E8 00000000 call 按键精灵.00485006' q, b: s" \ X8 R 00485006 $Content$nbsp; 5D pop ebp- m) z, X t# H" Z t! k: K2 z) E1 b 00485007 . 50 push eax3 L- B5 [9 _9 q' w& _5 s 00485008 . 51 push ecx - o3 t- k9 Q( M% S3 D* q00485009 . EB 0F jmp short 按键精灵.0048501A u( y" A% U8 r3 @& K3 \7 ] .....................................................................

( }: @6 V' b K, P6 X3 w

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

) s( h# V0 h& L6 D. E: Y4 S( G8 t

中断

( }) b* J( Z2 r1 J5 _5 L% M" Z

77E6C503 K> 55 push ebp9 l3 a. D* E5 c! E1 t 77E6C504 8BEC mov ebp,esp" g; v1 Z0 M! p6 I 77E6C506 51 push ecx " [' k6 {+ Y' Y$ I6 I, e77E6C507 51 push ecx 8 J& t9 W5 |& U7 m' g4 [. W- H7 w77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],01 h* Q6 ~, l# J U- `0 E3 @ 77E6C50C 56 push esi+ c- B0 v9 O" n% f- D8 G3 Y 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D ( I: O* D: }7 E7 |.....................................................................

" M) H3 |! w8 j3 w. o* I4 T9 _

堆栈内容

- T8 A4 x2 K8 i7 V5 ~; U9 r

0012F574 0045C5F1 /CALL 到 OpenMutexA : |- |" E9 I9 a) o0012F578 001F0001 |Access = 1F0001 N4 r1 `: k! N; A: j5 {0 J0012F57C 00000000 |Inheritable = FALSE - w1 V7 r% _# \8 }0 A0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

. {% l1 Y/ m; \4 _. t3 \& Y

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

* {( k' T. \ _- j3 i* Q$ q$ ?

Ctrl+G 401000

0 K# }: q( V# M$ B# h2 E0 M

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。: J y+ g3 u3 { 00401002 0000 ADD BYTE PTR DS:[EAX],AL6 ?+ T# t, e- N/ [. _ 00401004 0000 ADD BYTE PTR DS:[EAX],AL# ~% v. Z6 N* u' {' H7 ~5 L# r 00401006 0000 ADD BYTE PTR DS:[EAX],AL9 P* S. |% p6 A; Z5 b 00401008 0000 ADD BYTE PTR DS:[EAX],AL7 a Q' I1 S1 E0 \; E2 |% Z 0040100A 0000 ADD BYTE PTR DS:[EAX],AL: l; X% m& U7 U- e$ D 0040100C 0000 ADD BYTE PTR DS:[EAX],AL( y. z3 p# Z- C 0040100E 0000 ADD BYTE PTR DS:[EAX],AL

9 x9 [% S3 G6 l( N- O5 p

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

* P: S4 _% r' u! @; a8 ]

00401000 60 pushad: D3 Z. k6 \% ]) w) \2 W6 n" p! ? 00401001 9C pushfd ! h) Y2 c$ c) ?' g00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140" . f$ n, D6 ?1 W00401007 33C0 xor eax,eax9 o/ K. j0 a) @ 00401009 50 push eax w% x8 F6 R/ s1 V) c* X; f 0040100A 50 push eax2 o3 z$ c2 R. J4 `; s' E 0040100B E8 6D97A677 call KERNEL32.CreateMutexA 3 [7 H. \" J- M: I( h3 H$ ?00401010 9D popfd 7 \1 t4 S$ N" ~) W00401011 61 popad ; }: D+ D9 y4 @# o; j00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA ( r; Q$ _+ S/ @ n6 v............................................................

2 @+ W+ h/ O) \1 Q% V

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

2 m9 ^9 N; I" ^7 B

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

, ?, k7 |3 l# u3 x

F9运行。

) x$ _8 d* q4 @6 C1 S

中断

1 j+ S, _ z( k% E! Z) v

77E6C503 K> 55 push ebp //双击它或F2清除断点。1 n& z/ L( S/ R5 z2 T$ C+ |9 i 77E6C504 8BEC mov ebp,esp% ?. N1 {/ Y* m+ }2 d# b2 D& z 77E6C506 51 push ecx. F+ z9 N1 S7 y8 S3 R$ T 77E6C507 51 push ecx4 M+ Q3 E# V- O0 W 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 ! L1 b7 ?* ?" s( y i9 b77E6C50C 56 push esi 3 d- j2 ^" ~) \77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D & r3 X# O0 Z/ |2 n* B, I/ N............................................................

$ G& v% ]" @5 O3 C" [

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

% O3 E, `% }/ r

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。/ ~8 c. U3 Q9 }, a 77E63DFD 8BEC mov ebp,esp 5 R# v- ?0 X0 v- j5 \77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],01 D/ {* O& P+ }/ n2 @7 Y2 W7 T+ r 77E63E03 74 18 je short KERNEL32.77E63E1D 9 b4 R& a1 \- K1 } `, g% M77E63E05 FF75 08 push dword ptr ss:[ebp+8] f( Y- E* i1 V) U# k4 { 77E63E08 E8 87FFFFFF call KERNEL32.77E63D94 - R6 N0 E. F; m# }- R77E63E0D 85C0 test eax,eax 9 P0 a9 {! v u! b0 r) q' o7 U77E63E0F 74 08 je short KERNEL32.77E63E19% O8 T0 o7 V' N) i" J1 O7 t 77E63E11 FF70 04 push dword ptr ds:[eax+4]+ G5 ^$ H& X# r, }1 Q 77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW2 d) ^- X# o- o 77E63E19 5D pop ebp 1 s# @" n* b/ b6 z- X77E63E1A C2 0400 retn 4$ l! g* t1 K1 C7 ` ........................................................................

, s0 `/ N3 c, o0 r6 z* X

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

/ i/ w3 v1 z. F% g* f* B y5 E2 z+ l1 ]

7次F9提示一个非法指令错误,Shift+F9忽略。 0 a" T" t6 \* N# {5 x r0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801 G: D/ l# R5 ~+ K; V- P0012BEFC 00B2D6C8 \pModule = "kernel32.dll" & p0 p; y7 P+ K" E0012BF00 00B2E67C ASCII "VirtualAlloc"

4 \( x- U) |4 L6 g1 l

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E & R! \4 ~: m4 O* ~& F% m( L0012BEFC 00B2D6C8 \pModule = "kernel32.dll"4 _* x2 T2 _9 A5 C- c( M8 ? 0012BF00 00B2E670 ASCII "VirtualFree"

/ J) t q }( \9 N# d; S' H

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

( ` p6 j4 G# V5 K' K4 q# R3 B3 B

堆栈内容

/ H* t/ p/ i3 O7 _6 G

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995 ) F9 k( E% R& n& P! _6 l- ~0012BC74 0012BDAC \pModule = "kernel32.dll"

0 d P; Y/ x5 B9 ~. @+ M* E

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

# F: e. Z8 I& V2 |: E4 [2 u$ G

Ctrl+F9 返回。

4 C! c" Y' }$ V' D7 a& E5 x

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA, v( Q, T# D( L( s 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 5 O7 A4 ^/ v1 [2 `00B079A1 89040E mov dword ptr ds:[esi+ecx],eax + K1 A8 Z3 B9 j1 k00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]# j# R& h$ t; F6 z2 J 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi6 A ^- V! a/ f& C- N 00B079AC 75 16 jnz short 00B079C4 - ]; {- ]% ~( r# F) Y, ?0 z- e00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] ! ]+ X8 K4 X0 _% {+ m: _+ H% K00B079B4 50 push eax- U# {/ L9 A4 x% [' R 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA0 t4 s( n5 B( \3 L0 L 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]5 l1 ]- U! R- l- G 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax/ g7 T! j/ c" m0 [1 A! O 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]! I2 ` r7 b% A/ V" H% p' T; H) i# H1 L 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi( e, d8 u: }9 v0 E7 z& h 00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

- t" b' @! g4 F' U3 w6 Q6 x

改为

U$ C4 m. D( R& G5 I; v

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA' R) q p: F: y. N( X 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] # D, n& t2 r) F0 E4 N00B079A1 89040E mov dword ptr ds:[esi+ecx],eax 0 L7 \' W% D u% U+ j Q00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]: X$ ~4 G, [ }4 l& s 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi 9 q6 q3 Z% p) H$ j3 f' n00B079AC 75 16 jnz short 00B079C4* I( z( B/ Q) x; y 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] + a: H6 a, x# z& C7 d* f( c* b7 V9 Z00B079B4 50 push eax2 ~9 X+ `, g) d! r9 y' v 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA 8 ^7 } C/ O% n' E, T; }7 J00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] Z- c! U$ `8 { 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax & _+ H" W9 w/ o6 {3 n' I: _00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] % K0 `4 \ P- C00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi 0 q! U0 v6 F$ x+ f00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

9 c8 T4 \. N: ~! ?$ [

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

/ K4 v+ O' V+ ]6 e+ ^

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

* [! {: W q, v( |

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里+ G$ R+ @$ N! j4 W3 l: |$ s6 E 00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54] 4 r6 R" v9 D/ M+ m5 H+ c00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 0 f8 D' C, h* ?- t" _00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4]# f/ P. ~- y$ ~/ p. f 00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260% f! m l/ D+ v4 u 00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74]9 ]4 o: Q5 V$ I7 r 00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260" o5 o0 Y) p* M6 Q 00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30]7 E# M0 a, m# j, }1 H# }1 o 00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260: d) U" d& j6 R' C 00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

$ c( O3 g y/ e e @/ m$ l& R

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

2 M; u5 ~. ]+ }2 S- A/ [

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

' m( b) U5 }7 |' h

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

. C6 F& f8 o% H+ t

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

( {( t" @, [) E0 U4 O1 p* s

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

9 r4 E% `! l4 m( a/ U) g( [

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

+ t' D% e# \7 g5 n6 R/ @

77E7A6CF K> 55 push ebp //来到这里,F2清除断点/ A; _4 [& Q, ?4 X- \ 77E7A6D0 8BEC mov ebp,esp * [2 X! F$ f/ u& g* D$ f! G/ A77E7A6D2 81EC 9C000000 sub esp,9C) B- s! _" s: X, u( {6 u! | 77E7A6D8 53 push ebx ! J3 y0 J6 c4 D2 \$ C5 S77E7A6D9 56 push esi ) i _, U" H% L4 A; N, q77E7A6DA 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-13 04:20 , Processed in 0.417786 second(s), 52 queries .

回顶部