QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 & e( c( T6 _$ X【使用工具】 Ollydbg,Loadpe,Imprec1.6F

: S* T% r" U5 b, I4 u, x) I- f

【脱壳平台】 Win2K

4 O4 }( m0 j3 D. g1 d4 p$ ?

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

" b6 ?, h# J) f- g. R9 y

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

9 k; H) M* ~6 [, b. S( I

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

5 B, C' Q6 v' t8 ~ z; |9 `1 \

【脱壳人】飞舞的T恤 2 D& J( ~9 y: a--------------------------------------------------------------------------------

: y: e, _7 c# \% m8 v2 I# [

【脱壳内容】

; O0 W9 R5 b ?( _8 O4 Q4 w" p

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

C$ x. x1 l6 V. N2 n4 ^8 K* X

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

# t) u& x9 p( x4 d8 p: R

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

2 V3 j8 N% g8 G* t4 Y1 ^

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

0 Y0 w: u, _7 Q: P9 b0 u

00485000 按> $Content$nbsp; 60 pushad //外壳入口5 v+ [$ \% t6 s9 B 00485001 . E8 00000000 call 按键精灵.00485006 ( M# s$ X C' h4 F. ?00485006 $Content$nbsp; 5D pop ebp4 h4 _ T; Q @4 I- {" n+ ^ 00485007 . 50 push eax+ k6 W& F' X5 Y; K 00485008 . 51 push ecx+ Q$ ?4 t8 e% r5 h- v 00485009 . EB 0F jmp short 按键精灵.0048501A # u- D+ W, u) `( ]5 q: Y% [.....................................................................

* I5 ]) {* h2 u3 U& c

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

; I. I! p* y+ N+ i- |$ g3 w) Y6 [

中断

/ [% M' q0 E" ]8 q2 s' w' h* R+ M

77E6C503 K> 55 push ebp) u* S4 a2 M# ~ 77E6C504 8BEC mov ebp,esp6 ?9 J4 Y5 G, O% @9 w 77E6C506 51 push ecx6 S) G) o2 p' P9 G/ g. s) Y. m7 ? 77E6C507 51 push ecx- r3 C: g8 n8 l: L" g 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0; t: ]7 r) l# O# K 77E6C50C 56 push esi 1 U6 V8 n. e- }# e' Z. c6 j5 y77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D ( D# ~# z R+ D0 C1 d' e; B' S.....................................................................

' R) q, b B: n3 C

堆栈内容

: D' c% i& A: T, W4 B( h* m% \

0012F574 0045C5F1 /CALL 到 OpenMutexA9 r6 j1 g% Z7 i3 h$ @, G: Z 0012F578 001F0001 |Access = 1F0001( ^! R8 a/ B3 W" [ 0012F57C 00000000 |Inheritable = FALSE# U6 {9 s& e# r$ | 0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

9 F7 B" N6 C' R7 |. w; J

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

+ p/ E, p# p' p: ?, ^( F n

Ctrl+G 401000

: g0 H7 O! {' @" o

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。! |6 V3 J5 [1 A: `: B' { 00401002 0000 ADD BYTE PTR DS:[EAX],AL7 A4 Q6 ^5 d/ U7 b4 }) [- f; C 00401004 0000 ADD BYTE PTR DS:[EAX],AL ' C' o9 Q, g/ U00401006 0000 ADD BYTE PTR DS:[EAX],AL" i4 F8 W# R7 B 00401008 0000 ADD BYTE PTR DS:[EAX],AL - |/ j4 a6 Y9 o* ]# ~* H% c0040100A 0000 ADD BYTE PTR DS:[EAX],AL 1 l5 ^, O5 Y/ O) v0040100C 0000 ADD BYTE PTR DS:[EAX],AL& D) C. f3 E9 h' j6 v2 h. M 0040100E 0000 ADD BYTE PTR DS:[EAX],AL

0 ^: r: e5 t$ ]/ y( z ^: x

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

: y" Q& U+ T: e4 E* K

00401000 60 pushad$ [" J! U4 \" E1 p4 Q( T 00401001 9C pushfd ) \4 h. S3 E# f00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140"6 C0 U5 x$ a( x" b" f3 d 00401007 33C0 xor eax,eax ) g, d1 ^' N6 n! Q% p00401009 50 push eax ; x# R" y& m" o5 c/ d1 p* V0040100A 50 push eax8 I2 d5 C: D% l- b% V: x% k 0040100B E8 6D97A677 call KERNEL32.CreateMutexA! e! Q6 ?8 s2 J# z) i; N8 d 00401010 9D popfd% M5 V/ I$ o, A& N- H; D8 l, {+ t' v- P 00401011 61 popad : M7 w- W$ E4 i- R- P) U00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA ! `. v: F) z' F( D4 c0 D- v. G2 s............................................................

% Q$ j* `0 p+ L

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

7 Q" ]! V8 [; Q

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

{5 a9 z, `$ } P

F9运行。

1 Q9 {) u# t$ O$ B1 b7 ?4 C- i

中断

# f9 E! M5 j/ C" l- J4 |

77E6C503 K> 55 push ebp //双击它或F2清除断点。 - ~6 o% b/ D$ N# w# O( R8 z8 K5 Y77E6C504 8BEC mov ebp,esp % \" z9 [; c) \' n X( w77E6C506 51 push ecx [. X4 Q; q2 ]) V/ b 77E6C507 51 push ecx9 e. J! f( M! X% {( I+ u 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 $ b; L: d! G2 G1 F77E6C50C 56 push esi 3 M2 p/ I) i' ], A77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D Y* p) O7 B1 i) J: p* z............................................................

% {4 s9 l1 |* C( J+ G1 A9 O8 a! g! N+ n s

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

4 D; t, ]6 P1 V" y# T3 A

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。: G& s% ^1 W/ Z, r- @) B 77E63DFD 8BEC mov ebp,esp' u- r$ l& k+ ^/ ~+ B& \$ l 77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],06 z$ n& o% I0 B0 I6 @9 D 77E63E03 74 18 je short KERNEL32.77E63E1D/ P) t6 |# a9 F0 W5 d* E5 N7 @ 77E63E05 FF75 08 push dword ptr ss:[ebp+8]' z. \/ Q6 A1 n/ ]8 s# l" Y% Q 77E63E08 E8 87FFFFFF call KERNEL32.77E63D94: H6 @% |6 w: V/ Y# t @; _ 77E63E0D 85C0 test eax,eax / s' [# x& W# Y, P8 Q5 U) T77E63E0F 74 08 je short KERNEL32.77E63E19; v, Q: e" a# N( a 77E63E11 FF70 04 push dword ptr ds:[eax+4] $ b) H9 _4 s' y$ ]7 p+ \1 p77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW 0 g0 g; I0 I5 o4 A* W6 K T77E63E19 5D pop ebp v! W1 X$ o& j# ~6 x 77E63E1A C2 0400 retn 4! e# f& z0 t$ _- ` ........................................................................

$ r/ e/ s% L+ b- I/ \% B: [/ z

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

6 X; ]6 C5 c6 H: K

7次F9提示一个非法指令错误,Shift+F9忽略。* _; A' k' x+ a% S x 0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801 ! t( S7 O9 U9 [: `0012BEFC 00B2D6C8 \pModule = "kernel32.dll"$ H8 A; j O# l5 w, i$ J. v7 B 0012BF00 00B2E67C ASCII "VirtualAlloc"

8 }* }/ y6 G8 h& U8 H

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E' k `) x! m$ d9 ~( I 0012BEFC 00B2D6C8 \pModule = "kernel32.dll"5 H! @; ^6 B6 k7 V z# [ 0012BF00 00B2E670 ASCII "VirtualFree"

4 j; j5 e4 Z+ O$ \: o6 H

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

. k, b4 U' M0 L

堆栈内容

6 n$ S! _2 O, _

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995, \: ]+ w2 t0 Q* Z6 U3 w 0012BC74 0012BDAC \pModule = "kernel32.dll"

% E, \; j9 h9 I/ C, S0 b( P2 E

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

9 w* x8 a6 X9 ~) z4 `9 P7 O) C# N

Ctrl+F9 返回。

+ H, s' e+ U" W b2 [5 P, a5 P- I

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA" ^/ W0 ]. z+ ~- e 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 2 |" D- b$ y @3 {- ]) L% |9 L00B079A1 89040E mov dword ptr ds:[esi+ecx],eax . P7 n! x$ S# u3 t% Q. O00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]5 p# ^- H! Q, o! L, E" g( o 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi* q( _2 w/ }& k, J4 J# I) O 00B079AC 75 16 jnz short 00B079C4 $ q2 O$ v l2 i! _00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] 0 G& l; G A/ y' i2 @: ~+ q4 |00B079B4 50 push eax6 F+ j( E3 P4 h# [ 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA# Z9 n6 k1 P, F 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]+ d7 x& X! L* Q8 \) @. o. c+ a 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax + F8 k: E( F/ `00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] ! m- d9 U) Y: U6 m% C00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi3 S# K) o* _$ u! b 00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

: ~8 q9 g S: q* h4 l, B

改为

a; x) ^& w4 w( R3 b( ~/ M+ I

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA3 x: c \8 a2 a' A 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] / } K* A' H8 j00B079A1 89040E mov dword ptr ds:[esi+ecx],eax b; I! Y5 @3 G( t# s$ ^ 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0], _+ c( N3 _8 f/ D6 W; q 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi 8 V; p2 w0 x! M9 n- _1 B# V00B079AC 75 16 jnz short 00B079C46 n5 _; h: S0 w/ u j8 @ 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] ( h" c; \% v- J4 r- T. z3 p00B079B4 50 push eax/ `8 H+ u# l+ _7 C. t 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA+ _2 q) {6 Z3 X# u; }8 V 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]" D& q0 V' r- U4 V! X, g& j* P 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax+ T7 ~: E8 m0 U* ?+ @# N/ @ N6 m 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]+ j, r7 b4 Q7 ^- R1 n 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi $ O' d% Q, F: o0 [: h00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

8 A2 E Z% q% n9 v" i& ^

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

. s! F% ~7 u: z4 @% ^

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

& s/ y( K! R! h9 `+ y7 t1 k

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里 3 G' {0 P" u) b1 g! k00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54] 5 h* g+ l. E/ I j00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 1 x+ b* b$ G. Y* g5 I' }00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4] ) l2 _: H. L6 }9 x+ w00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952605 H3 a7 F9 V6 }7 Z2 G9 [ 00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74]* L. k; B/ }, g: T* c4 i; Q 00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 4 i N% U0 t+ F2 G' @! G00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30] 4 Z8 @* a9 C! f1 i00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952606 ?7 q( L/ |- S* \. ? 00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

X& t& b% n k' Y. l

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

! [9 i! T7 T, v

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

) J$ f' z7 Q/ T2 C2 O: i

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

5 x0 ^% ^' p, x( K) N$ M

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

) e, L6 S! x$ S

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

5 @& X3 j7 O( h- B5 q6 \

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

3 `/ ?5 G4 U6 _+ V

77E7A6CF K> 55 push ebp //来到这里,F2清除断点 ; N6 `/ M; h# G, t/ G' _/ q9 K77E7A6D0 8BEC mov ebp,esp ) u9 o& p' Z$ x- T77E7A6D2 81EC 9C000000 sub esp,9C* Y M6 |* T4 P+ Q; U( ]' ~) I 77E7A6D8 53 push ebx0 U, k: ^/ D# q! V0 V0 D 77E7A6D9 56 push esi% B2 v6 h# E. p3 ~ U: A 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 09:46 , Processed in 0.441766 second(s), 53 queries .

回顶部