QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 ; Q: p0 I2 V. n7 _$ K 【使用工具】 Ollydbg,Loadpe,Imprec1.6F

* {# `: X1 r% J9 |/ X# l

【脱壳平台】 Win2K

; ?( u8 q/ e; [* N: |# G

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

: u' t9 ?( }* y1 ]) V# w* H

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

7 A0 k$ c- t( u" S5 E! V

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

5 B' I, g r( v7 v) L4 S6 d& J

【脱壳人】飞舞的T恤8 {9 n( K, }( W* C; `- m --------------------------------------------------------------------------------

6 u4 W) x8 P2 a; f

【脱壳内容】

4 G$ l9 @" A+ C9 _; ?3 N! q: Z" ]

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

- H4 ?& w, C2 z3 d* p2 q- w* ~! v

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

' w+ L- o% v) [; D9 S4 A

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

, [7 ~3 j1 _3 k

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

6 z: W" e- G6 q! `5 r) `

00485000 按> $Content$nbsp; 60 pushad //外壳入口 : t4 k* T# D+ V% q# z00485001 . E8 00000000 call 按键精灵.00485006 % r" Y: d' y8 g! F) ?00485006 $Content$nbsp; 5D pop ebp : I. t8 ~1 W0 Z00485007 . 50 push eax( g$ J, q7 x/ x) V$ X% D 00485008 . 51 push ecx: c4 A9 C& N- Z9 h/ [ 00485009 . EB 0F jmp short 按键精灵.0048501A/ r! T; R3 y: |# m6 i .....................................................................

" F# p. c0 P0 t3 {8 ~+ Y

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

3 S: ]# @; y! {

中断

! l6 B* g) L" _2 z+ ^2 U

77E6C503 K> 55 push ebp2 o8 c' ~+ i" b" w% I6 I 77E6C504 8BEC mov ebp,esp' A9 H* G/ S2 M o7 a9 M2 C 77E6C506 51 push ecx9 E- i- q0 s* B$ t% H5 T 77E6C507 51 push ecx( N4 h+ y5 H' P8 d5 L' w 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 & k. G2 y% j4 ?- t* t77E6C50C 56 push esi 6 q* A/ r1 H: q. K0 G9 F0 ^: u* Q/ k77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D/ f0 x- x0 D& a% o! H .....................................................................

3 q1 i& N) n8 C; X0 U! D6 k

堆栈内容

2 a Z3 o4 C& O

0012F574 0045C5F1 /CALL 到 OpenMutexA6 C% \5 Z/ }& q: j 0012F578 001F0001 |Access = 1F0001 . E. h# A: H) O( i y0012F57C 00000000 |Inheritable = FALSE , f) f% W* o5 C7 i7 ?* @8 S0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

) E8 q& C! Q5 ]% t" x- C3 c/ E* W

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

2 {. O8 ?* s2 K4 @3 E& Z

Ctrl+G 401000

q) C4 j, k( C' a! l0 x" p

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。 7 N' @' T' S6 |7 w2 t00401002 0000 ADD BYTE PTR DS:[EAX],AL $ {5 P2 ~, A) r' T* Z00401004 0000 ADD BYTE PTR DS:[EAX],AL, I# n* Q* A8 y 00401006 0000 ADD BYTE PTR DS:[EAX],AL " }5 v* j0 i2 I( U0 y+ b1 Z00401008 0000 ADD BYTE PTR DS:[EAX],AL 7 d4 R+ q% u, ~; t: L0040100A 0000 ADD BYTE PTR DS:[EAX],AL' H# I ?9 ]$ i7 A: I 0040100C 0000 ADD BYTE PTR DS:[EAX],AL ) T% U4 K! g" U; j( [0040100E 0000 ADD BYTE PTR DS:[EAX],AL

; {' g" Q4 @! r" u9 v

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

0 C$ ~, Z/ z# i; D* m

00401000 60 pushad0 y1 _$ @" O; _% T; h# D+ |- i2 M" }1 u 00401001 9C pushfd# P# m) P, p# g N0 D( [. R 00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140" 2 N6 h4 V! Z; p2 C% I: c0 k00401007 33C0 xor eax,eax 8 f& P4 J. u. U4 D0 `. _00401009 50 push eax! }. r4 P0 P# a4 a& ^' S 0040100A 50 push eax ( V) @/ D% t. ~0040100B E8 6D97A677 call KERNEL32.CreateMutexA5 @0 Q. j- m3 @ 00401010 9D popfd 9 {; i- x- r+ c* E00401011 61 popad4 V2 V* m( U+ Q" J# W: s 00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA9 u9 c: t6 I% d+ e ............................................................

k% e* _& |* q \ z' u* \

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

m9 A* T N0 `8 j: R2 f

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

8 z1 N9 t3 V8 x, q4 G4 x

F9运行。

6 P7 Q; `; K# B. l+ N! ^' o# u9 u

中断

+ a9 [3 i( w: Q* H1 f+ w$ N! g. x

77E6C503 K> 55 push ebp //双击它或F2清除断点。 % I7 b$ L& a, Y* Z6 ^77E6C504 8BEC mov ebp,esp& [: j- h: l" q 77E6C506 51 push ecx# h% W, i6 T# U! C6 G1 S& F: j 77E6C507 51 push ecx * [ P6 g7 ^ d1 `" m7 J+ C* A% G77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],09 a% {, a& h" s* ? 77E6C50C 56 push esi - Q) g0 G* v7 S6 }' \! G' u( P( l# K77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D " a5 O3 [ A! ]4 }9 S& ^' j............................................................

; S- L4 A2 q( h5 r4 ]

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

" c; F0 U u/ C

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。) e: L9 r+ Y/ _8 D b, l 77E63DFD 8BEC mov ebp,esp5 F, N h! f* l* Y( S* E, S3 ? 77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],04 D: J6 Y# j E: N$ V* c( h2 L 77E63E03 74 18 je short KERNEL32.77E63E1D 8 ]9 u$ V& D0 R2 r" @$ w ~77E63E05 FF75 08 push dword ptr ss:[ebp+8] 8 H1 N& S! Y* `& x d7 L77E63E08 E8 87FFFFFF call KERNEL32.77E63D94 % N! @# K4 a2 G6 [: R77E63E0D 85C0 test eax,eax 9 L# ]0 s# p ] R% J1 r77E63E0F 74 08 je short KERNEL32.77E63E196 p3 k/ q; Q+ h7 S$ U 77E63E11 FF70 04 push dword ptr ds:[eax+4] 8 r9 a& y: C4 u9 A. u7 O77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW 1 w/ j7 r! c+ P7 p# B5 u5 ]77E63E19 5D pop ebp; E7 Y, o }/ h, u+ S/ W+ K 77E63E1A C2 0400 retn 4 $ L1 W. g/ H2 i........................................................................

1 h$ C4 q5 h+ _0 ]2 {, I6 \

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

" I l: P! D+ A+ a [4 E; w! u* f

7次F9提示一个非法指令错误,Shift+F9忽略。 % x C% a! a5 q" c3 H$ J P# G0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801 0 `/ U3 \: x p; n' w0012BEFC 00B2D6C8 \pModule = "kernel32.dll" ; f& ^% [) E, j5 g0012BF00 00B2E67C ASCII "VirtualAlloc"

+ r$ M% `+ E6 E( V' Y& ~- n3 h7 D

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E 8 G4 x. C/ \6 {' E- M0012BEFC 00B2D6C8 \pModule = "kernel32.dll", O& X8 M6 O$ M/ r 0012BF00 00B2E670 ASCII "VirtualFree"

+ ? e0 M* T1 y. S7 ]# Z

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

- J6 U& k% c/ c' c; w) N# Q

堆栈内容

4 F% {6 f( V5 J* ]9 S8 D

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995 , |8 s5 a( h- R% X0012BC74 0012BDAC \pModule = "kernel32.dll"

7 R, X( T$ `( r

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

6 g k, \& o$ O" Y, k7 W& A

Ctrl+F9 返回。

& q7 d f9 E6 V

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA ! f( i0 R/ y3 e* `0 Y) t00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]+ e% L3 _4 T/ p/ L! J 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax- a/ w; C' L) T* N9 j 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0] 4 j; V9 t/ M: a00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi 8 t( v) I+ t4 [( l( t00B079AC 75 16 jnz short 00B079C4 ' W$ l# O# Y2 b" X+ n& r00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]! n" z* a# X7 s; u8 K; u$ @ 00B079B4 50 push eax, c- a3 k6 }7 u4 E- ~4 `( E6 d 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA# z' l$ d' E3 u; H+ Q 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 5 v6 a' k1 t% ~, B/ ]0 F+ ~00B079C1 89040E mov dword ptr ds:[esi+ecx],eax! v. b9 w0 @( B' `. _( U 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] 9 k" X1 A. b2 j00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi" C( z. b& m; W* V4 y 00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

: j" f$ O7 L: }

改为

, K& p$ I# b2 @: o

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA 9 b! K6 G3 ^& _2 o8 T) U0 ?; x00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 3 g$ |7 M4 E* v- Q00B079A1 89040E mov dword ptr ds:[esi+ecx],eax 2 g; W% f" b( |. R& E00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]- P% h- }5 W) S2 t ]" _ 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi 9 U8 {, P, @+ Q! q6 Y00B079AC 75 16 jnz short 00B079C47 ~$ n) m3 g# A- @2 z# X 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] 2 [* J1 L0 V5 q& a7 E4 A' _$ j00B079B4 50 push eax/ C1 @+ {5 ?# \* L 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA' p) \, z0 W# O3 W Y 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0], t" j. L$ q; e) O- E# z 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax # [( m. T4 I6 ~/ q; g00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]' ]: T( `7 Y$ v, ?& x 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi , c5 _2 G# L# [- ?/ H0 C3 ]4 `00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

3 W" _3 u1 i5 q5 b# g

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

( S! i% O, u4 P6 u& x- i

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

2 K+ X/ N7 K8 s# L) V' @# s

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里 Q1 g/ B3 ~1 X/ n00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54] 6 v7 r, m+ [6 s& T# Q& F' G# p00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260. b0 C- n3 b2 e+ u2 y) f& x8 t 00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4]# D0 ?% j3 a! M8 X% G0 r 00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952608 t6 F/ K; }! K3 f3 X; C: @2 _ 00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74] 9 S+ A$ t d" u2 _8 V) v9 j1 S00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952608 j3 H" j C" p 00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30] & c6 i: x1 X! v6 ~2 d3 `# \4 G5 z00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260. ]& h. s* |8 S- { 00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

. h0 H- H# A K/ L1 b, K

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

& u7 u$ _" U6 J$ m. J

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

. ^& @0 f/ O8 P2 P \! Y

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

" _5 o# T u% D4 l, w1 J8 ~

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

( J q% b- N* F9 Y5 Y) A! }

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

# p# I) r" ^4 i

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

: o7 N! r& ]* O/ N! j" ^

77E7A6CF K> 55 push ebp //来到这里,F2清除断点8 g1 g/ |4 _6 C0 O4 F/ p/ ^ 77E7A6D0 8BEC mov ebp,esp3 U2 x8 E1 B% O" z) I 77E7A6D2 81EC 9C000000 sub esp,9C. v' k& e5 T$ p7 b6 b; Z, I) ` 77E7A6D8 53 push ebx h6 n6 u- V- k/ G1 A 77E7A6D9 56 push esi # ?& G' V3 b/ U; @' ?% N77E7A6DA 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-8-14 20:36 , Processed in 0.400310 second(s), 51 queries .

回顶部