QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 " j6 r6 n9 ^. K9 u' H 【使用工具】 Ollydbg,Loadpe,Imprec1.6F

! k6 W9 D, E9 Z8 P" a

【脱壳平台】 Win2K

2 C# N% u a- N: K& y) ?! a

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

' @, M9 R u- V! P5 I! ~+ h

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

2 [9 ]1 A& ~. g Z$ p

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

b. r" F8 x" Q

【脱壳人】飞舞的T恤 M9 m4 R" @: b9 n--------------------------------------------------------------------------------

3 [! y; {+ \: G9 w `0 B

【脱壳内容】

2 _6 a) r! `6 Z* ^6 I7 Q: _

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

# l2 F0 S) p e6 Y6 K

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

2 Z' f; C# M p

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

- v, ?! v' `' [/ v+ u' a q

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

) w9 C; s5 X# U

00485000 按> $Content$nbsp; 60 pushad //外壳入口 ) l4 c' c, j1 t! c00485001 . E8 00000000 call 按键精灵.00485006 # \% q. O3 W) I- c# I) E/ s00485006 $Content$nbsp; 5D pop ebp - w: h0 d0 W( d00485007 . 50 push eax % G. q8 N; T% ?0 Z& V! m6 O' Z7 b00485008 . 51 push ecx, a% {" g, d- @ 00485009 . EB 0F jmp short 按键精灵.0048501A s H& }' }, B9 M! C3 { .....................................................................

6 a [% m- B3 A3 k# k% T9 a

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

. j# |5 Q4 S( h7 Q1 C

中断

5 B4 Y( @% _- n8 w M* `

77E6C503 K> 55 push ebp k5 N& j; f# _9 J4 b+ e77E6C504 8BEC mov ebp,esp 0 g4 \* |" {4 G; L2 ]77E6C506 51 push ecx: _) s. [1 g( z/ c0 Q4 E 77E6C507 51 push ecx . Z, L- }5 v+ }$ B6 {77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],07 [+ s1 T4 Q% w: K j' C- ^ 77E6C50C 56 push esi r) F" b5 \5 [* x77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D4 s9 {: i: I# o- Q/ ]! I .....................................................................

0 N& h8 R; l, E& X2 |; y& ^ o d

堆栈内容

" f4 Q* M( D) c4 a

0012F574 0045C5F1 /CALL 到 OpenMutexA 1 W: H. P5 o( g7 G+ q, C) A0012F578 001F0001 |Access = 1F0001 u/ U2 C+ M! A" D( [0012F57C 00000000 |Inheritable = FALSE4 D# d7 r# A, |7 f T 0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

4 a: t% H" f" I

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

7 q% L I$ j) P+ F+ P6 I# L

Ctrl+G 401000

: a+ `) M, a$ f4 C

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。1 }7 S X/ e: \. x& ^& T 00401002 0000 ADD BYTE PTR DS:[EAX],AL3 d' k4 N% w3 L7 k# D, e2 l 00401004 0000 ADD BYTE PTR DS:[EAX],AL . s# B+ Q# k( P# M& @4 a00401006 0000 ADD BYTE PTR DS:[EAX],AL" \. T; X$ m! a% T* ? 00401008 0000 ADD BYTE PTR DS:[EAX],AL9 `; e. I: L4 l5 Y 0040100A 0000 ADD BYTE PTR DS:[EAX],AL& z% H% y% ^* f" ?* s5 n( j7 v- M' h 0040100C 0000 ADD BYTE PTR DS:[EAX],AL- L4 w0 J( }. ^3 Q 0040100E 0000 ADD BYTE PTR DS:[EAX],AL

0 m1 S5 N% U+ y1 Z

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

6 J% a4 |' r$ ~- e4 `( \; x; a

00401000 60 pushad , w# k/ L. a6 k0 u00401001 9C pushfd 5 q# ?+ s8 y4 T9 U00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140"( o2 i" ~( r: p4 Q" L, ? 00401007 33C0 xor eax,eax - L# C) v/ @3 m/ }7 }2 k, `+ w3 y ~# t00401009 50 push eax( f' I% Y2 R/ T1 o; R 0040100A 50 push eax1 z" a6 m2 U5 k+ o; h8 Q' k 0040100B E8 6D97A677 call KERNEL32.CreateMutexA ( M1 c- i' D$ x5 c9 o2 ]00401010 9D popfd - g% @8 s+ a+ |# [4 F00401011 61 popad % T/ p6 _2 T ^3 R) j) L0 X9 Z6 Q5 Z00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA , j" Z/ f; `7 N! @0 c8 } o............................................................

& ~2 {2 _* Y. z, H/ d4 ]

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

4 _! o: V7 G/ d5 | G0 [

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

4 c v/ n' Z) v: M/ r! g

F9运行。

" Z8 y7 [8 y4 K# {, t3 d

中断

* b) F2 ]% ]! \

77E6C503 K> 55 push ebp //双击它或F2清除断点。 5 Z) j5 O7 U9 X& M0 U: m8 Q77E6C504 8BEC mov ebp,esp) K0 h0 Z' Q! a# } J' P 77E6C506 51 push ecx, f7 w+ h8 ~6 | 77E6C507 51 push ecx % {. J0 R: e5 p77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0# @0 E- ~& S2 f& j6 a3 q% f 77E6C50C 56 push esi4 N/ m8 ^4 l$ X2 ^9 r% Q 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D ! P' J' W4 n" S/ S; x............................................................

' b" u7 \; ?( U# P7 g; _1 f3 i

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

4 V$ g3 v. s9 u' [7 S

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。 . d9 U7 L+ }/ k( [2 J4 S9 i77E63DFD 8BEC mov ebp,esp+ D: h3 a% _6 N* a6 T6 O! `- g 77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0 a* p2 o2 U6 I x+ ] 77E63E03 74 18 je short KERNEL32.77E63E1D 9 B# P8 ~( m! l2 F' z( V77E63E05 FF75 08 push dword ptr ss:[ebp+8] ) w ]& F l5 N: {- m77E63E08 E8 87FFFFFF call KERNEL32.77E63D94, ^- M, h% p# ` 77E63E0D 85C0 test eax,eax 2 r7 R+ w1 h' ^6 k% u0 K77E63E0F 74 08 je short KERNEL32.77E63E19 ( d6 f- ~- Y, w# R; R' k- q4 V' W) l77E63E11 FF70 04 push dword ptr ds:[eax+4] . t2 v5 P3 G- |3 U5 I& c B% i77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW) d. v' x" t% ^ 77E63E19 5D pop ebp7 d, N) d9 t# }7 u 77E63E1A C2 0400 retn 44 k( g( d- J( t' b9 @' f9 h3 Q ........................................................................

8 c' }% L8 x9 v( n: T/ U; M

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

7 X5 _, l( D! |4 D

7次F9提示一个非法指令错误,Shift+F9忽略。 + {+ ~ d) S$ s# l$ x n0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C8018 N5 Y0 I* _: } 0012BEFC 00B2D6C8 \pModule = "kernel32.dll" - |% b& n! `- \% x+ X/ r0012BF00 00B2E67C ASCII "VirtualAlloc"

# j/ q8 l4 {% N' l1 Z; w

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E0 w7 ~7 N* F( W3 U 0012BEFC 00B2D6C8 \pModule = "kernel32.dll"1 M' j# z w4 @ b2 {7 S# D# T 0012BF00 00B2E670 ASCII "VirtualFree"

* A: \' {3 m$ [ i6 F

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

8 M; P- q5 X: Z$ i6 Q

堆栈内容

' ?3 |# Q) s( I! o& q: p9 p) P5 N `

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995 6 L( \& ]8 K, r. Y2 n' v% M) Y0012BC74 0012BDAC \pModule = "kernel32.dll"

* @- \1 T& G v5 q& _1 x6 A8 U

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

' w& h8 l4 D- F p( L

Ctrl+F9 返回。

! I* C* j4 Z9 V4 B# ^) _2 |$ \% Y" ^

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA5 I' B9 V [, U 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] . Y# p) Z6 u" B% b4 L00B079A1 89040E mov dword ptr ds:[esi+ecx],eax7 f3 p7 y3 c5 a6 v( z2 `( P 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]0 [6 F+ P- }+ t# E 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi$ W4 Q C% A- W* z 00B079AC 75 16 jnz short 00B079C49 j( R9 F5 M5 s9 |: ` 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]; n* _) J# p4 @ 00B079B4 50 push eax3 N* G8 G3 w; _ 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA % O: F/ Q# X1 K; Q& G+ o9 ^0 v00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] : |6 [$ K: G1 B* ~* y9 I/ [: h `00B079C1 89040E mov dword ptr ds:[esi+ecx],eax4 Z& _/ p. X+ S& u 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] 7 y; }% g! v: j( H/ ~! A00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi! ~) L3 O# {3 `- x( C8 s( t/ M$ s 00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

y( K$ O4 m# G. ~

改为

0 ?- t* C! }, B

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA1 a$ r% E& N; x+ n" q$ `4 a 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]/ s, F- X* R5 p# b2 v) x 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax3 b( _; l, M# j! c- v 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]' @0 y/ e; X* M5 V0 @ 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi; C! N( Q- y0 h+ l# A 00B079AC 75 16 jnz short 00B079C4! i! d, c- T* F9 } 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] 3 p6 B% L6 c: F4 S( K1 I* V00B079B4 50 push eax , g& l7 m6 \' |" Z00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA+ d! a: g6 j* Z1 d0 v! J! F 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] - m3 a: M. g# R: g- p00B079C1 89040E mov dword ptr ds:[esi+ecx],eax ( t% X* Y9 y. i00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]- b+ J3 k2 F! A$ E3 U' z/ O/ X 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi1 y. u. D& x& u( G8 ? 00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

6 G9 W f9 s2 `, m

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

: J" S6 \1 u: R0 q2 X3 z& j; Z

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

0 [( {' W. r# `. V( D( c5 k# O

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里 # N; p$ I1 Z" E- |00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54]& _- A9 M: V- Q7 {3 @$ T3 K4 J! j4 F 00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 5 E0 H; u0 V" d. A, U E% b2 o$ y00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4] 1 X8 V7 X: u9 W! F/ x& ]00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260( T- g1 R7 z/ ?2 u9 n5 k 00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74]2 C5 D+ D8 I+ D+ z5 N, {" q 00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 3 ^& y6 h/ t. ~4 X- _00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30]7 A/ O8 Q# @ x 00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260) Z4 S/ [( y- d$ o) g/ F 00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

8 d5 X1 n. ~9 x+ n @ O

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

6 ?6 y* ?) K {) ?' p$ A. O

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

/ t2 ]; Z6 Y5 s. K

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

2 u: ?! j% s- T1 A# p

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

4 k6 q) n( Y- W$ q9 F# W! K

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

1 H q1 s$ j6 p7 P

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

' |. k) N0 r& M5 P) R7 L0 }

77E7A6CF K> 55 push ebp //来到这里,F2清除断点2 M- Q* J) l$ m- p2 s9 b9 W: l9 J 77E7A6D0 8BEC mov ebp,esp/ ~7 @9 d0 P1 I/ H 77E7A6D2 81EC 9C000000 sub esp,9C # M+ F, q3 U; r77E7A6D8 53 push ebx / E% P/ U5 J0 Z6 o77E7A6D9 56 push esi( A) e: N2 _( D) o 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 07:00 , Processed in 0.408220 second(s), 51 queries .

回顶部