QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 " J$ e* t ~" g: i3 [8 V# @ 【使用工具】 Ollydbg,Loadpe,Imprec1.6F

6 x5 b* p) {# \7 r

【脱壳平台】 Win2K

7 C" U! l2 E. y1 @: K; ^

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

) ^1 _* d1 a, t) @

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

$ ?9 B6 q% y4 `- U% y

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

; y/ n+ Z+ m: C

【脱壳人】飞舞的T恤 ( J2 i/ @& ~1 X* Z# f4 X8 `--------------------------------------------------------------------------------

: s1 g' H. @9 C! ~$ F/ p

【脱壳内容】

2 A2 `6 G, X3 _( k: e* N: k8 a

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

( q7 ~0 ?& `3 Z3 O8 X1 z

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

" U3 L4 v" s$ i7 [% `5 h8 |, V

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

$ |' m0 W. N2 j! Q0 w

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

! Z1 ~/ V6 I$ P+ R0 d

00485000 按> $Content$nbsp; 60 pushad //外壳入口+ X/ q) I; E2 R; j 00485001 . E8 00000000 call 按键精灵.00485006 $ H# t, |2 B/ I$ s% ?2 T$ D. j+ t00485006 $Content$nbsp; 5D pop ebp 3 o, y- D/ G/ L00485007 . 50 push eax 7 t1 L8 V+ _5 Y8 {) S. u00485008 . 51 push ecx 0 k! x9 E L" ]00485009 . EB 0F jmp short 按键精灵.0048501A; ?8 `7 s6 \3 Y4 ]/ h .....................................................................

- m0 E1 L$ N3 z Z% r f5 y0 N* z6 ^

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

5 x( c/ f, U' m' Q* ]% y

中断

! E6 _7 i; B! h0 R* f3 e0 Z

77E6C503 K> 55 push ebp . |/ ?% {9 a* X$ a: \# [) {77E6C504 8BEC mov ebp,esp+ Z4 R! t! o e. k, j! O1 K 77E6C506 51 push ecx; t5 r" R4 r+ j d( }0 L& d J& z 77E6C507 51 push ecx 0 Y" b# P3 I8 T77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 0 t) y) E E' \( l) z$ ~77E6C50C 56 push esi& M+ Y; ]8 ~: A; c9 k3 X, d 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D) \, v7 z0 {9 v* I2 U .....................................................................

7 O1 h6 t& X2 e. L' T

堆栈内容

# `0 L7 `) P! y/ ]" ]& ~

0012F574 0045C5F1 /CALL 到 OpenMutexA " T! x+ R+ m4 c0012F578 001F0001 |Access = 1F0001 + D' M/ m% g3 S: p, `, h. G0012F57C 00000000 |Inheritable = FALSE ) b6 G- `* F5 ~1 q3 U2 W+ u0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

* ]) Y4 r- P( O) g0 d. ?1 S6 q0 B

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

' r6 h+ b+ `! s2 {: x* L

Ctrl+G 401000

2 N U% P! Q( p

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。1 C3 l* K1 @$ ^, s 00401002 0000 ADD BYTE PTR DS:[EAX],AL3 _4 |$ a# M/ E, k 00401004 0000 ADD BYTE PTR DS:[EAX],AL ! B6 R' P; ?0 h1 v3 E: P00401006 0000 ADD BYTE PTR DS:[EAX],AL* C! g6 [* ^- q( V- r$ {: E 00401008 0000 ADD BYTE PTR DS:[EAX],AL - g7 u' L7 c& W0040100A 0000 ADD BYTE PTR DS:[EAX],AL& i5 ?* Q. C8 G# n; i0 w2 _ 0040100C 0000 ADD BYTE PTR DS:[EAX],AL # M7 g6 u3 T* L9 {4 }0040100E 0000 ADD BYTE PTR DS:[EAX],AL

4 D) Z7 h! Q: s

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

5 \+ |2 x! e' e/ M# J

00401000 60 pushad# C! s4 A1 y0 E( a5 z; `/ } 00401001 9C pushfd % |* ?8 K0 h; k) g! U4 z( W00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140" / P( X7 W) z1 h! G) U00401007 33C0 xor eax,eax# q& p" X2 H% y" O; Y 00401009 50 push eax2 ]/ o( Z. R9 J: K9 v 0040100A 50 push eax2 |2 J; Y H6 T3 s6 N 0040100B E8 6D97A677 call KERNEL32.CreateMutexA ( N7 g$ g( K- \, F3 H9 |3 z00401010 9D popfd9 J" D& D6 X/ g' p) ~ 00401011 61 popad6 U2 u0 B, z" g. p, Q4 D 00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA ; F. z9 F8 v: D# L) H {- M5 o5 I$ J............................................................

. O$ C: X! K* [ l

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

: ^% C: t' p* ?1 S; l- U" `# j) ~

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

2 Q" J& I z. Q

F9运行。

( g0 k9 ?8 p3 n; K8 X$ `! Y( O

中断

2 F6 v7 M4 J2 ]' e

77E6C503 K> 55 push ebp //双击它或F2清除断点。! ]; ~7 z* M# j 77E6C504 8BEC mov ebp,esp 0 \9 g; X# c& z. L7 p8 v* k9 V77E6C506 51 push ecx# P3 r/ r; q: n; R% Z& G7 _& p 77E6C507 51 push ecx 7 [! Z6 a7 q& ~. O4 |77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0& G& [1 b2 g7 I# y 77E6C50C 56 push esi ! _/ O5 s' M' T2 A* G77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D {( H8 J! o. ?7 `6 d$ f............................................................

8 a, f% Z7 [8 h2 q9 x

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

" D `+ z) z! T# N9 ^

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。% _$ L, {3 A) r% `* d 77E63DFD 8BEC mov ebp,esp8 o$ k* S4 {( M, l, M( G 77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0 ! r d# d& ^% P: l77E63E03 74 18 je short KERNEL32.77E63E1D) V! h. }9 }- l( ` 77E63E05 FF75 08 push dword ptr ss:[ebp+8] ' ]) W( U$ } Y5 M9 T+ o' j# V77E63E08 E8 87FFFFFF call KERNEL32.77E63D947 B ?5 b- v1 P( N 77E63E0D 85C0 test eax,eax ' T8 N! ^+ X: V* S# n, G77E63E0F 74 08 je short KERNEL32.77E63E19 ' z2 |" ^" {% Y, [+ P77E63E11 FF70 04 push dword ptr ds:[eax+4] * |- A" Y% X% j77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW2 G0 `: K4 ?& T 77E63E19 5D pop ebp% R' q/ Y7 Q$ W5 L 77E63E1A C2 0400 retn 4 : z; y+ `2 J. P........................................................................

/ V! g2 c9 P$ t/ A4 p5 a

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

# K6 }, y& G. l: b

7次F9提示一个非法指令错误,Shift+F9忽略。1 n& h+ K2 h* R. e( D4 w' d# f 0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801 0 Y8 ^. O. N* l; c6 d4 D0012BEFC 00B2D6C8 \pModule = "kernel32.dll"$ f4 i2 v) k( A/ N* C. b6 Z) t! Y4 j 0012BF00 00B2E67C ASCII "VirtualAlloc"

m" _& k9 ^* j: R* @8 L7 b6 A8 z+ e/ L. l

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E ( R& `6 r7 u+ u7 i; S0012BEFC 00B2D6C8 \pModule = "kernel32.dll"+ w# y2 _$ W" m. ?1 J' v6 _- L 0012BF00 00B2E670 ASCII "VirtualFree"

; n8 c# I" W5 ~/ @

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

0 G" K- u+ J" v1 D4 m% o

堆栈内容

: f; v' I3 q, ^# h

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995 7 T& k( P0 F! s# @# k+ E0 u0012BC74 0012BDAC \pModule = "kernel32.dll"

0 F" ]0 H4 R# g4 X6 {" N' i

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

8 U% n/ N/ T5 g5 i$ K

Ctrl+F9 返回。

$ p; k U1 M8 |5 E

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA( K- `9 K% F% U4 V% ~( S 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]" N @+ I% n% L 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax 5 ?# q4 h' t. j' V. c, T- Y" g00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]5 x" Z" i4 O+ a) b9 m. ^/ f$ D3 w 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi 8 j9 o# P- d6 n7 x( s6 F' V00B079AC 75 16 jnz short 00B079C4 . s3 @8 g# e d9 i& B00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]% f9 a" g8 Q9 a: q+ y 00B079B4 50 push eax( A: J, h9 `1 ]" T 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA) \3 K- ^9 h0 l$ H" l v 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 8 k! p+ M2 h+ P% \00B079C1 89040E mov dword ptr ds:[esi+ecx],eax + O6 {, T9 d j00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] 4 l. w$ e7 s, c S! i$ }5 x/ m00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi " u; t" a4 T7 g# W) a' I! F/ O00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

8 \+ a* i+ d7 y! N U

改为

9 h' ^. n4 F- @

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA * o; P, l1 j) b9 ]# g$ c1 W* B: ~00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]/ R3 L1 F9 s5 k* H+ P% }5 U5 n 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax % j4 O+ i. o; \* ?00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0] , r, r& }! z1 o3 q5 I$ [00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi0 f. E( l) ]. e& d 00B079AC 75 16 jnz short 00B079C4! q+ g0 Y$ R5 Z$ D2 H4 q; j$ I 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]" T2 q2 o) }; w( e: Z* g 00B079B4 50 push eax G1 _. i) T/ n- l. S* b00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA 0 }* L9 K: j( P00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] " K: y7 g: ^" R F/ R) ]00B079C1 89040E mov dword ptr ds:[esi+ecx],eax 0 k5 z" d& ^0 g/ M1 F; A% W+ ?00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]8 n" N2 l* @& q, {& X8 F# ^ 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi: n+ J- Y2 v; H3 N/ I9 L 00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

$ U _, k/ ?9 L) \) k

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

0 P+ u, j5 S u

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

; z4 o1 g: j# W$ r: c" P& `$ r; D

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里 ; ?/ T4 R& ?+ C3 |# h" {. x* h3 V00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54]6 R. s: f* d8 Z3 e+ _ 00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260" z6 y0 _6 z6 v( _# |6 q 00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4] - {7 N( B: M% H# W" j00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 & i1 v" @) [- h) ?5 }/ d8 ~00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74]! f7 _& A' h4 S" Q- K 00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260! e9 ?! B2 w1 }9 K. P& i+ U/ f% N, S0 u 00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30] ) h r: s6 s+ J! g00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952602 u' ~# w( U8 O7 i 00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

4 L4 F0 [5 F$ e

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

/ h( C9 n9 O+ r! t) E9 D; I6 c

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

5 b( d8 p! H+ E( I8 X7 A

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

; D5 k5 f6 ?$ B' g; H

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

) [( k4 ^: Z. I& \

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

! V; T" ?! j6 b& z2 y

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

/ b5 P: [& s# g F. G/ z

77E7A6CF K> 55 push ebp //来到这里,F2清除断点 : x, C0 G9 j2 W6 X77E7A6D0 8BEC mov ebp,esp 1 C9 \8 ^0 r- y3 s77E7A6D2 81EC 9C000000 sub esp,9C' `/ S' P4 `* ]' w, ~- ]/ ? 77E7A6D8 53 push ebx f, \% m& G( C- v77E7A6D9 56 push esi' o$ O+ c* a. k2 [ 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-10 23:29 , Processed in 0.346405 second(s), 52 queries .

回顶部