QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 / R) d; Z" s1 y8 h+ p, h【使用工具】 Ollydbg,Loadpe,Imprec1.6F

/ }: P4 c" u5 I) U

【脱壳平台】 Win2K

" u5 _0 d# D5 ]# r; W+ ]; _

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

5 c" j5 d. l/ _

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

/ B8 P0 l. M8 Z1 _" |( ~( j, A# c

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

5 x; x% I9 A3 \% N

【脱壳人】飞舞的T恤9 | H3 b# k, E0 d8 G; ?5 J, G. @" t --------------------------------------------------------------------------------

/ }" \! Q" x3 g2 r, ]. P7 l

【脱壳内容】

9 s, V, ?3 m2 x( `3 |

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

5 v8 U' [% l. F

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

( n6 P) s9 P6 c8 ~- R8 f

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

: n4 h7 f: ]+ u% e& [. w

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

% h3 h- w% D1 f+ G

00485000 按> $Content$nbsp; 60 pushad //外壳入口% t8 ?: g# F' ^ 00485001 . E8 00000000 call 按键精灵.00485006 i0 b6 y' g" K! q1 _$ k; B 00485006 $Content$nbsp; 5D pop ebp # Z# h6 h! n# ?% k" L+ ~) F00485007 . 50 push eax3 H& I5 ?0 R% e! p! V. r 00485008 . 51 push ecx 3 L# t* x6 ?( m8 x00485009 . EB 0F jmp short 按键精灵.0048501A" w3 o: a0 E* ?5 n .....................................................................

8 v9 [" ^' ?/ n: h$ s) a* @+ A

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

$ L% P. d+ Z) d0 @

中断

7 B7 F3 S* B, V. ]2 j8 o. p

77E6C503 K> 55 push ebp, b% @ s$ S0 E M. R4 T* g% O 77E6C504 8BEC mov ebp,esp " I& j0 k1 K+ y; s8 W, w77E6C506 51 push ecx . b5 y6 O+ B( Q. Y( y$ f1 w$ R77E6C507 51 push ecx& ~! @+ {( Q! T6 `" Q J 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 4 _' J9 E/ ~- w% W! q) _77E6C50C 56 push esi V. O5 `" u* A& }' G7 L77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D ) K7 G& @- [4 M% u6 e- }1 [# g0 A2 N.....................................................................

7 H, [! z8 o' U, C, L+ V

堆栈内容

' R1 M+ u" K/ b+ C* U, ^

0012F574 0045C5F1 /CALL 到 OpenMutexA! Y: o( A# t0 r: d) L 0012F578 001F0001 |Access = 1F00011 Z2 a* \+ B5 \( A' N" b+ a5 M 0012F57C 00000000 |Inheritable = FALSE , u: W( e. R) C2 @% C2 i& P1 v0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

F3 B. C n- f0 a$ p! E# _- C

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

7 m; |4 j/ _3 h4 u

Ctrl+G 401000

: G0 b8 ?3 ]$ M3 }

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。 $ G( o3 {- b8 r8 N% l; V00401002 0000 ADD BYTE PTR DS:[EAX],AL $ d# U* t6 w& g. E; [6 |. n7 O; [00401004 0000 ADD BYTE PTR DS:[EAX],AL & t) j9 c1 A6 W$ C4 ?3 M: ^00401006 0000 ADD BYTE PTR DS:[EAX],AL . X e1 p. B4 Y4 U& S00401008 0000 ADD BYTE PTR DS:[EAX],AL( n5 `0 c3 Q. o- L 0040100A 0000 ADD BYTE PTR DS:[EAX],AL / O1 E3 ~& z, M" q4 m0040100C 0000 ADD BYTE PTR DS:[EAX],AL 3 x1 I n8 _4 V* i8 q( ^, D0040100E 0000 ADD BYTE PTR DS:[EAX],AL

9 q) }( e8 v! ~% y" q/ c' n* m

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

; @3 ~, \4 v% E( C

00401000 60 pushad 8 P5 L- t: c" n h# f# l00401001 9C pushfd7 \; x! |/ G) r$ { 00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140" 3 P/ k( I# l: g9 N00401007 33C0 xor eax,eax W" {- Y \6 m g% d# _- J! Y3 w 00401009 50 push eax 9 s4 Y; u. L4 {* e. }' ]0040100A 50 push eax + d' n$ i+ ^9 k9 x) e, t' @- M0040100B E8 6D97A677 call KERNEL32.CreateMutexA * W( B& {" ^1 [9 s& V& _ r, k) Y00401010 9D popfd- d+ o0 t( A, B& h 00401011 61 popad 5 n/ J! l5 x2 @7 G- i( d4 \& P* j00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA$ U: Q% c& a" f- q ............................................................

' G& |; i* U2 R z' J

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

4 I' O* ~1 j/ ?( Y

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

/ E. _, Q6 c' @5 z( s5 X& }

F9运行。

" c" \/ x* q; X) [7 L3 j

中断

3 w+ p6 u8 ?) {3 n

77E6C503 K> 55 push ebp //双击它或F2清除断点。: g' A0 q. F( {. K3 V( V/ X 77E6C504 8BEC mov ebp,esp , s- P- ]" @* f* I: ^8 F1 Y77E6C506 51 push ecx6 P+ `6 L2 L% ^# j% b 77E6C507 51 push ecx" N% O1 C2 t! j3 O/ U/ O 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0! d( j* p3 y8 b! u8 H4 P4 G Z 77E6C50C 56 push esi : F* r9 }( k/ M( [/ v% {+ w- P# |77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D1 @6 k- t1 K5 j& _8 E ............................................................

! F9 R$ S f1 Y3 x- B

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

( L/ j4 n' s3 M k

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。7 g( a" [0 u: N5 C5 ?8 o 77E63DFD 8BEC mov ebp,esp ( M/ s! I7 l6 W2 i77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0. U. \- S9 y0 X; O4 c 77E63E03 74 18 je short KERNEL32.77E63E1D& C, k' C1 s0 `8 h 77E63E05 FF75 08 push dword ptr ss:[ebp+8]/ S6 ]/ ^- p8 G* ^ 77E63E08 E8 87FFFFFF call KERNEL32.77E63D94 6 q9 Y3 ~9 Z' c9 G77E63E0D 85C0 test eax,eax ' l! J. P. T. j, _+ H% U77E63E0F 74 08 je short KERNEL32.77E63E19 0 i! a# x& D) |1 R77E63E11 FF70 04 push dword ptr ds:[eax+4] ( \0 x) E" \+ L0 i77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW * n/ C. C5 J( g! B- J A- b77E63E19 5D pop ebp/ t+ _/ D; W: J& }' A" W 77E63E1A C2 0400 retn 4) l$ @2 Q+ O1 g/ p$ y6 r0 ]. F2 Q/ [ ........................................................................

7 K- z& j) j8 ?- q

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

- `: Z5 V) u+ D

7次F9提示一个非法指令错误,Shift+F9忽略。; D! J+ h7 [& v& s. z; E 0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801 & ~, [/ w y/ q# b0 E0012BEFC 00B2D6C8 \pModule = "kernel32.dll" % p E t5 O" |2 {5 B$ ?$ `* B0012BF00 00B2E67C ASCII "VirtualAlloc"

' y5 ^" r1 f1 H! i

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E3 |0 t( `( E% s$ O5 q W6 e% q 0012BEFC 00B2D6C8 \pModule = "kernel32.dll" - z% w7 O: {6 E7 ^- r% W, ?0012BF00 00B2E670 ASCII "VirtualFree"

$ y2 j' a: P) V( z' I3 P9 t' b

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

7 p, y) h; A0 b/ k( ^) o

堆栈内容

+ \: P8 M |& v4 b$ v

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995 4 H) f6 F3 Q/ k, a, W0012BC74 0012BDAC \pModule = "kernel32.dll"

; x- W1 e1 s! N! z( S7 j; V

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

' v# y' N \$ G. C' r

Ctrl+F9 返回。

+ U1 L% D. h! Y$ T9 {# v

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA . P: w8 ^# n" n- H+ X0 \00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]5 a% B6 i8 z4 g5 B6 ] 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax* e# \! l: g: v' J' Q; c) Y' ` 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0] 3 c0 s. h5 L/ B00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi : v4 ^! p8 t( \: s00B079AC 75 16 jnz short 00B079C4, C/ A- P5 ?0 P( w# C" t 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]8 x$ V! Y$ O O, p& ? 00B079B4 50 push eax* w" e# H4 J# j' T9 G2 W- N4 N! z+ I 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA7 y' r1 u! j1 W! Y, h; X 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]6 h- f/ G: o! {! L- d7 j 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax# Z( e: S( z; ~6 X1 b$ z5 p5 M4 C P 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]! T% N) d9 x. s1 n9 \ 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi + ~: o. y3 O: h3 S* ?* f4 q7 u00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

9 I7 D( E I# V$ Q. Q

改为

2 ~. C z+ v) m( i' Y( S" O

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA 0 d! G! }7 K# B2 e7 l00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] ! n$ `* i: G7 R1 |4 j- {8 @3 j00B079A1 89040E mov dword ptr ds:[esi+ecx],eax 2 q5 v& ^' l9 R* a9 _$ T$ M8 u |00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]5 o' o& ^1 x2 r. i2 S 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi& X9 \, W! A% n } U3 A- d: q 00B079AC 75 16 jnz short 00B079C4 ; N; _; W: |; g Q00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]! X) {/ L- B/ E; E- x: G 00B079B4 50 push eax0 j$ o2 O' l/ K1 R w9 A 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA0 m) Q7 s \, z 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]* z$ i# [1 ~4 z7 v+ y: s 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax y4 c0 H9 K4 p5 j2 z00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]" e" ?, m; l9 O# k 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi A" N6 m6 _8 i. G8 c/ g00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

. _; i4 p2 J$ K: H) [/ d

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

4 y- q0 x; Z2 E& X

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

+ J7 U6 Q% c/ z$ c

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里 : t3 J C; C' x00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54]1 D, L% m8 E% W5 _ 00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 3 N1 h% S9 }! ^# N) Y00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4] s. K* R: [( M4 y00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 & Y/ _: q" k. i% S# W00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74] * Y6 F8 j1 Y3 g, [ g00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260; }+ J$ \4 S. {5 \ f% h 00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30]- S$ D/ L3 d8 i: D* P) f0 W 00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 ( M" Q* ~; F: E: O- z00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

; t) L" r; q7 F* X6 S) F

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

! d0 G; f+ L! t7 \

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

' C' @. W6 S7 Y

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

1 k& u; V- y8 y% ?% y

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

1 ^ S+ u, q0 `

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

4 [4 m+ Y% m* _, [

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

; r, W' } w) x2 K$ \2 @/ [! H

77E7A6CF K> 55 push ebp //来到这里,F2清除断点 # w. _3 a* z }77E7A6D0 8BEC mov ebp,esp 9 |8 }' k+ k7 V4 h; C77E7A6D2 81EC 9C000000 sub esp,9C 5 _& H( [5 b* q77E7A6D8 53 push ebx * ?3 P5 u! ^1 j( \77E7A6D9 56 push esi: Z" g; H9 [4 F7 b& e 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-4-21 05:33 , Processed in 0.441959 second(s), 52 queries .

回顶部