QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 & q5 m+ H& J1 D2 I. Y n 【使用工具】 Ollydbg,Loadpe,Imprec1.6F

7 F* ?/ g, q( c2 g. h3 V* ^5 e; i5 l

【脱壳平台】 Win2K

3 G. s, W0 @7 K% C# s

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

: c$ E7 R4 R1 q t) I1 y+ \2 l$ }

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

# G, z# o8 H: j3 t3 ]

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

$ M9 X( D/ z! X( i" S% k# y, b$ f

【脱壳人】飞舞的T恤2 _) s1 }: C9 k5 R6 ]0 M8 K5 m& h --------------------------------------------------------------------------------

. P$ m" J( l8 U

【脱壳内容】

' k# Y: h* A, Z, |2 a

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

' p& Q; y4 B8 x, A( J

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

* g' z$ \4 K ^- [% l% E3 i$ `0 a

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

2 L1 L) ?; I6 K6 o( |

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

8 I+ z6 t5 ?" g, O9 ], N" G$ }

00485000 按> $Content$nbsp; 60 pushad //外壳入口 % d, d: _& k" r$ o1 I* q. A00485001 . E8 00000000 call 按键精灵.00485006 R: S& F7 A! {8 ] 00485006 $Content$nbsp; 5D pop ebp# l6 s; W) e2 o 00485007 . 50 push eax. f( e; K# v! r+ c4 }$ S% J 00485008 . 51 push ecx) X( z, k" C# n! Q& }0 C 00485009 . EB 0F jmp short 按键精灵.0048501A - X" s% K' R/ b. T7 N: p, ~.....................................................................

( }/ ~( Y( R: L- H3 j, p

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

8 R5 B. a1 a S5 ]* [, [

中断

1 a$ k$ x/ @- w( k

77E6C503 K> 55 push ebp- Y( {3 P+ Z: O 77E6C504 8BEC mov ebp,esp- x; e5 u9 t3 P6 m 77E6C506 51 push ecx 3 T: @. A5 C+ ^1 Y) e77E6C507 51 push ecx3 I- T" S5 q' ^ k# o 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0$ O6 q/ W1 u$ g5 h M+ Q0 N 77E6C50C 56 push esi ' b1 K2 d0 ^8 y' L: A, _7 I77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D " y+ u% m6 M9 m& d- O2 c.....................................................................

; n* P3 T* z+ b; U( L

堆栈内容

0 x) K# I, E+ c' Q6 L7 I# M

0012F574 0045C5F1 /CALL 到 OpenMutexA & H' f/ _4 h+ i/ ?4 N0012F578 001F0001 |Access = 1F0001 ! Q& r, s, i( ?# D0012F57C 00000000 |Inheritable = FALSE I4 a; x5 P% ^; T( c2 q" v0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

, ~' ^0 D( h* `9 Z; G

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

) J! Y, w+ h b9 j# B. V

Ctrl+G 401000

8 v! h9 v& N! _) d% u

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。; [. w7 ]8 g) v" Y; n' _ 00401002 0000 ADD BYTE PTR DS:[EAX],AL! U7 n6 M; E/ l: h- [: R 00401004 0000 ADD BYTE PTR DS:[EAX],AL 2 P- P1 Y4 V3 R' E" V" k00401006 0000 ADD BYTE PTR DS:[EAX],AL 3 X0 o3 u7 a6 | c& x00401008 0000 ADD BYTE PTR DS:[EAX],AL4 c3 c# c, n6 |" s# ~ 0040100A 0000 ADD BYTE PTR DS:[EAX],AL" g {+ W: r9 @' I 0040100C 0000 ADD BYTE PTR DS:[EAX],AL # X& r* [2 P7 ?- \2 [1 f0040100E 0000 ADD BYTE PTR DS:[EAX],AL

& `6 ]: o* d* Q. }* B

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

. d' U. S! y0 V# q0 F$ [ R& l) J

00401000 60 pushad / X( G9 j% o- F6 t5 l00401001 9C pushfd ! O. H1 V1 a0 `) k/ l0 ^9 ?; U; \00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140" 2 F9 F- w: _& x" E( t) {: W- N. Y00401007 33C0 xor eax,eax" {% [! V8 c" `( ^) l" E; ? 00401009 50 push eax; E+ X& i& L3 k' ?9 G" f 0040100A 50 push eax9 a0 k0 s8 S( V& L 0040100B E8 6D97A677 call KERNEL32.CreateMutexA 9 D! w5 Z6 C" @7 f00401010 9D popfd/ T' `" @: E) k( a% A8 P) r 00401011 61 popad& H" A. D' U. d6 }+ ~+ U$ K) F5 ^ 00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA$ [( G* q5 F d5 W9 _ ............................................................

9 ~; F. a. u, D4 o

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

* z) r( ^ G6 L( R( f7 a

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

) `- y g" x/ v$ O

F9运行。

* i3 }6 A) \5 @2 x' `

中断

4 i1 _8 R3 j4 K2 ]; y: b$ D

77E6C503 K> 55 push ebp //双击它或F2清除断点。 / l/ f: A8 F* d6 z& ^4 U* \$ f77E6C504 8BEC mov ebp,esp7 E' r0 m& b* I/ | 77E6C506 51 push ecx& T- ^. E g' H 77E6C507 51 push ecx. t% S2 z. U' ]! L7 w& j4 W 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],08 O3 k1 g/ \1 e( u# M4 e 77E6C50C 56 push esi : n+ B8 |4 _6 U2 S1 v77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D3 a* I& s* v: o/ T ............................................................

% U& ^6 Z! s# E. O' S6 E

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

& }* G, p: m+ }. W& A; q

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。* ?( u. r( ^; r5 q 77E63DFD 8BEC mov ebp,esp * r' Q) K4 z( \77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0- h. A, B$ D0 T8 a& U" k 77E63E03 74 18 je short KERNEL32.77E63E1D3 [4 W: l& a, ?: h 77E63E05 FF75 08 push dword ptr ss:[ebp+8] . T, ~( L m% m J9 z) ]3 @$ Y77E63E08 E8 87FFFFFF call KERNEL32.77E63D94 g" Q. l3 m- P1 o- r 77E63E0D 85C0 test eax,eax. _3 x' \: U0 @* J5 a 77E63E0F 74 08 je short KERNEL32.77E63E19 D1 |5 K0 h) R 77E63E11 FF70 04 push dword ptr ds:[eax+4] 1 Q" ~$ D) U' i77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW$ V d& h3 F r- q6 H+ I" U/ [5 x, V 77E63E19 5D pop ebp ( k T. B: c+ V2 H- Y77E63E1A C2 0400 retn 4/ m. t- q% K0 Y7 w0 b ........................................................................

, Z9 J. w; m/ q0 I: {& v

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

# F2 p( r+ w0 j9 @9 q2 ]

7次F9提示一个非法指令错误,Shift+F9忽略。. y$ Z# H, R/ }5 c8 I: c 0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801 . D- l: E F: Q0012BEFC 00B2D6C8 \pModule = "kernel32.dll" ' x/ j$ m( g* H& J/ \0012BF00 00B2E67C ASCII "VirtualAlloc"

) J* E% o6 R& x" C1 F/ B- J6 e

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E 1 C3 ]7 }. V2 W# L8 B0012BEFC 00B2D6C8 \pModule = "kernel32.dll"8 x+ O: i) x- l& } 0012BF00 00B2E670 ASCII "VirtualFree"

1 Q' h M: Q6 y6 _

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

& G5 @" b) q# ]

堆栈内容

2 Y& b) n1 }- g' D

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995 : T* P& A5 X# s) A7 l( m. z0012BC74 0012BDAC \pModule = "kernel32.dll"

/ H. X! [9 _3 X, s( T3 k6 N2 T

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

* a) _* Q, J/ X. r- Q. b

Ctrl+F9 返回。

}0 A& B. u; s

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA, r! v2 S/ x: G- f 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] ! o* }/ m4 H8 D4 v0 @5 ^00B079A1 89040E mov dword ptr ds:[esi+ecx],eax : K V) y, }' V00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]) U. I' L# c. H6 z4 D5 F 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi( P& `- x( c5 z( ~' D 00B079AC 75 16 jnz short 00B079C4 % F/ |7 y+ q6 ?( ~# j) ?00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] & }3 S, P/ a7 A( o00B079B4 50 push eax# j# Z! P) g/ D 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA3 p9 P9 J( [, J0 y0 \3 B) q 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 2 N3 o% o" u( ^3 T3 r- W# T4 V00B079C1 89040E mov dword ptr ds:[esi+ecx],eax 1 ^! a k8 ?8 W' ?9 r00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] + l4 y& N2 Y! o' @00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi. x. t P# v9 G1 {1 S0 L 00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

- R' s2 Q- V% o# s& [ B

改为

5 ` I3 X2 F5 E5 F, T/ l& h

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA. W6 |6 P6 Q: K7 i; j7 b: I+ X 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]8 u7 q" [# _- H3 y! Q. B, j5 p 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax) n c8 j) ^& l8 d3 o4 t$ I 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0] i6 L, d8 v# p) f, n3 A: s( j00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi ) y' W# w2 E) T0 O$ y6 \00B079AC 75 16 jnz short 00B079C4 3 ]. [8 q. ], l, J2 {. u c, Z00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] % {( X2 i" P$ u2 D$ P00B079B4 50 push eax b$ f4 ]$ I A* D8 ^0 D 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA: \/ }( P' p% t) Q 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] ! G' C$ b+ l" X% m4 [00B079C1 89040E mov dword ptr ds:[esi+ecx],eax + @7 o7 t8 K2 Q( T% V4 `0 t+ K3 h00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] 4 W; G. W: N) Z; |0 j& ]00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi ) M1 B) E9 A& Y6 x6 x# T00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

1 }# Y6 C! d3 u. i8 u" P( q/ [

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

, L; Q" @1 `$ g8 H" K k+ F

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

+ N3 ?, N. @+ s6 u0 U; c( f

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里& z$ t" X- `( O/ @9 K 00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54] * L4 O2 n0 B* l X$ N2 X2 x6 `00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 5 d/ W/ n& x! x6 d$ S7 R7 {8 }00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4]+ F. U6 K+ T) {" b 00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260) `5 O) O7 I, y6 x) X& B 00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74] 4 C: i) h) `( p; ?00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260# R: N6 M) Y6 }/ s3 J$ a7 [1 j6 i 00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30]! N- o4 f( H9 d3 @8 |; H) h- w 00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 $ Z6 U' U8 }9 C) J4 B7 N* Z00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

1 Z2 S5 J$ N1 ^9 S. N3 z

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

# `& E1 _, k8 ]' d" q

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

; @5 K3 f6 w6 B9 @8 i& m

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

" D5 W' K3 |/ o7 `

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

0 m! f# S Q# I7 \

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

+ K: a' x" j% s; p, M. C/ t2 s

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

# v [. `. I( Z( r

77E7A6CF K> 55 push ebp //来到这里,F2清除断点 , }7 v" D0 w) }- T4 Y/ `+ L7 N77E7A6D0 8BEC mov ebp,esp , k5 C2 w: r% B [4 C77E7A6D2 81EC 9C000000 sub esp,9C 9 Z$ i/ |; |/ @) F. y3 f; ]5 k {6 i77E7A6D8 53 push ebx $ o6 U0 ]0 _( w" `4 a" q77E7A6D9 56 push esi0 e4 f3 ? L9 }' v2 I3 N 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-8-14 19:25 , Processed in 0.294074 second(s), 52 queries .

回顶部