QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 0 J {* O/ _) [ F, Y* s 【使用工具】 Ollydbg,Loadpe,Imprec1.6F

3 ]% N2 z0 q E+ M$ f

【脱壳平台】 Win2K

& E# p3 }' M8 a, i4 ^% K

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

( q, g6 a' Y7 |) E! M

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

* O1 y: L8 B& l! u, U

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

: q8 h7 l1 T# t6 H) [

【脱壳人】飞舞的T恤7 x: B& S4 R# D6 V- C/ C( ^) T; Q) W* a --------------------------------------------------------------------------------

u% E L, y( |2 h# V

【脱壳内容】

2 m! l" J. G8 {. r

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

9 d, j5 t8 u @. z/ w( E& Q

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

. \# {9 V0 j0 z5 j4 x+ g3 n

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

" A; M$ }0 I! H: ]8 Q% a& G4 c

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

( @, E4 g8 H+ j/ D0 s4 h

00485000 按> $Content$nbsp; 60 pushad //外壳入口 ; Z) I- l* H) x2 q! Z/ `1 S00485001 . E8 00000000 call 按键精灵.00485006 ! o( B2 a* @+ \7 G. y00485006 $Content$nbsp; 5D pop ebp / @( K3 O- X# `+ T/ H: _2 j00485007 . 50 push eax$ l; _) R3 K! u! J. d 00485008 . 51 push ecx " x2 M# D: m$ h4 A+ C00485009 . EB 0F jmp short 按键精灵.0048501A 9 q4 r( a* v3 T. m4 R4 {.....................................................................

7 x& I W8 ?. P# R' }) |

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

6 d! d2 w% M/ d- q7 E' ^

中断

% @ `- ~& H1 e: T) t! i

77E6C503 K> 55 push ebp # Y3 ?# o4 c/ |1 }; g77E6C504 8BEC mov ebp,esp4 `- s/ ]5 m* [* u 77E6C506 51 push ecx * D2 A) R" X, t3 m- R. B77E6C507 51 push ecx 2 X3 w* W& Y0 e- x% _1 c2 e% O' _77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],07 P: H, g7 i# K/ T 77E6C50C 56 push esi8 f& J' ?9 f8 Y8 w 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D5 ?9 B4 L6 b. M) x .....................................................................

3 x% ^' r( V5 E1 u- s% L8 L

堆栈内容

# \: A5 q3 O, D* d1 M$ m

0012F574 0045C5F1 /CALL 到 OpenMutexA( g, f2 I5 x( O6 k( G5 e 0012F578 001F0001 |Access = 1F0001! ^3 O* g5 B8 Y3 g 0012F57C 00000000 |Inheritable = FALSE- E. g9 L" t7 m 0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

+ d* J& S$ P! n1 N/ J

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

5 q7 [# u! Y# W

Ctrl+G 401000

# x) W. b# H( B: ~

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。 2 m6 a; O' n2 \- q3 ]" X5 d) J7 I, M00401002 0000 ADD BYTE PTR DS:[EAX],AL # y3 @! c6 F0 k1 }4 F00401004 0000 ADD BYTE PTR DS:[EAX],AL 0 D) F7 x! i. L00401006 0000 ADD BYTE PTR DS:[EAX],AL , k2 y# s; ?) R& Y00401008 0000 ADD BYTE PTR DS:[EAX],AL # H; J, O6 p6 S! M; F' G0040100A 0000 ADD BYTE PTR DS:[EAX],AL 1 R6 h1 u- N2 f( i0040100C 0000 ADD BYTE PTR DS:[EAX],AL / H4 X/ Z- P. D% u& X8 e% \9 \0040100E 0000 ADD BYTE PTR DS:[EAX],AL

6 Q& `* W* C8 f- n1 H3 S) q9 m5 m- h

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

, R# ]9 X0 M! R" J

00401000 60 pushad1 P* n; R& @- q- o8 C- g( N 00401001 9C pushfd' i- B0 Z. K5 P1 v5 d 00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140" " H& } ?% \$ O* u' Y! l8 q00401007 33C0 xor eax,eax* m. x2 W' Z! S( y7 S 00401009 50 push eax) i* j* h/ K- h+ W; Y 0040100A 50 push eax 0 I3 y5 I0 R+ W0040100B E8 6D97A677 call KERNEL32.CreateMutexA3 M! k% ~! @2 ?6 J1 D 00401010 9D popfd' U8 f1 X5 g! c0 W9 s 00401011 61 popad # E; F5 y" {; c8 ~! ?' p, I* B00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA 1 } |- r. L A% n............................................................

3 X8 R, p. j! r. d, y7 J- s

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

8 C7 u, J! W. v4 d, f8 l/ `

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

0 J! [% x2 h1 w6 q# Y* u) [( X

F9运行。

! I+ {) U6 q) u3 o& \" l

中断

$ Z9 b, O. X' B

77E6C503 K> 55 push ebp //双击它或F2清除断点。 1 |' n" L. U9 z1 G) y77E6C504 8BEC mov ebp,esp - _. G: Y# N9 M5 ]7 c, r8 ~1 U, f5 E77E6C506 51 push ecx2 g) e+ L5 o3 {* ? f" g 77E6C507 51 push ecx 8 H. @( `7 q' P, G77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 & m2 K# d3 O3 ~+ X6 k7 H77E6C50C 56 push esi- {. `# @: _' E& T6 D% o) } 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D ' S$ Y! r: M/ [( \9 L............................................................

) r3 T& A& _2 a# e W

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

: Q' W9 l' n" T; \

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。) ]. [3 ]/ t+ O9 S6 N0 E; n 77E63DFD 8BEC mov ebp,esp * N5 d3 s& Y1 B8 E1 X. w6 H5 I77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0* @) A1 N. S# P, T/ V 77E63E03 74 18 je short KERNEL32.77E63E1D 8 N# [) y/ _4 G9 J- v77E63E05 FF75 08 push dword ptr ss:[ebp+8] 3 j7 k" ?) ~5 a2 x* x4 p o77E63E08 E8 87FFFFFF call KERNEL32.77E63D944 V7 V2 t7 q+ G 77E63E0D 85C0 test eax,eax g2 n' P1 U9 z' F+ _2 f7 n, t77E63E0F 74 08 je short KERNEL32.77E63E19: ?# ], M5 [/ m Y+ L 77E63E11 FF70 04 push dword ptr ds:[eax+4] ; d( S( X+ O! @, T' B77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW$ s: _8 X+ p1 P# \/ \9 s% m 77E63E19 5D pop ebp 2 C4 {. |, q% d% D9 `77E63E1A C2 0400 retn 4 |9 D+ c% L6 Y! P) B% [/ Z........................................................................

/ A0 ]8 T* P2 A. p0 w

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

. v* q7 o o' n* |9 Y) L! {7 `

7次F9提示一个非法指令错误,Shift+F9忽略。$ c# L8 ]- I+ B 0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801 P' p7 [# g( j0 B* p0012BEFC 00B2D6C8 \pModule = "kernel32.dll": L) |2 ]# Z" p& Y/ d 0012BF00 00B2E67C ASCII "VirtualAlloc"

8 [) C2 S" Y+ R, J: Q/ m m

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E + |4 E: X. q) h; e t% Z0012BEFC 00B2D6C8 \pModule = "kernel32.dll" " P8 |# W, Z; h( [/ f0012BF00 00B2E670 ASCII "VirtualFree"

5 Q9 Z; C n& O8 E( `

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

8 G9 z$ C7 u7 i9 A5 j

堆栈内容

' h4 ~% t' I/ {0 y6 o& m4 m

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995! p" M/ `. W4 J% u n) f/ x# } 0012BC74 0012BDAC \pModule = "kernel32.dll"

/ v9 T. V% J$ m f. r' |7 }

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

9 ~2 L& e: t) s

Ctrl+F9 返回。

/ ~- ^9 I+ ?- U% j6 }; O

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA$ s) D1 C ?4 q. t. S( v 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] . Q+ w: {' ?( }- k% ^1 L' Q$ o00B079A1 89040E mov dword ptr ds:[esi+ecx],eax . @3 O- Z0 m* V& t5 e00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]! S+ q, _& i' {' b O o# x 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi6 S1 v$ E3 S/ v1 G) e 00B079AC 75 16 jnz short 00B079C4 6 w! J, M m! H3 J0 H+ X: j00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] % Y% p, J, k: z5 T1 b1 ^; z1 a2 K00B079B4 50 push eax " M. G4 }( y) n. ?+ d00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA 8 C9 ^6 D! i E/ u00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] + _+ W4 {0 W! v3 O2 V1 m00B079C1 89040E mov dword ptr ds:[esi+ecx],eax , ]% F+ y: `. n- E$ T7 V00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] ( S5 G7 Z7 w# r! j00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi, |" E: z, l! O7 i 00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

+ C% o; D0 j8 C

改为

+ i' z, F. }) P, ^" |6 a) p

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA! ^8 S; ?# y! v& _+ d 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]1 i g2 S8 p+ q1 c5 m; q9 ? 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax 3 T V/ @* i: K$ l, G: Y00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]5 m. ^* n! n3 l* c 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi2 R, v- k L. S6 B; B2 V5 p; k 00B079AC 75 16 jnz short 00B079C4* z- x3 z( F5 n7 M# {5 ^, w, T1 |3 k 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]' \6 E/ ?1 ~7 n G" ?( K9 x 00B079B4 50 push eax h/ ?' E3 z% B4 f9 q1 d" o00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA. }( s; n- M9 \) V( p6 J) B 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 7 s' m6 e( n5 N, S! R E00B079C1 89040E mov dword ptr ds:[esi+ecx],eax8 [) h& g8 g w* e6 v6 E 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] " n1 u) Y- g& j, }7 h5 S% I5 ~4 r/ X; A00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi+ H! O/ L. }" O4 G, ] 00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

% h k; W1 M+ y8 _

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

, ?! ?* ^% S; V J

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

7 P8 e, Z& G3 ?+ p+ l, {' v

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里 # R2 O6 D; ~: G X! H00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54] * e2 m4 w. c( G5 V& D" Q. ^7 k4 M# y00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952604 |# ?7 g9 a( N4 d' u 00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4]' W1 G( O2 q E( L! c( @4 q 00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 6 ^9 B b& M$ E9 o+ S3 ~3 p00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74] ( X' A( w2 R7 b4 b00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 5 R4 ], `! W. ^5 l00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30]) Z, Y5 g% V) C 00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260* J3 t* t: M$ k2 h, B5 Y4 G 00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

# w6 q; U1 f4 L6 B' T7 b2 f

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

& [- J/ k9 H3 z& p

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

" ~$ D- Q- ^0 g' V2 d$ N; J- F

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

$ E1 V6 h2 x/ a! x: s( n) E

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

% [+ v- @# a2 G5 R; c) X

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

1 q) i$ r, o$ J

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

$ \- R5 `. ?" f5 R

77E7A6CF K> 55 push ebp //来到这里,F2清除断点 ) i% X4 e7 u, W3 z' v9 _0 N' `1 {* [77E7A6D0 8BEC mov ebp,esp ! O% Q2 |; A$ F( ?* r. B: l77E7A6D2 81EC 9C000000 sub esp,9C7 {/ t; Q" A; m3 t# j 77E7A6D8 53 push ebx 1 c) j5 r v. [ {77E7A6D9 56 push esi 8 b, f7 C3 N' z6 B77E7A6DA 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 15:46 , Processed in 0.442505 second(s), 52 queries .

回顶部