QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 " x) G+ L) d% F8 ^0 W 【使用工具】 Ollydbg,Loadpe,Imprec1.6F

5 y% f+ `9 t+ j. O0 b4 t

【脱壳平台】 Win2K

5 t6 Z9 R2 k- S2 R

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

3 ?0 E' J1 W# w+ G/ H1 N

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

: i; G- W) v6 b5 h* f

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

! T0 c4 [( ?$ d; Q/ O/ N

【脱壳人】飞舞的T恤 8 V0 \* }4 W3 _7 x--------------------------------------------------------------------------------

4 n* X v4 @' ?6 z1 t! `

【脱壳内容】

: j i2 a, j( _

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

1 K/ i/ {: k- q

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

6 w' m0 S0 R; [

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

y7 N( ~2 F5 M D) k+ |; E' \* G

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

1 ~7 `5 g( j2 X! z& n7 P

00485000 按> $Content$nbsp; 60 pushad //外壳入口. T8 I# w* ~. h, H 00485001 . E8 00000000 call 按键精灵.00485006. n1 ?3 R8 w9 @, q. J+ N' H& t 00485006 $Content$nbsp; 5D pop ebp# ` [7 O2 B F# l 00485007 . 50 push eax5 F I3 _' y" S# Z3 T) c8 x 00485008 . 51 push ecx 1 s6 g6 V" f. u' c3 }00485009 . EB 0F jmp short 按键精灵.0048501A , {" }& Z2 w) O" Q.....................................................................

3 N9 m% O1 |1 |

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

0 ^" E) A' _+ i1 z( w$ {

中断

. ? {! j( v% L7 J

77E6C503 K> 55 push ebp 6 u% E% ]6 R1 b/ L+ M! p. I, h/ M; M77E6C504 8BEC mov ebp,esp 4 q: g/ A( W- R) X* M77E6C506 51 push ecx6 | H a+ s# n$ `& e 77E6C507 51 push ecx 4 _9 E/ ~# \ a F. A o; f- m% D77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0) f) G/ H5 i# B$ P! Y1 m! _ 77E6C50C 56 push esi & ^& d5 e$ u( m( z& a! }* C! _77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D ; U( j. F. v8 C0 b4 i! Z.....................................................................

1 r8 s% Q1 ?; Y% \5 H1 @

堆栈内容

Z+ g$ g/ D6 @. l4 p2 U

0012F574 0045C5F1 /CALL 到 OpenMutexA , Z; p, k* ~7 D5 T3 m0012F578 001F0001 |Access = 1F0001$ L; K- E0 z, ^( V- b' K8 U0 d 0012F57C 00000000 |Inheritable = FALSE1 D+ y9 u1 w, R) b( C. W 0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

$ N! n p! C+ { t- c" T

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

" C% J3 R) O# c* a/ J# \

Ctrl+G 401000

2 |, q( Q y$ ~2 G

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。 N) a3 b; J+ o$ S3 M4 k00401002 0000 ADD BYTE PTR DS:[EAX],AL, @. T; y3 @/ Y; f6 l 00401004 0000 ADD BYTE PTR DS:[EAX],AL2 y1 N7 b8 W; ], r; U2 a3 b0 V9 L/ l 00401006 0000 ADD BYTE PTR DS:[EAX],AL ' }" w& J H! j* C. ?2 O) o$ ~00401008 0000 ADD BYTE PTR DS:[EAX],AL 6 ]- o U0 x; l) T- y% w0040100A 0000 ADD BYTE PTR DS:[EAX],AL- o* j/ H/ @+ }# g 0040100C 0000 ADD BYTE PTR DS:[EAX],AL$ ?1 O! O4 ]6 B1 h 0040100E 0000 ADD BYTE PTR DS:[EAX],AL

/ t2 O1 o. k, X

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

9 @; F0 `& ]; ?: r9 f7 u" Y- V& z

00401000 60 pushad6 F1 @4 h, k0 @( h. ] 00401001 9C pushfd/ U6 X9 z7 U' q3 I0 ~ 00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140" 8 W2 `( e% f M, o00401007 33C0 xor eax,eax % L6 m' `1 j2 R00401009 50 push eax 5 A3 D* j& {; V6 H+ m( _! ^" W0040100A 50 push eax; \( ?5 W; T' u6 s" r+ h5 \ 0040100B E8 6D97A677 call KERNEL32.CreateMutexA . I4 P u+ b; U4 [4 u1 I00401010 9D popfd' o$ B8 N4 |2 b8 f( V 00401011 61 popad 4 l0 t9 H2 d2 \" K00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA$ e) `+ t6 G0 c+ Q: z ............................................................

" I3 q/ Z" P) a" o3 L% J: ^2 S

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

9 |' Y1 y# k' ~4 p; G

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

$ _3 J' h0 i, Z( C% S/ E# @" z

F9运行。

& Q1 l- C# |& [" m! `

中断

7 M: o0 D; }- t- e6 U

77E6C503 K> 55 push ebp //双击它或F2清除断点。 % i1 g9 v0 @4 d# [- N/ G, B0 d77E6C504 8BEC mov ebp,esp" L( w- D2 \, O9 d 77E6C506 51 push ecx 5 e( d* Q% j# g6 ~: q$ W1 o" D8 Y77E6C507 51 push ecx* ^+ [5 {* _! n3 U; r 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],01 ~- x2 r+ Q/ g& S6 ~% t% T 77E6C50C 56 push esi! k$ d# i/ K! |0 Y! q! I/ c9 P 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D3 I8 @; B4 u5 w" c' R1 [. l! u6 c2 D ............................................................

3 N. g7 ^0 Z9 d4 B( h+ g7 b, a

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

1 k0 F$ r/ Z& N

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。# p; Q. P$ t% U7 u: S 77E63DFD 8BEC mov ebp,esp- p$ t5 J M$ m3 V 77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],01 @: U5 _+ @+ ?. }& K0 r9 M. A 77E63E03 74 18 je short KERNEL32.77E63E1D : @$ B5 \. y" \, e0 J) c% u i77E63E05 FF75 08 push dword ptr ss:[ebp+8]4 [0 f( O! @3 Y6 D4 l 77E63E08 E8 87FFFFFF call KERNEL32.77E63D94 K" H2 V; L$ C" y( K$ I- u 77E63E0D 85C0 test eax,eax 8 p, K5 C B o. u! ?5 M. e* _77E63E0F 74 08 je short KERNEL32.77E63E19, B( Y, }$ y4 e8 J' T& M+ T# Z3 \ 77E63E11 FF70 04 push dword ptr ds:[eax+4] ' I! Z( H5 }. v$ n: M' Q! p77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW/ T1 o/ e) |9 ^& Z 77E63E19 5D pop ebp - s) ~* S, E' @77E63E1A C2 0400 retn 4- \7 Z/ `0 n% _7 Y! U; P% s ........................................................................

/ ^6 ~ i# N! g7 w! X- j- Z

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

r+ A# @/ a. b3 O

7次F9提示一个非法指令错误,Shift+F9忽略。 |# U$ T( g5 ^, a% }+ c2 [1 l8 B 0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801 ! s: I2 c) ?" p, r- i. ^8 j; U' D8 n0012BEFC 00B2D6C8 \pModule = "kernel32.dll" / a7 C& V1 ?5 v- F& ?5 f% J* D! j0012BF00 00B2E67C ASCII "VirtualAlloc"

5 _1 L6 b# J, A5 Y% H6 }

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E% J7 h$ ?4 z* h( k# {- ]; B3 ^9 c 0012BEFC 00B2D6C8 \pModule = "kernel32.dll"4 ]0 U3 t9 j3 w8 S& x 0012BF00 00B2E670 ASCII "VirtualFree"

, A" C7 @3 v& N- G& }, \

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

& _3 H$ T) ^) G1 L$ Q

堆栈内容

- X! U. b9 ]( g0 [! Z

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995 1 U7 F3 w6 P9 M$ C' a7 J- b' O0012BC74 0012BDAC \pModule = "kernel32.dll"

% P+ @$ T! u3 T% s+ t0 v

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

9 C" T1 @& r1 s4 O

Ctrl+F9 返回。

$ E/ a9 b3 B( b* b

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA 4 z/ Y# ?6 J5 R$ I8 G00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] ' s: r4 T/ A1 K. a3 C9 G00B079A1 89040E mov dword ptr ds:[esi+ecx],eax* E% Y+ ]* W) g, n 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0] - A+ g4 r1 v/ q2 ?00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi: N! L7 D* }8 f 00B079AC 75 16 jnz short 00B079C4" H2 G- o% E6 y" `1 y 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]7 B; B- U" ~2 |5 j$ I [ 00B079B4 50 push eax) h: @; @0 g" g7 [/ ^$ p9 L* Y 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA5 o, f" p# [( X% o. e9 | 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] / z, U& |) }" U1 d9 F# }00B079C1 89040E mov dword ptr ds:[esi+ecx],eax0 y9 ~. A$ z% x# h* K 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] s0 h1 l* h% A0 j4 C- o00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi & ?$ ~2 j5 e, b) j: k$ w00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

2 ]7 Q$ f- T4 {" K/ O$ d& A

改为

2 v3 H: }; s m

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA& m4 l) C6 Y% M; N5 L" V 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]8 K' n" e( }. l0 j, r2 U" a$ B$ O 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax& [5 N( U! o# a9 u4 ]- `& B& ~ 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]: p; Z* J/ ^* K& @ 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi / \2 \9 y# i4 _1 ]* T. x5 d00B079AC 75 16 jnz short 00B079C4/ J6 d* n2 ~$ D) u$ P a 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] 3 s6 K8 P& ?* M00B079B4 50 push eax; V6 \# |( u2 k3 l# q 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA w5 P* K$ M/ H, d! ? 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] ' f& a7 }/ [! i: d: C: b0 g00B079C1 89040E mov dword ptr ds:[esi+ecx],eax. i) p( W# X, [1 } 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] 9 m' r' B! j/ Z: `4 [00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi : n! L& f& @: E8 ?2 ]00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

6 w+ U5 q- @- i' `( l' M

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

$ v, L2 C% X- { y5 w# g

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

- f, k7 x+ b W: R+ k4 c- a

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里 ) }1 p8 U" G4 e: D. t00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54] - e/ y I ]4 C00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260( a; `; e. p' @5 g- i) e 00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4] & A# y0 O% c$ W; ]/ E. {. r9 P00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952605 r* @4 @/ ]2 {# I" E 00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74]! n: {! l' [1 o% S! B' b 00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952602 k! q7 X9 |7 O" D 00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30] 0 a% S2 e9 m2 Y2 b/ F00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 ; v/ l- f X$ S& J1 S00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

. X3 O/ o/ m) V2 r7 [

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

. |4 H+ L7 f6 v7 t: L$ @

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

$ W9 E: ?! \ |9 F- R. }+ u

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

, e- R; j1 J( U: k

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

( H$ \- O! w) N

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

. H9 s4 o) F: d$ T

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

& |/ v& D8 J1 n9 H& e1 k$ E& ]

77E7A6CF K> 55 push ebp //来到这里,F2清除断点 + y+ }, o1 R* c; s9 `5 N; t% h77E7A6D0 8BEC mov ebp,esp 1 k8 x( @. ^1 p' d2 i. h2 o+ j/ }77E7A6D2 81EC 9C000000 sub esp,9C 3 a% H( D* r" Q- V1 b4 ~77E7A6D8 53 push ebx9 a, Y8 i8 l1 z. \ 77E7A6D9 56 push esi 7 O9 a% ]9 u3 U2 e2 w77E7A6DA 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 11:08 , Processed in 0.549919 second(s), 52 queries .

回顶部