QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 / ?% G# q" Y, |" o9 Y) X2 @, L2 p 【使用工具】 Ollydbg,Loadpe,Imprec1.6F

5 G/ x' R; }. W7 ?4 q. H: @

【脱壳平台】 Win2K

6 T; E: Q, W. w6 O6 W4 N" K6 u

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

( R- {+ a) {5 x; N0 ]3 j7 D7 m

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

) K. {6 N- h9 A7 j+ O( ]4 O

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

5 K. r D$ O9 `) Y5 h5 Y! k

【脱壳人】飞舞的T恤 . `( ?( | u0 f/ s--------------------------------------------------------------------------------

6 h: W: H; W1 n! |: Y8 ~9 W

【脱壳内容】

: o& R n3 Q+ H3 M, x0 m+ R

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

8 ]1 h* I" m0 `

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

% X5 ?" K% x, W) Y

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

0 C& q- p; y* u- F, ]8 v

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

3 Z- S" n$ V* j

00485000 按> $Content$nbsp; 60 pushad //外壳入口 5 H" J+ c9 b5 y8 W2 |00485001 . E8 00000000 call 按键精灵.004850065 L/ k, c9 y" Y( H% O 00485006 $Content$nbsp; 5D pop ebp / P4 G; T, S0 H4 m% l2 S00485007 . 50 push eax ( _0 B& L: [ L8 [00485008 . 51 push ecx 2 i) d# F" G* ]! M00485009 . EB 0F jmp short 按键精灵.0048501A 8 P9 V4 G: q E/ R, H4 Y.....................................................................

. A( U1 ~2 b; ^/ [ K- G( a

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

* v: X1 g9 I/ d( A# t. S1 j

中断

, V( R+ X6 e" E

77E6C503 K> 55 push ebp- A0 g) T3 G, }& f- I$ x- y( W4 r 77E6C504 8BEC mov ebp,esp + B1 j$ g* u) Y y4 O! r9 ]77E6C506 51 push ecx- S" r# S; G- b q, O- Q+ V- Z& | 77E6C507 51 push ecx7 r5 x* L5 W/ } 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0; W. C& y! A" v3 j% |2 Y% Q6 ^ 77E6C50C 56 push esi/ W. |# ~1 w. Z% ~3 \ 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D1 G: F" m. [/ g, ?1 \- v @, p! v0 [ .....................................................................

. j W* y6 l, ~% a/ p

堆栈内容

, }2 B* ^$ _$ o O- `

0012F574 0045C5F1 /CALL 到 OpenMutexA, L5 K2 m" |7 s U1 i 0012F578 001F0001 |Access = 1F0001 2 a& F- I" G4 V$ b0 b9 f: \# e0012F57C 00000000 |Inheritable = FALSE + h* p7 k! t O5 O' d9 ?- y0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

3 Y( [! o$ t8 x8 i4 I- @% D7 ]

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

/ E+ e! k9 R0 @$ y8 N

Ctrl+G 401000

" D2 _* z" d1 N) Z6 C8 V. _" H

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。: K5 n- F' ]0 q) M, g0 a 00401002 0000 ADD BYTE PTR DS:[EAX],AL- }3 g% [& K- B4 ]' {* s 00401004 0000 ADD BYTE PTR DS:[EAX],AL0 c% m2 ~. c/ y 00401006 0000 ADD BYTE PTR DS:[EAX],AL, M# Z; Q3 @5 w- t( U 00401008 0000 ADD BYTE PTR DS:[EAX],AL % E4 e2 N. @ W; y! w0040100A 0000 ADD BYTE PTR DS:[EAX],AL, ~2 `8 p' ~& O6 w 0040100C 0000 ADD BYTE PTR DS:[EAX],AL 1 U+ h8 e* a/ H' F/ V+ D0040100E 0000 ADD BYTE PTR DS:[EAX],AL

6 @ A6 G! {5 P. W( R7 L

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

3 K) F( r* a4 `+ I0 \7 Z. l

00401000 60 pushad - N9 s7 Y+ {/ [: n00401001 9C pushfd9 t: v: V- }9 Z 00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140" }3 h$ u7 `, L6 P# Z00401007 33C0 xor eax,eax ) c- B+ |' h, X3 M9 n00401009 50 push eax* J: b1 [. {2 O) D/ w: m! R 0040100A 50 push eax * n/ |4 ~" d: l% v [0 f. h/ F/ } }6 q0040100B E8 6D97A677 call KERNEL32.CreateMutexA- \, a' `7 I: q$ X9 v. m/ M* d/ t 00401010 9D popfd " g4 W: i! _, V- T* z9 [00401011 61 popad' c$ a; D8 A' G- y 00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA 6 y6 }& V( j* P............................................................

$ {9 N7 \& b% r& f. z

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

8 J# }3 }$ B# [/ k' Q4 g7 j

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

* B `& M' n) I2 N: b

F9运行。

) K9 Y4 r0 n1 Z7 o, p

中断

3 H9 a4 H. O- G: y

77E6C503 K> 55 push ebp //双击它或F2清除断点。 - ]4 }* x% M7 m# K% ~2 H |77E6C504 8BEC mov ebp,esp2 e3 O4 @3 I, A" t& c% z2 i! V 77E6C506 51 push ecx 0 ^* l9 A. F% k7 T! j, e: |77E6C507 51 push ecx & V$ z; |3 ^' v/ W5 g77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0) S! k7 d+ Y7 w& c 77E6C50C 56 push esi. h) r5 J/ `1 ?: S5 U9 u7 B" A6 } 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D 6 P; y7 w4 X4 J* K............................................................

! \$ o" t: I3 ]5 R. J. ]3 z" L) o

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

8 @; C5 P- {6 f) O+ Z

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。 # y6 e6 @+ @" M) {* v77E63DFD 8BEC mov ebp,esp& Y) V! O: A! B! [' V5 _$ } 77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0 9 r0 c0 i0 w4 c77E63E03 74 18 je short KERNEL32.77E63E1D " X. ^6 ~4 s$ t- v1 O Z" \77E63E05 FF75 08 push dword ptr ss:[ebp+8] / q2 e- X, K9 [: S6 Y- u77E63E08 E8 87FFFFFF call KERNEL32.77E63D94: H5 e) ]' G, \ 77E63E0D 85C0 test eax,eax 8 V' {, a! R5 v$ g+ Y77E63E0F 74 08 je short KERNEL32.77E63E19 7 A7 `* |1 Y# P k77E63E11 FF70 04 push dword ptr ds:[eax+4]' i; V7 w8 m$ _) K3 K 77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW ! Z9 F& d8 C# K( _2 Z77E63E19 5D pop ebp8 X; L$ a; e5 I+ c 77E63E1A C2 0400 retn 4; k7 j/ B7 E- k/ }/ O" B ........................................................................

2 j; x" e3 h( f3 `

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

& {4 y) t8 q; b

7次F9提示一个非法指令错误,Shift+F9忽略。 o2 N/ Y! f4 b0 l/ ] C8 g+ {/ @ 0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801, ^8 X: [- e7 ^+ y. d 0012BEFC 00B2D6C8 \pModule = "kernel32.dll"; }7 q$ Y, T+ O# f6 C 0012BF00 00B2E67C ASCII "VirtualAlloc"

2 P9 V* C$ s- H

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E 0 N. z/ U/ W4 D. o; S0012BEFC 00B2D6C8 \pModule = "kernel32.dll": q2 q7 h5 J: V0 M# Z4 k, D9 U 0012BF00 00B2E670 ASCII "VirtualFree"

6 `9 w; o. Z U& K- B

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

$ w6 u" x5 h# u( S$ {

堆栈内容

" P( e+ Q+ ?6 p2 g0 w7 L6 ]

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995/ W% H0 q G& K5 f$ E+ w* M 0012BC74 0012BDAC \pModule = "kernel32.dll"

4 Z. V) m) Q0 T' Y7 K

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

: [0 B8 S# o9 K3 G$ Y6 G0 _

Ctrl+F9 返回。

, S9 w2 o# Z9 e1 j6 |+ _' V9 \ V2 q

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA9 B6 b0 q& Z1 g) {9 P 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] * ]6 R: f2 T- s3 \00B079A1 89040E mov dword ptr ds:[esi+ecx],eax/ g1 w7 S/ P) g 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0] ) T) A5 e+ \- }" P. Z) L00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi 6 t, @4 m! g, ^3 {3 t2 v00B079AC 75 16 jnz short 00B079C49 F6 l# m- T$ u9 L. L% o& ]; i 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]. s3 ^3 G2 y r& K 00B079B4 50 push eax- w' k' M* j2 v8 [$ `5 [1 v$ |+ l* _ 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA! g5 B3 e& o* B1 t( v 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] # r. u( W/ y' w* `00B079C1 89040E mov dword ptr ds:[esi+ecx],eax ; L- r c0 \7 F4 ?9 b00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]( l' U! N9 _! k- x+ a 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi # S& ]: e4 W- ?( c: Z7 F00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

8 J$ y P/ Q9 e8 f. ^

改为

5 ]% z* H+ N3 k; K8 H7 [! {

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA / i) b8 V0 G5 k00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]4 C& [8 O, A& c. P7 P( I# L( P 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax + u' T p. q# t( U2 `00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0] s# R! a( k5 ^! r0 s& _, | 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi . K7 \$ N: y; L/ C% F/ L* B4 E00B079AC 75 16 jnz short 00B079C4 % a* v6 V5 q7 h @" L1 z00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]) R7 J8 s; o& t+ I 00B079B4 50 push eax I2 g) } n) `3 i% G4 ?00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA ^' K) g4 m& S1 B- c 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 2 J* f2 d- I u7 \2 [% Z, Z8 L00B079C1 89040E mov dword ptr ds:[esi+ecx],eax + |( v5 k$ ?8 ]7 I% T00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] ' j; p: `8 x/ n; B5 z/ h( p00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi . F5 U0 D' G* O# j& \00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

- R- C( J% z B3 k

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

' ^" I! [" g) q. O3 B

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

x" O% C* j4 l' J

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里 " ^& ]( D7 e, }3 ~+ _8 N, W3 X00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54] 5 o; G/ Z P3 i' J( b00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952601 ^( d$ j6 b/ h2 x4 ~ 00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4] p2 w# N3 \- z4 L+ p4 \ 00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260' ]" o% W9 e; h% I/ G5 v 00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74]. ?- C& _/ L+ u* { \* i5 ] 00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 . z* r1 \& J% H, H* i0 V00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30]% C4 @. g6 T5 S7 X* { 00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 % g" z# j' [+ s& ~) i1 v) l: }00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

0 U/ R% t: a' ]3 G9 J* O: f/ ^

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

8 O& ~9 n L+ h5 a5 ]5 m& o7 o" Q

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

/ ?' `( r6 W. {+ J; C* |! |

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

6 g0 S- L3 E# k" ~( ~1 w4 h* M0 c) ~

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

, R3 u& E1 U4 x

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

7 X1 x0 H6 W5 @$ R4 _2 n; x1 I

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

- M$ g2 }% v5 y+ r! r

77E7A6CF K> 55 push ebp //来到这里,F2清除断点+ } ] J$ _, ~0 O! s9 t) G, N 77E7A6D0 8BEC mov ebp,esp * B; U$ F( Y; k6 T# Z: D6 f [7 X77E7A6D2 81EC 9C000000 sub esp,9C! Z8 p% V6 Z6 J) U 77E7A6D8 53 push ebx. q* e) W0 s$ a) X0 q 77E7A6D9 56 push esi ! `1 _+ o" Q/ e; g+ H ^) j77E7A6DA 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 18:17 , Processed in 0.327554 second(s), 51 queries .

回顶部