QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 8 q. w- k/ G" I9 M$ ]# B, N2 s$ g【使用工具】 Ollydbg,Loadpe,Imprec1.6F

$ m% a# x9 e- U# ^8 S

【脱壳平台】 Win2K

& {0 p/ E) T. u3 O4 |

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

- V6 K" |) i: Q

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

7 k5 B# k; j: _7 T8 m1 F

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

% N2 ^) G+ {9 z5 K6 r, T

【脱壳人】飞舞的T恤" J1 R* o" a& I1 \3 V7 l0 e' | --------------------------------------------------------------------------------

2 e2 B/ F( j# i. Q! Q

【脱壳内容】

; |4 _/ b# p4 ^% y! x/ J, [# p

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

8 Z6 P+ ?4 M. l

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

$ L1 W* R% I% ~, I/ m- b, {

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

* D6 c; k9 o- X

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

/ M( F) l. H$ ]5 [) j* {1 o( X( T

00485000 按> $Content$nbsp; 60 pushad //外壳入口 8 ^' i: z) \0 p& c00485001 . E8 00000000 call 按键精灵.00485006 # P( W% G7 N% ?9 k' C" u00485006 $Content$nbsp; 5D pop ebp 4 b$ \- Y+ i8 D0 F' U) o7 L. S00485007 . 50 push eax+ X3 ^1 T2 C/ q8 t; n8 {" k 00485008 . 51 push ecx 6 t: H3 C3 K) ^7 O. P* ]00485009 . EB 0F jmp short 按键精灵.0048501A$ O G! y4 |0 l* f: n1 D .....................................................................

5 R2 z. E8 P* }

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

4 I7 i7 v' _. {+ |# n

中断

5 Y# P- u4 a' m$ G. Y5 U4 g

77E6C503 K> 55 push ebp , X1 \# i/ v0 z( J' y$ x/ O( f6 K77E6C504 8BEC mov ebp,esp ; F' L8 A1 e- y" q4 U77E6C506 51 push ecx8 O6 ~3 L' t1 I1 r# b( W 77E6C507 51 push ecx3 [& C0 [4 A3 @. z 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0: Y+ H4 R& ~6 X% \5 z. y2 {; S9 p 77E6C50C 56 push esi* b3 R* h( _( g, w* C# \6 p& H& v4 N 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D ( C: D: F, U& R& k: V" x.....................................................................

0 f0 f: t# F: M9 j8 `( V' S

堆栈内容

% N* l' N. }' G; Y G! d5 K9 u

0012F574 0045C5F1 /CALL 到 OpenMutexA% S, N# m; a s) {+ V' { 0012F578 001F0001 |Access = 1F0001- q, f% @ w& ^# x3 [1 n5 h: p 0012F57C 00000000 |Inheritable = FALSE( z- r9 A9 ?0 C! B2 l7 P8 J 0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

0 o* v: m! N* L3 }. N& e& W1 O

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

; j/ }7 L5 n: G, t+ M6 o/ c

Ctrl+G 401000

/ a6 Q7 q# d% |( X5 y" ?) |* x

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。+ q k+ t M5 w7 K 00401002 0000 ADD BYTE PTR DS:[EAX],AL 4 c& J4 M1 Y$ l& j00401004 0000 ADD BYTE PTR DS:[EAX],AL8 F; J6 h& B# E8 ]1 L0 H- W 00401006 0000 ADD BYTE PTR DS:[EAX],AL 2 Q" ~! b A: l8 \* a' U00401008 0000 ADD BYTE PTR DS:[EAX],AL- W% b6 y: q# a 0040100A 0000 ADD BYTE PTR DS:[EAX],AL. R, ?, ~" a! Y) U 0040100C 0000 ADD BYTE PTR DS:[EAX],AL ; U$ A' h9 w) v' W0040100E 0000 ADD BYTE PTR DS:[EAX],AL

* `4 `: l0 G2 o. }2 S8 g- W

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

l0 r% v; {* Z; Z6 L# \# N! ?3 k

00401000 60 pushad8 u% s* F) g k 00401001 9C pushfd3 o0 d( c* ]8 L0 h ^2 x# y 00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140"* t) E$ q3 r+ {# M$ { 00401007 33C0 xor eax,eax; n. f2 o Y" @: X6 m1 D 00401009 50 push eax ; l* T# N* u- b0040100A 50 push eax # |! }; Q- t9 `0040100B E8 6D97A677 call KERNEL32.CreateMutexA N+ k0 Y2 D/ ~, Y+ s, H0 c 00401010 9D popfd 9 E. s! a* `- k9 A V00401011 61 popad 0 p4 E5 h+ G, C00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA0 n! l, m" j/ t& _. m0 H( N! y ............................................................

# l7 n, i" `: m& h+ J0 O( y4 U% ?

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

% Y% ?; Z$ W* N# h/ @# Z

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

8 w$ P( M/ r) [+ L( \

F9运行。

& w& @1 c! Z5 ]1 P7 K. C6 V

中断

9 F. P9 P; F# d( d# \' c* M

77E6C503 K> 55 push ebp //双击它或F2清除断点。! S% o$ L7 @- U' ~4 _9 M 77E6C504 8BEC mov ebp,esp4 L" q& ^5 w' q' C% G 77E6C506 51 push ecx O$ c( u$ U& _9 d77E6C507 51 push ecx' v; N/ j w' f. x& V6 r1 N7 x$ X 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0* l/ D ]; V; O9 q# V 77E6C50C 56 push esi& {0 E0 k3 [" p t" a 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D' ^8 {6 C+ L' b/ [ ............................................................

# G( M5 f, Y! o

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

6 J9 [8 M; Y9 R! W5 O+ H% D( q ~

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。# r! V/ k9 ^8 \: s 77E63DFD 8BEC mov ebp,esp 4 \7 o: D- V" Y( K! a77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0 9 \+ `: `) T- e4 F/ O) C- h& y Z77E63E03 74 18 je short KERNEL32.77E63E1D3 k8 G& Q5 O% n 77E63E05 FF75 08 push dword ptr ss:[ebp+8] & g A, q- E0 }& R! z4 @77E63E08 E8 87FFFFFF call KERNEL32.77E63D94/ X$ d0 d/ w) c/ `: Y' I 77E63E0D 85C0 test eax,eax$ A; I+ J' ^- z4 F, E 77E63E0F 74 08 je short KERNEL32.77E63E19# Q' z! B8 m9 y* l- ` 77E63E11 FF70 04 push dword ptr ds:[eax+4]. z( |; b6 g8 E$ [- ~' K& U6 `7 H 77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW. I# R" z& t: Y1 Z/ x 77E63E19 5D pop ebp, w" N- f: r+ @$ w% b3 y+ [ 77E63E1A C2 0400 retn 4 # t2 z1 o$ x3 L8 @" G1 q........................................................................

6 y$ f/ B' K0 D6 A

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

! A) a+ T6 s( d# i: a+ Z. I& g

7次F9提示一个非法指令错误,Shift+F9忽略。' A; J# Z2 y0 l 0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C8018 D# N6 J a" j' v; Z k. p 0012BEFC 00B2D6C8 \pModule = "kernel32.dll" 6 Z5 m& {1 ~, r: b+ w8 j# N2 Z0012BF00 00B2E67C ASCII "VirtualAlloc"

& M- N: L8 G) b) ~6 [2 }

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E3 a" Q, J( L. Y U% s, i* v: f 0012BEFC 00B2D6C8 \pModule = "kernel32.dll"% D7 [7 v+ N; ^6 a- I" g1 t 0012BF00 00B2E670 ASCII "VirtualFree"

# N, x' e. W9 d& b- q) m

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

7 @3 L7 |. G8 e1 w$ E J% n

堆栈内容

5 l- o& d7 H; E

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B079954 ]: V/ F" b: b1 s6 Z1 B0 v- ~6 I 0012BC74 0012BDAC \pModule = "kernel32.dll"

6 z% w5 A( @3 O! ~0 q

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

+ B4 v4 f: l5 E

Ctrl+F9 返回。

% |( T0 {5 p' M" ?# e" Z' L% d

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA/ [) d: o1 [+ j; | 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 3 m, \; O8 [) h' q00B079A1 89040E mov dword ptr ds:[esi+ecx],eax) Q$ v( A$ [/ o( @$ n$ j 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]" f( n- g! r( a- z; G 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi" E* z# \) F2 a$ N" u/ W3 k5 M8 ] 00B079AC 75 16 jnz short 00B079C4# S* I5 r) f ?4 K# X 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]" L: m; [( z$ @' d/ j 00B079B4 50 push eax & D) z- u0 i2 ], w. p5 R* b& s/ J00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA; y! l o$ Q- c1 v/ _ 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]% W% k0 f+ G% Z/ l) d+ S7 ] 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax " h) ]0 b8 h% k/ U- d- _' ]; y3 b/ i4 i00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] . G" E& s4 K8 J V7 q! X+ \00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi # r& a$ M5 h* H: d8 I" N( u00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

& V) ~5 `0 S5 \5 i9 y8 y, {

改为

! I5 q8 w \* M9 v8 C! P

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA/ s$ ~0 f& b# P+ ] 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] . I z/ u2 d& K8 D: ^00B079A1 89040E mov dword ptr ds:[esi+ecx],eax 2 ~& J0 U: B* g2 f00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]! p5 o+ U" a# l X# f! _4 h 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi + J# v5 U8 R3 u4 i00B079AC 75 16 jnz short 00B079C4 6 J% b; i) [0 @7 F: f) c00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] 3 M0 [4 i9 h) q& b00B079B4 50 push eax1 B& }$ G9 w+ T0 _ 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA ( d3 Y# P+ f! [00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] , N, G, F0 _; M00B079C1 89040E mov dword ptr ds:[esi+ecx],eax$ _% u% d% m4 I$ K2 H 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] & D, o8 G( m5 T( `00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi4 G9 i3 x+ W( H* K# N! _% W! j 00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

- X. b6 K3 s; h+ T' b

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

3 A6 F5 C/ c6 d9 ]

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

: Q% Q# g1 @* j4 D

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里 ' e0 U {7 y3 m. ~1 f0 h00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54] ( D" p" @. y w2 m% H& @3 L \00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 . n( q6 g1 V$ w. b6 W00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4] 2 k. s$ u7 e% l8 ^00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260- `9 x) g/ N& ~$ l 00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74] - |7 Z. X; R( n7 w6 c T: U00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260: `- f6 Y) r0 e6 p7 } 00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30] 8 z, \3 G# z7 _4 W/ i1 ]00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260- I. S+ S+ n$ ]/ q9 H& F 00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

5 L6 r2 ^# L# [3 J* N5 Z

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

$ K3 I5 M6 y) m8 M

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

5 J1 T) p, v; T* b% `7 l8 G. L

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

! O- q9 Z3 S* I3 S

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

! _( \' v/ R( @1 Y# s1 k# G% t( H

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

! w- P, H4 l$ w! s

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

0 r, D1 |9 ]4 x1 O

77E7A6CF K> 55 push ebp //来到这里,F2清除断点$ J- m. D( O7 p& c1 X 77E7A6D0 8BEC mov ebp,esp. m6 u3 M& m. ?+ z9 ?4 @$ y* O4 w 77E7A6D2 81EC 9C000000 sub esp,9C ( I7 z9 n3 n; w5 L# g$ @3 B2 p2 R77E7A6D8 53 push ebx 1 B8 ?3 D' }# X77E7A6D9 56 push esi 5 D+ P4 J# v/ o! \- c2 A& n- e! e77E7A6DA 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 05:34 , Processed in 0.356195 second(s), 52 queries .

回顶部