QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 8 A+ T0 K9 O1 ?0 I2 t; o) I【使用工具】 Ollydbg,Loadpe,Imprec1.6F

. d' j1 ?1 C+ M/ C

【脱壳平台】 Win2K

9 r0 P( k+ R9 U$ W

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

+ n- m" R0 R; H5 g

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

$ g" Z! j* ^/ W0 X

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

1 C$ k+ B) B8 t& M/ W* b

【脱壳人】飞舞的T恤) f: s. B; o. E" V5 S7 ~2 q# V --------------------------------------------------------------------------------

5 _8 W' L+ w5 e: O

【脱壳内容】

# r6 k5 [5 Z" v0 C+ |. Z

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

7 j- `5 R- T+ Z0 i$ m

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

5 u: J. U7 S' F

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

+ O( H& M- e/ P2 t5 @7 z

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

& W v+ n8 I5 r4 e9 ^- R0 D6 K

00485000 按> $Content$nbsp; 60 pushad //外壳入口5 [, i9 U* W+ |1 }9 `. b+ L7 g+ ~ 00485001 . E8 00000000 call 按键精灵.00485006* @( z: C5 N3 M9 A 00485006 $Content$nbsp; 5D pop ebp' e1 d" V9 J7 k2 T! {0 L. ]: {8 { 00485007 . 50 push eax1 q$ v5 }' n* {3 d V4 v 00485008 . 51 push ecx 1 r& ~4 S6 k- [00485009 . EB 0F jmp short 按键精灵.0048501A6 H4 l* s, c4 c .....................................................................

2 N% Y1 X) K. }3 T6 k# r# N

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

7 p6 J4 t8 ^+ ~, _

中断

5 D9 X* J# m% ~% g3 {

77E6C503 K> 55 push ebp* l& {3 d$ D, V, ~ 77E6C504 8BEC mov ebp,esp7 o$ P# R9 Z& \5 b% H 77E6C506 51 push ecx $ N: `9 P X+ q) H8 }77E6C507 51 push ecx! c; a7 w, `2 o5 j3 h- z 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0# E4 G2 P. f& ^/ \) P 77E6C50C 56 push esi1 y. I3 @' s( h# ]) }: \ 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D # ]# V' j. }( R.....................................................................

+ d* E! b4 N3 O% d, M

堆栈内容

; @" R" A- y( h" l( R: D. v( j9 ~

0012F574 0045C5F1 /CALL 到 OpenMutexA* _) W) S3 I1 y9 K 0012F578 001F0001 |Access = 1F0001 2 M& [9 |' N- M& c5 ^8 @0012F57C 00000000 |Inheritable = FALSE! s/ v# B3 }" Q8 E1 f; N/ \ 0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

8 W; R1 ?6 q, d

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

O2 n5 O; u! }9 p9 M& t! F7 n

Ctrl+G 401000

% ?( S0 n( E+ K; e

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。 + R, z+ b, d! V! [/ j ^, a00401002 0000 ADD BYTE PTR DS:[EAX],AL 7 H C& R; d+ Z( a, I, [8 L8 N00401004 0000 ADD BYTE PTR DS:[EAX],AL f! B6 e2 @5 P! g0 y7 J00401006 0000 ADD BYTE PTR DS:[EAX],AL8 ~$ Y( ]: V) b2 U& h 00401008 0000 ADD BYTE PTR DS:[EAX],AL 0 C. u8 w1 p/ r0040100A 0000 ADD BYTE PTR DS:[EAX],AL( B& n/ I+ y' z7 V. \9 y H 0040100C 0000 ADD BYTE PTR DS:[EAX],AL! `- O* T# u# S 0040100E 0000 ADD BYTE PTR DS:[EAX],AL

8 j+ w1 o$ T9 i6 O& ^! l# ?

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

, k: e' u0 z0 b; L* p- K8 U

00401000 60 pushad " d! @/ o2 u+ @9 {00401001 9C pushfd ' x$ i* c6 d! t$ S) F00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140" . w: X f/ b2 |$ a00401007 33C0 xor eax,eax' f! W, [( g' f5 V. x* F+ B 00401009 50 push eax + m c( D8 |7 X+ ]+ i0040100A 50 push eax& z9 E6 l N) s) X/ R 0040100B E8 6D97A677 call KERNEL32.CreateMutexA - ~5 b5 g8 x& r, J3 C" v- s. \3 _00401010 9D popfd; D! i; {" L1 W# h& c8 U( d 00401011 61 popad ( w; O" m; M2 O! y( i1 `8 W/ r; U, C5 V00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA. U( [6 Z& u, l ............................................................

2 [9 ^; W+ H$ J4 W$ X

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

~1 [: H; g/ E$ |

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

5 T) G* d1 d( y0 s3 p7 F

F9运行。

$ O+ N. c8 Q5 Z; s2 {! ~

中断

2 K2 ?. B' D% @- I' `: L( v, J& x; h3 e5 b

77E6C503 K> 55 push ebp //双击它或F2清除断点。 / `; p+ h8 m+ t77E6C504 8BEC mov ebp,esp/ N* [/ S9 y0 k, w4 v 77E6C506 51 push ecx # @. g& e2 o8 p* S& G( K1 ?77E6C507 51 push ecx1 s9 k( K* X! |9 B- Y& [2 ~ 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 ; e: L# V8 ?+ M$ x77E6C50C 56 push esi- v; `5 E) X* w, Q- \ 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D/ ]7 _2 \$ Y0 R; m: s ............................................................

- t8 y Y& S$ R% v9 w" x: z2 k- y

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

H+ y; L6 A+ q; f

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。% }5 `6 R1 E- A# Y9 F) L 77E63DFD 8BEC mov ebp,esp, B# j1 A. ^" Q; a3 V- ^5 d5 v1 g0 X 77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0* x# `" `- R: s% i S9 K: A 77E63E03 74 18 je short KERNEL32.77E63E1D* R# E; i8 a8 z0 y1 R3 M 77E63E05 FF75 08 push dword ptr ss:[ebp+8]9 r3 |5 c. t; n3 d0 Y/ W 77E63E08 E8 87FFFFFF call KERNEL32.77E63D94. s: J( y4 U/ a$ ~2 p8 D 77E63E0D 85C0 test eax,eax & P7 f8 f# y5 e( G. _: d77E63E0F 74 08 je short KERNEL32.77E63E19. N; h- z3 B: t9 ?& J 77E63E11 FF70 04 push dword ptr ds:[eax+4]2 r4 O' Q" v+ D3 Y# O3 } 77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW0 M5 C- }7 Z- Z# E: q& I 77E63E19 5D pop ebp4 u+ O" u8 y% s$ R& h+ u 77E63E1A C2 0400 retn 4; Z L9 _9 Y9 o9 j; y ........................................................................

B5 l" q$ w2 y; b. X

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

) Z! Y; @( L R% q: `/ \& S

7次F9提示一个非法指令错误,Shift+F9忽略。% B/ N$ |2 k6 U4 k& j9 q% u1 ` 0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801* C, q6 W) z( t. n' O 0012BEFC 00B2D6C8 \pModule = "kernel32.dll"# s& Z! Z( k6 t' t) A 0012BF00 00B2E67C ASCII "VirtualAlloc"

+ W' d( X% i8 f" X! T: q5 E

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E( V# M. Q4 _2 Y( e# Z: m) S 0012BEFC 00B2D6C8 \pModule = "kernel32.dll" - E, S3 ~5 Q2 e0 u3 t! E7 v, [0012BF00 00B2E670 ASCII "VirtualFree"

) o& h2 P! R% q

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

' X2 ]2 }. _5 p8 V5 S

堆栈内容

# Q6 R- [, ~* w1 `2 \7 V

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995- b4 s) f y2 L: d% q 0012BC74 0012BDAC \pModule = "kernel32.dll"

/ ^2 Z3 I8 a" o

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

; q& K3 o( s O: v& e$ x

Ctrl+F9 返回。

! u2 G3 E& Y: c; r- T; P* ]2 L2 n4 w

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA4 {# D: l. J L8 R 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]9 M4 a6 t4 S, n 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax 3 x1 `" V, }; J00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0] , l$ S/ D- F3 |/ n u1 \( s2 ~' ~00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi 0 _& t5 w, G, V( e- y% [00B079AC 75 16 jnz short 00B079C4 ! Z- K, a1 T# J/ R% o/ j- a00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] . a i0 e. F# {00B079B4 50 push eax+ M" H: n* Q, a 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA5 J* v' `* Y; u6 O 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]$ ?* t7 E$ {- M/ J- k: f) Y$ z 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax $ m& `2 \. |8 j00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]7 [3 v: Y: ]! A, Q, ]2 G 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi" e/ M3 X" t5 k1 X+ _# W& @ 00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

+ @4 I7 W" s4 r3 k& G. B3 b9 b1 g% M

改为

2 O* p# F z* m+ v- X8 { z) a

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA6 C. b. D* [* l( K* e 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]/ F) [3 Y$ @& I/ K# v9 O. C+ F 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax4 m. `- f5 X: q4 j, u5 ]. { 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0] 8 C6 ?0 Z( g6 B, \/ b+ Y00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi : k5 O3 g3 K, O- ^! i& w; ?00B079AC 75 16 jnz short 00B079C4 1 [: S* z. S8 w9 i8 h00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] / X9 {) [( i' T4 K0 ^6 G00B079B4 50 push eax) Y0 c( O: P: C- ?0 O6 @ 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA 5 ^) N, h5 a3 m$ d$ \00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 8 D0 o& }* j; k0 B4 I' A7 D00B079C1 89040E mov dword ptr ds:[esi+ecx],eax$ C' w% @0 ?1 Z/ O# N 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]3 a+ T, h5 D- _5 Y 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi0 C. c& C5 _7 o/ R% w x' ~3 l" y, x 00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

# l$ y9 A' z w

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

6 c; F# _8 k/ N& Z7 k( \1 E3 u

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

* Q+ y7 r. `9 i8 \

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里0 J/ O- ?. L$ B- c# Y' ~# K 00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54]( u) `, E0 e# L* Q 00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952603 w# x t# f6 b q 00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4]- @7 K( c! Q1 W' d 00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 ( d9 Z1 d! n1 n2 x00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74] : o' }6 Y* `) U, |0 v/ n/ K00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 : ^ {% i: o0 N* P00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30]1 W( N: Y. k! x, p- x6 b 00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260; o0 n: V9 `' S8 U 00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

0 V5 o4 l5 T5 E: V, e

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

/ Y5 }1 M/ W3 ^8 m

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

( H7 Y3 t: q- O; ?6 R

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

, O9 }7 d! y- f

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

6 {! ~+ q( I: q5 D$ Y' P

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

9 p" z2 a3 U& T+ W, X, d

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

( F/ t8 Q& g5 f2 g

77E7A6CF K> 55 push ebp //来到这里,F2清除断点 : H/ k; j, d' f77E7A6D0 8BEC mov ebp,esp9 o$ k K1 [9 m* `5 y' i+ M: E5 ^+ n 77E7A6D2 81EC 9C000000 sub esp,9C " x d( e* n; i9 ]77E7A6D8 53 push ebx & C0 R: ?4 U9 V5 z* s) N N8 j- ~77E7A6D9 56 push esi . U: j$ g, V. L77E7A6DA 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-20 06:02 , Processed in 0.447871 second(s), 53 queries .

回顶部