QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 % r6 ?$ P( ^7 @! ]( X: W# U/ e F# x【使用工具】 Ollydbg,Loadpe,Imprec1.6F

' a: M2 |) \" R9 ?. {. `

【脱壳平台】 Win2K

- R# b0 Z$ @9 i: m3 h2 g% m% v

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

# [7 L) F' T5 ~! E

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

, c, a/ [+ }- K* v6 e# R& Q: g

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

, W8 `8 j; {& F2 j% d+ T* o

【脱壳人】飞舞的T恤 % c( K2 _+ R5 R% h* d( Z) x--------------------------------------------------------------------------------

2 s: Z% `% o$ s- `) n

【脱壳内容】

2 l/ U# Y, c- K

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

0 d4 G, K' C2 i; Y

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

% o: J1 v# \: f9 [

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

% @5 u9 `6 b$ |6 q; L/ Z! g

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

! v! F/ a# @* I F/ d' c6 e

00485000 按> $Content$nbsp; 60 pushad //外壳入口* O* o& |& h( \ 00485001 . E8 00000000 call 按键精灵.00485006- V) [' m" X8 w 00485006 $Content$nbsp; 5D pop ebp! T0 q; f( W/ p 00485007 . 50 push eax/ r6 n+ v& U+ @) e$ c \" Q 00485008 . 51 push ecx8 ^/ U6 i' s7 f" T1 l5 X 00485009 . EB 0F jmp short 按键精灵.0048501A 1 s) J% q) k. y0 T- J% g4 k.....................................................................

- u' H4 e+ U/ {1 L1 _* J

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

# k: b% O' @1 r; W9 d1 J. [

中断

# C* Y& S6 S' ~$ L) V* o9 v% Z

77E6C503 K> 55 push ebp " x5 j: @6 L5 ? }# W/ m/ s77E6C504 8BEC mov ebp,esp ' A+ F9 a2 t5 S77E6C506 51 push ecx l' H: ?: P6 o* `) e 77E6C507 51 push ecx! U9 j* B' N7 O, r. l) Q6 R! C 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 y/ t5 Q2 V# u0 i+ C( q! ~77E6C50C 56 push esi- \+ U: ]) r+ J4 @/ S: p8 u 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D7 ~, @( S, t: s! H2 ~6 Y& G. h .....................................................................

: c* `2 d3 e" \8 ^9 B6 b6 C# o

堆栈内容

- L$ [% ` k" u- [- M& S

0012F574 0045C5F1 /CALL 到 OpenMutexA . i& x/ ?7 p/ l G# w( _0012F578 001F0001 |Access = 1F0001* {; @! Y! }4 P$ i4 A 0012F57C 00000000 |Inheritable = FALSE - L. Z2 d2 W4 r' x2 Z' [/ N; K0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

9 s% _" H0 T4 `& G9 w

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

4 K! E7 G1 T2 v7 U9 h

Ctrl+G 401000

, q9 I O s1 i; o, [

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。& c# \3 K x7 [, H 00401002 0000 ADD BYTE PTR DS:[EAX],AL- [0 W$ s2 D u" y G/ A3 [7 V8 t 00401004 0000 ADD BYTE PTR DS:[EAX],AL, m2 \- `# ~6 J0 c! H2 N 00401006 0000 ADD BYTE PTR DS:[EAX],AL* E% }* ]: S4 f/ x6 B& X7 P 00401008 0000 ADD BYTE PTR DS:[EAX],AL & g r4 D7 u- g+ a0040100A 0000 ADD BYTE PTR DS:[EAX],AL ' G9 b4 \, X. e; g+ s' n( M" J& t0 W0040100C 0000 ADD BYTE PTR DS:[EAX],AL+ f) k& X* s7 j+ F2 C/ B 0040100E 0000 ADD BYTE PTR DS:[EAX],AL

% C9 |# X. }( n* y8 m3 j: p

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

+ V! R9 ? l. z6 l! W

00401000 60 pushad6 [6 z; j7 m/ ], c+ C0 z- X 00401001 9C pushfd& M1 z) p/ R5 F# C1 h/ ^ 00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140" u: M" s& }+ F& s1 h 00401007 33C0 xor eax,eax4 t+ s9 j& L8 U5 S) v' C5 n 00401009 50 push eax # f9 |, ^2 n: H0 X" S3 f( A$ g4 U0040100A 50 push eax% k I' |4 h6 Z* M- f: Z! E 0040100B E8 6D97A677 call KERNEL32.CreateMutexA " u7 Z9 d& J9 r00401010 9D popfd # @4 q- k4 l S# C' J00401011 61 popad 2 ?: d+ Y( `) ~# M' Y00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA 9 n2 c r7 E4 J) C............................................................

: k. `2 p. s4 A7 l! c8 Z

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

* ~" |& h! p* @8 U {# N! n& V

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

5 R4 r( y8 ~) N. l+ W- }

F9运行。

( i% {6 a( l! B( H z- }* d

中断

) m: B% q! ^% E

77E6C503 K> 55 push ebp //双击它或F2清除断点。 * T6 X; W7 N+ a/ x* E77E6C504 8BEC mov ebp,esp - R3 r6 f0 c- x9 B8 u2 Z# o O% \77E6C506 51 push ecx 3 N# t# C0 S9 O5 q& F2 j$ i- \77E6C507 51 push ecx 9 g( ?# w" h; F5 c: g z77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],03 [1 Q6 I0 {% Q3 b 77E6C50C 56 push esi" S3 d' h T* K8 N% @" j8 f 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D6 h5 E$ y0 W! }6 ]4 X% V1 t ............................................................

5 O/ M+ M+ e6 n6 f# _

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

+ \" @+ j! ~3 E2 S$ i2 q6 }+ b

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。, } b) t: d# d4 v4 R" L- r 77E63DFD 8BEC mov ebp,esp# Y: a( E$ a1 \; E/ ?0 I" `$ p 77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0! k: R: J& { D4 z. a: A 77E63E03 74 18 je short KERNEL32.77E63E1D9 j# l3 B2 C0 g9 l 77E63E05 FF75 08 push dword ptr ss:[ebp+8] ' N7 Y9 r+ N" t' f1 J77E63E08 E8 87FFFFFF call KERNEL32.77E63D94 ! c+ ]5 \$ L5 M2 B77E63E0D 85C0 test eax,eax " q; I; v! f$ |4 K- Y* y2 {2 e77E63E0F 74 08 je short KERNEL32.77E63E19 2 L9 e3 _. V3 Q7 c77E63E11 FF70 04 push dword ptr ds:[eax+4]' P" F" w' Q+ D4 g 77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW2 s, J' f5 i* W j6 {/ H- T 77E63E19 5D pop ebp9 T( L5 t- a8 k* d0 D* O. A 77E63E1A C2 0400 retn 4- L% h% q' u) S; t2 I: M ........................................................................

t& ~+ r1 X, d) Z* R7 G

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

* o0 s4 k7 T( H* G, @5 ^

7次F9提示一个非法指令错误,Shift+F9忽略。0 g# a4 U% H3 B( s6 Z% L! Q7 j8 I 0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801- C" B0 D8 @5 P8 K 0012BEFC 00B2D6C8 \pModule = "kernel32.dll"% e* ]+ s' t4 G- w D( s+ L 0012BF00 00B2E67C ASCII "VirtualAlloc"

/ j: O" D5 S) Y- A+ j! d% N& @

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E" e) t0 |/ a" B 0012BEFC 00B2D6C8 \pModule = "kernel32.dll" * F- K# V8 G" }( ^8 ~0012BF00 00B2E670 ASCII "VirtualFree"

0 S9 W! j9 B" c& w& Y3 L+ F

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

: p4 [8 I+ }8 P: Y/ p6 _! Y

堆栈内容

* q* E% F# s9 s' r- g

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995- r. i, l. |9 S0 A8 j 0012BC74 0012BDAC \pModule = "kernel32.dll"

' b& J# w, `1 O* H' q: l

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

! ~6 f- c% m# x3 ?5 ]( H: m

Ctrl+F9 返回。

H, [, @9 e. |8 {% I+ s

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA ) n3 i8 l1 M1 n/ U00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] ; S4 @+ w/ U `/ l3 P2 ]$ H00B079A1 89040E mov dword ptr ds:[esi+ecx],eax. T% J" | \$ i$ n8 C' K 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0] ) D7 Q) l/ H& S. G9 d00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi+ ?$ E9 P; S5 _$ D* r 00B079AC 75 16 jnz short 00B079C4! ] }# ^, m! S0 W9 b- I 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]; B$ B! C2 X1 q# h 00B079B4 50 push eax, _" z: Q5 _0 [& y u" R 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA% \; q7 v0 C S: S( f& V& c 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] ) a4 o7 Q2 j2 o/ r00B079C1 89040E mov dword ptr ds:[esi+ecx],eax# F0 H5 o% h; E 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] # G8 `* x5 w0 w1 B. y2 X" y9 f) K00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi z* h4 A: C8 I' e* V" j7 ?) f, x00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

8 p, e* \1 [9 V

改为

8 }" `+ \( G: t; F

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA: {* m* y, _- N6 t/ G 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]6 a. \ E8 t4 u: b3 V5 j: i5 g 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax - W2 S% M8 c* r00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]. R+ L, k: ]0 q% |' }# f 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi 3 o q, d7 C' r* v; D: F7 b00B079AC 75 16 jnz short 00B079C4* v8 `7 i' \' {9 Y: z6 l2 v! ^9 C 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] + g2 U. o) q& E' e4 N* {00B079B4 50 push eax" S9 `( E: M2 n- d3 a& i 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA " S, R9 u. B7 I7 Z9 x3 U5 r00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]* O1 X) X( y+ \ d 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax 2 L$ {5 D9 S& A+ F& i- C6 ~9 B00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]4 j1 o A; b/ z, p; A# g- y# T/ L+ w 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi - y6 m6 l* N8 b @7 r. u: Z- D00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

: h1 I0 G/ i {1 n( J8 `1 R* [! J

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

- K4 G3 K$ B: |2 y" X) \

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

% B# P2 S+ _2 v. c" {0 b& a: r

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里8 p7 e3 k7 X% ~* {# W7 r$ A 00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54] 4 v& M- a+ U% M- g. Z5 T2 [00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 I" l9 [2 P& K7 v 00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4]/ V2 \: t4 S: E! u 00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 5 S8 `& \& A7 o% Z/ [00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74] * T% ?" | u2 w5 O' D1 V3 X00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 3 t( C+ V) a% S( S00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30] 9 U) }4 U- a) I00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260+ ?$ k/ X3 G) k# T) i$ z, N 00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

3 y" L8 L8 s# [1 [) a

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

. ^. ?2 W6 Z; s

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

8 ~0 x, ^; H5 t$ k k% L1 C

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

9 e. I" k0 m/ V4 E* b* E

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

! d [1 Y6 [- T, ^& S/ a5 w/ y# e

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

n% E/ c3 q5 Y7 b( w% i

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

: n. l% p/ [2 ^6 ^* \8 G

77E7A6CF K> 55 push ebp //来到这里,F2清除断点 . h9 J2 M( N% m4 A' _77E7A6D0 8BEC mov ebp,esp 1 ^9 F! b9 E" z77E7A6D2 81EC 9C000000 sub esp,9C ! {( C6 d" v! T; `; U77E7A6D8 53 push ebx# b7 M/ ]; y2 ? 77E7A6D9 56 push esi 4 y2 M9 _/ B' H77E7A6DA 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-19 20:16 , Processed in 0.406569 second(s), 57 queries .

回顶部