QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 ) S+ W0 w. Q8 P. N2 }; P9 s3 P( i【使用工具】 Ollydbg,Loadpe,Imprec1.6F

4 D% ]+ l/ ]: K8 B

【脱壳平台】 Win2K

6 W, t: N$ }9 ^/ v, ~" w

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

: y2 _! u/ P; s* k8 k: Q7 O* b

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

: W* C" w( ~9 t9 r2 f" ^4 c0 `

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

" L$ i/ z/ @/ m( C+ a1 |

【脱壳人】飞舞的T恤* S, e9 M+ Q1 q9 p/ r --------------------------------------------------------------------------------

( Z4 p+ j% O) E' ^; L# W

【脱壳内容】

$ _, Y6 }5 |# A$ p

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

0 _2 h$ t7 l" X9 ~

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

% H2 b, }7 s- ]' I& K

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

& i1 J( y. ?* o; R! w, ^6 S

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

7 t" b y: i: D. ~: E% j

00485000 按> $Content$nbsp; 60 pushad //外壳入口 ( h- U/ s4 Q" |9 ]; ?8 d00485001 . E8 00000000 call 按键精灵.00485006; q4 ^* r- b) i& W2 _* \7 L 00485006 $Content$nbsp; 5D pop ebp / {* @+ c/ o1 }) e4 O: n4 x00485007 . 50 push eax 8 L2 h" y! u( u4 U( X, Q, _, I00485008 . 51 push ecx5 Q d/ N9 p2 o4 P 00485009 . EB 0F jmp short 按键精灵.0048501A - s4 v! u3 L- f: q- O.....................................................................

, s. H( K# m# l0 i# x% b1 P

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

! A: X! T4 ~- X2 U! b

中断

( W" u9 g% ^3 @. m. f

77E6C503 K> 55 push ebp; c8 g' D$ X2 X( e; M 77E6C504 8BEC mov ebp,esp % o8 ?8 Q0 C7 l3 G0 F4 L77E6C506 51 push ecx) F' B( w- J, Q. N7 T& T3 ^1 u 77E6C507 51 push ecx + p% r9 X: Y! y& _3 X! a' r7 J. B77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 " I2 _7 @7 l8 Y77E6C50C 56 push esi. X. a* c: q. o 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D ' y# y) a# E, P7 U- ]3 i% f9 R.....................................................................

4 L" H0 G4 u e5 x$ w' W

堆栈内容

/ ?% g& F. d# t K' k7 ]' x2 |

0012F574 0045C5F1 /CALL 到 OpenMutexA8 P! |, I* E. G 0012F578 001F0001 |Access = 1F0001 R1 ]) L" u! F& Z 0012F57C 00000000 |Inheritable = FALSE ' h) Z, |/ f: x) v {: ]& ]* e0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

$ A A( J* o* m

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

; D. E. Y' G2 A

Ctrl+G 401000

3 S' p0 C$ c4 H# y8 I) L: `8 f

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。7 v7 V5 b/ y* A. [- p 00401002 0000 ADD BYTE PTR DS:[EAX],AL! Q( X( u& A/ U6 o M 00401004 0000 ADD BYTE PTR DS:[EAX],AL . ]; F ^ [9 T# p+ d# G; c3 h00401006 0000 ADD BYTE PTR DS:[EAX],AL% i G( h% {- T2 [* \ 00401008 0000 ADD BYTE PTR DS:[EAX],AL% _ M$ ^8 t7 } 0040100A 0000 ADD BYTE PTR DS:[EAX],AL5 h+ r3 W5 m) A- v2 J+ Y/ Z 0040100C 0000 ADD BYTE PTR DS:[EAX],AL 5 d' v; l) w6 Z1 c2 m: n0040100E 0000 ADD BYTE PTR DS:[EAX],AL

# F& Y: I1 p& v7 E$ S* N

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

- ~: r7 x5 q( \/ q* u5 k

00401000 60 pushad ' g% w; K. K( R% s+ }% c0 v3 ]2 b00401001 9C pushfd. ]4 A) D$ O7 p& y; [- O 00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140" y$ v" D; _% O4 B3 H00401007 33C0 xor eax,eax / g9 r( Z8 p* G% X: l5 z0 U/ c00401009 50 push eax ( v- l' P) J7 `$ V8 E& @- W" V0040100A 50 push eax 7 g. n1 d: C5 L z0040100B E8 6D97A677 call KERNEL32.CreateMutexA9 J7 s9 C, d6 ?4 r+ p2 [ 00401010 9D popfd5 D5 D& D( V2 z 00401011 61 popad ; ]- w1 @8 G0 B# A00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA , i& d$ }: y( X% F............................................................

' e# Z* `9 v+ a! x$ \

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

- Y x9 X8 ]3 {8 S& m. C5 B

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

0 i+ f4 v1 T* A- n! ^

F9运行。

1 s5 W: j3 S- j$ H# C" K# g

中断

F: {' x0 h9 ?4 @0 X! Q1 g. O

77E6C503 K> 55 push ebp //双击它或F2清除断点。 7 p' k, E+ H# u. ^ }77E6C504 8BEC mov ebp,esp8 D$ l \3 q: P* F 77E6C506 51 push ecx0 j; @ U" N2 `$ f 77E6C507 51 push ecx3 o! G0 G- `# L& q; ^ 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],07 W9 w+ Z! `, [* \3 h% h5 K }! g! H 77E6C50C 56 push esi : S L: c" I4 k( p; m77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D * ], x. V- F$ [6 ^/ l4 O, j............................................................

. T* ]0 k4 d8 b0 @/ v

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

: S9 s: Z. f" U" F

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。/ K' I$ `) K. J1 k' V 77E63DFD 8BEC mov ebp,esp2 `5 U2 K' `" |& n4 }# | 77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0) w$ `; S; Q9 R, z( b' z! F% A6 O 77E63E03 74 18 je short KERNEL32.77E63E1D ; O+ x( v/ M8 u) r) R2 k4 p77E63E05 FF75 08 push dword ptr ss:[ebp+8] , y i! L8 F2 K) X: q1 b# ]77E63E08 E8 87FFFFFF call KERNEL32.77E63D94" y) h1 r% _! M/ Q. u 77E63E0D 85C0 test eax,eax 4 `$ C; F8 {" O! x) a77E63E0F 74 08 je short KERNEL32.77E63E19/ u0 Z& G& A: P1 M: k4 B 77E63E11 FF70 04 push dword ptr ds:[eax+4] B5 T) S8 @2 _' T0 \! `7 o _77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW 9 E" a9 k# M& b2 o. E- z/ |* S$ n77E63E19 5D pop ebp3 _! a2 T% i8 p: E+ x3 L9 s, y E 77E63E1A C2 0400 retn 4 " W2 b9 b6 Q% y& n........................................................................

- g! C* g* m- L, l" a

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

/ S: }8 C9 a5 W

7次F9提示一个非法指令错误,Shift+F9忽略。 ) d0 \3 j) e* N0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C8011 L; D' f0 s+ m* n 0012BEFC 00B2D6C8 \pModule = "kernel32.dll"& p9 l6 k/ m4 E/ V6 x 0012BF00 00B2E67C ASCII "VirtualAlloc"

( I Z4 R: L: J2 o

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E / V# Y# j" P+ d! s0012BEFC 00B2D6C8 \pModule = "kernel32.dll" 0 `0 S1 o8 R3 @+ r: N* k$ c) ~) w; u3 f0012BF00 00B2E670 ASCII "VirtualFree"

+ J1 H4 @( W9 ^+ c7 A

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

/ ]" |- m6 T/ U% C; s

堆栈内容

" c& m9 L. ~* J* A7 ~* k4 S w

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995 / x$ s, j5 u$ a0012BC74 0012BDAC \pModule = "kernel32.dll"

5 n! i8 T% L1 t$ s

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

1 g( _- Y i) e+ q

Ctrl+F9 返回。

! s$ X6 c0 \& ]+ h) ^6 W M

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA5 B9 b, S8 a( H7 j3 t$ z 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]7 f2 t7 k3 f4 ~% o; S 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax( c4 A9 L, X2 G- D' r6 Q 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]/ m0 z8 t. r. _* b, o H2 S! X' f 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi . O* W1 T8 ]# J5 O% G00B079AC 75 16 jnz short 00B079C4 + j3 D* N1 R+ v; P$ X/ ^$ {00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]7 \* e. g2 G6 K& J9 `4 B 00B079B4 50 push eax ; B* m/ [/ v$ h8 t3 L6 D00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA8 k8 ?. W; f' {2 _! m+ S 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]2 N7 O6 l* S4 n( I7 K% M" t 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax , c+ M+ K7 y) n" B$ L% O00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] . L% Q) H. o6 `( k1 a, y00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi1 [1 S2 q! O) F1 T: ] 00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

; ]4 o) m) s# f7 G

改为

# B8 n7 F# q/ w

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA " y! _: ~7 W6 G( g6 k0 k+ R# x& s00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]2 P6 |8 d* g% ]0 S 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax H* O' v. T4 d* u 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]4 F0 d L& o" l, W$ u3 ~9 W" b! B! b 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi ' \9 U4 B' R( }$ I00B079AC 75 16 jnz short 00B079C4 + _ o* ` {5 o+ F1 r2 e1 O00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]1 M' G4 z7 D4 Z4 i, |/ N 00B079B4 50 push eax9 A K `9 o7 Y) [+ l 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA6 y- I9 Q( z( x K. A 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 8 P. \* a6 V4 p) K6 A! T00B079C1 89040E mov dword ptr ds:[esi+ecx],eax8 T/ _* m6 t8 v* q( q 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]6 g4 g" G( W. c( w$ d& A* c' ^7 ` 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi' F0 I/ G, I% G3 Z 00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

& {; Z: v" q; p4 ~, }- S4 Y

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

! \: W8 c' ? ?/ z5 C

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

% n) U, @% K2 g1 p

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里) E0 h. A3 ]; ]5 v& J5 S 00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54] ; s" U" O @9 F$ }% u$ Y00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 ; w$ @9 f. N8 J( b P00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4]/ L/ J9 K1 j9 L0 Y! X3 Z 00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260( ^; S% w/ x) v! @/ M& w- I 00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74]+ ?4 ~5 V5 {$ w) H0 | 00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260- Q1 a$ `8 h# Q1 x% |2 {. [ 00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30]: D' ~5 n+ n% u- V0 ` 00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 ( c# i* o6 G" o0 `( O( B7 S* u9 w00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

& x5 {, H" c+ U5 E' v: e

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

. p; l! z; v% c* y: q5 m8 p" F+ Y

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

$ _7 B* A. U$ O, ?$ {' l$ Y, B

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

) X, {7 J& P6 F( T; L

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

/ |3 }( }$ n' M+ G2 ?3 A3 T

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

0 }, @# ^; i5 a' {. u7 u5 U

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

' e$ z6 o6 X& e# b8 m' G7 M9 e

77E7A6CF K> 55 push ebp //来到这里,F2清除断点 + J) p/ V e& z1 B77E7A6D0 8BEC mov ebp,esp . F6 _% p% n5 X7 T# o8 b77E7A6D2 81EC 9C000000 sub esp,9C $ s8 o% ?' T c9 t9 G8 }3 O77E7A6D8 53 push ebx1 l' L7 j2 X( L5 I- w. q 77E7A6D9 56 push esi" P. O6 G( z3 A3 G+ i5 Q5 N% | 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-4-19 15:49 , Processed in 0.401281 second(s), 52 queries .

回顶部