QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 * H2 g5 P. S, F! d* @+ X【使用工具】 Ollydbg,Loadpe,Imprec1.6F

! d+ L' P8 l/ N% T- s$ M

【脱壳平台】 Win2K

$ q: X5 X; J/ u! y! {$ |/ r

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

5 x; h* Q6 h2 b3 p+ m ]$ ^

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

% j# I! U+ g5 @) O

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

' _3 n/ v$ Z' Z/ N5 x1 V

【脱壳人】飞舞的T恤 # C5 s/ F: g0 K--------------------------------------------------------------------------------

, Z1 f+ L0 g H! b% B1 l7 a

【脱壳内容】

5 E' X+ r( T" n! J Q, E

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

+ k0 r7 h& J; B1 D: q& W

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

; C& p6 b) n6 y& O

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

3 Y$ |$ d+ Q3 E z5 m

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

( x1 B/ |: f# f

00485000 按> $Content$nbsp; 60 pushad //外壳入口5 P; X1 o& R6 l# x- k9 F4 J 00485001 . E8 00000000 call 按键精灵.00485006) G; M8 E5 Z; G7 ^! f' e* H 00485006 $Content$nbsp; 5D pop ebp ( H; J1 V/ {, F00485007 . 50 push eax % i, o' b! r! y00485008 . 51 push ecx 1 s& r- \' B5 ~. ~+ S, e0 f00485009 . EB 0F jmp short 按键精灵.0048501A* C6 P: ~8 V+ I+ g: O .....................................................................

( i- }1 h) w% }9 x2 X

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

! o0 d2 V* d1 H7 c6 ]$ P

中断

7 C7 s u ^% }8 |/ v5 d

77E6C503 K> 55 push ebp " n/ y J. ~3 @6 U7 \77E6C504 8BEC mov ebp,esp) r' C) ~0 T$ {2 } 77E6C506 51 push ecx ) w0 q$ r$ W$ ^' A8 K( t# H. _77E6C507 51 push ecx 1 [) C; @6 F8 m" M8 S4 k8 _77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 $ `/ e. X1 ?! k" B77E6C50C 56 push esi( t$ o5 U2 @3 y; V- Q- F 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D " S; R d& s7 f4 v2 ^.....................................................................

7 u' v$ _8 N) X3 R" ^9 O4 e

堆栈内容

0 [9 h* ^; t, p0 p

0012F574 0045C5F1 /CALL 到 OpenMutexA' u/ q; U; \3 u# d0 D4 i 0012F578 001F0001 |Access = 1F0001* B0 I( E! a3 q' k 0012F57C 00000000 |Inheritable = FALSE 5 g6 y( v9 ? w P/ @8 o. o0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

4 P0 d# `0 |0 u# Y

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

, w8 N% W- |% G: R

Ctrl+G 401000

- ]1 ?: L% W7 W# Y: r/ X

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。; J7 _ m1 p/ Q- Y0 F; W 00401002 0000 ADD BYTE PTR DS:[EAX],AL. ?! w& T% d1 r; i2 u9 Z 00401004 0000 ADD BYTE PTR DS:[EAX],AL 6 y1 D7 c# v5 I, q1 X" K0 [( p+ T$ H00401006 0000 ADD BYTE PTR DS:[EAX],AL & U4 Z6 }, z6 r6 G: Z, w- S0 t8 A: E00401008 0000 ADD BYTE PTR DS:[EAX],AL# T+ t/ F4 x: _/ A; [4 L9 o& p7 c 0040100A 0000 ADD BYTE PTR DS:[EAX],AL8 M1 G& s* i8 L* s! t1 O 0040100C 0000 ADD BYTE PTR DS:[EAX],AL - |0 j5 y2 ^/ V! Y2 L1 v) q' z0040100E 0000 ADD BYTE PTR DS:[EAX],AL

p8 k. |: ~) f% d

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

0 M# h' _! m9 o" U# F

00401000 60 pushad |7 `2 g7 b% G6 |7 N00401001 9C pushfd 7 b2 J+ C+ j1 Y) ?4 X00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140" # o, p. e8 z, V9 Y) }2 s3 }, I00401007 33C0 xor eax,eax ( Z- ^1 Q* N) T8 N3 j# S00401009 50 push eax ~1 P4 \ \ P% e. v 0040100A 50 push eax0 I, ~# @+ K5 S- u( f% o 0040100B E8 6D97A677 call KERNEL32.CreateMutexA $ f+ }. C0 E9 c& y8 l6 z# t+ `- r00401010 9D popfd- Y0 A4 ]+ M% `! T$ s2 C2 b 00401011 61 popad% Q' h9 R ?" ] 00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA% y3 N6 O. Y% }5 Q C2 z ............................................................

6 I2 F- ~3 s7 z; D- A" v9 V+ e4 k

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

" C# ~ I- l$ _9 ~3 l" N

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

9 i3 l) u7 z5 U3 N& `

F9运行。

" s; L# _. x, M* [: @7 e

中断

5 H+ Z* ?/ g% N" b/ `2 s

77E6C503 K> 55 push ebp //双击它或F2清除断点。& e% |$ G2 _. v, `* E9 P! Q0 i 77E6C504 8BEC mov ebp,esp 0 b) t9 D' D: c- B77E6C506 51 push ecx, f4 J |) X' X/ H 77E6C507 51 push ecx ) y) W: T4 a. B8 T77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],09 |* B, N: K: H% G" T% f s+ c# K; ` 77E6C50C 56 push esi + ~ l0 n: Y4 O& F y) W77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D # P* B7 o2 [' `5 g9 V............................................................

9 \) v# _% t, i8 | M7 h

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

* m, B+ A/ y. Y$ a( s

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。9 d4 _2 K& r' [ 77E63DFD 8BEC mov ebp,esp8 H' n: K: R, z2 M) w 77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],0 ' h# u. Y5 N6 }' P, k77E63E03 74 18 je short KERNEL32.77E63E1D ) G8 \% q1 Y6 \8 v77E63E05 FF75 08 push dword ptr ss:[ebp+8] 4 T/ k0 |9 W3 b4 { V, o* h77E63E08 E8 87FFFFFF call KERNEL32.77E63D94 5 |7 ]% ] ~/ U! a9 F, }* U77E63E0D 85C0 test eax,eax ; x l. D( w( v ]4 r77E63E0F 74 08 je short KERNEL32.77E63E190 o! E4 G# g g9 N& i 77E63E11 FF70 04 push dword ptr ds:[eax+4], R/ s/ B, V; v$ E1 o& J 77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW 6 s# F# ~; |6 W: Q77E63E19 5D pop ebp " R- s" j0 J3 B7 r* @77E63E1A C2 0400 retn 4 K2 {8 H4 E, u ........................................................................

* {2 Q2 N6 F6 A$ x8 ^

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

% R5 H$ c) l5 L

7次F9提示一个非法指令错误,Shift+F9忽略。 # }1 K2 v; B5 _0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801 . w- X3 e2 U% M1 ]# k0012BEFC 00B2D6C8 \pModule = "kernel32.dll" & c" n# Q7 w$ d0 O% D0012BF00 00B2E67C ASCII "VirtualAlloc"

& }+ z% O( O- Z% q- a

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E $ f4 [$ e" J# }, L. |& _7 D0012BEFC 00B2D6C8 \pModule = "kernel32.dll"! {% q# f- u& W$ k" W/ z 0012BF00 00B2E670 ASCII "VirtualFree"

# F& o {; _1 O3 q+ @7 I

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

8 Q7 p l) `/ R7 M

堆栈内容

1 a0 i0 z0 W4 P. {

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995 - b) f6 O6 [0 G3 Z; @6 k+ l$ j0012BC74 0012BDAC \pModule = "kernel32.dll"

$ ` E3 Q A- w$ l; l/ R3 Z

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

% _4 V6 S9 P1 E/ \

Ctrl+F9 返回。

" m* W6 g, p# Z% Z) I5 k

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA , M, G4 g8 n4 `8 c- b00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] / t3 Q% F+ l+ }4 r; w; L8 |: O00B079A1 89040E mov dword ptr ds:[esi+ecx],eax1 }$ Z) d5 f% S% e' {' F 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]" K( ]1 M2 k4 s; g' w- Y% S) b 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi , I/ M7 v. K }$ ~: Y# _7 Y00B079AC 75 16 jnz short 00B079C4 % a1 q# j- ?' ]3 g! {00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] $ Y. V% V- K7 ?00B079B4 50 push eax , E; o2 S$ X: Z00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA / m% B) _5 A# G+ [( t; X, V00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 4 _/ \, z. V$ F \00B079C1 89040E mov dword ptr ds:[esi+ecx],eax 5 T3 m! P$ b: ^' N00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] ! Y- o7 W# W3 t' M8 r00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi 7 |/ i$ E1 m& B. e- j! `+ U00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

' K$ y( C5 n$ `+ z+ T9 D4 G! D7 @

改为

% k3 E8 [6 W1 C* b. m3 W3 f7 `

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA 9 b4 n( g, o+ R) Y00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] # E6 ?; a! {% z- G8 V00B079A1 89040E mov dword ptr ds:[esi+ecx],eax& ^! A/ g" `0 m2 j2 U$ B 00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]( I) r, U9 @/ a5 t4 F# `' I8 o+ E+ K 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi 2 _+ A6 Y" A f$ V00B079AC 75 16 jnz short 00B079C4 ) n% `1 ]8 e/ J5 l" m0 h0 _9 T3 H00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C] " ?/ g0 [4 ?+ B- G00B079B4 50 push eax8 [ x! b/ I" c0 @. Y- u 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA 3 ^/ _) S, \! z. X- c00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]. T* w& b5 h) F' K# Y 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax' f' j9 v1 z7 j. V 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] . s- |3 S9 I7 C& L% ^) f00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi ' {& h7 h; `8 b+ M4 |00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

/ A/ A$ Y$ E! n/ Y

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

8 @! D7 c# l# r- m" ?

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

3 E- g; F% o! Z; `

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里# I5 L% Q4 ]/ k 00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54]: k/ v1 a8 A. z. d& ` 00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 ( G& Z7 @' F8 i% N$ S, x- _00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4] 4 j5 b/ Z1 N4 n4 s$ x' A% w00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952602 ]: H2 z7 r2 y* |/ s 00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74]9 i* L/ v' }' ~% Y, O# [" F6 \ 00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260, `) R! Z0 u$ K5 p- R3 w8 g4 j. k% H 00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30] 0 v, v% b/ j9 ?- E9 G00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 6 N- H. _5 i0 E! r00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

7 Z5 U/ l! k6 f

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

: U4 X( F+ l4 N: L: c7 x5 R, U

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

& C7 M+ A1 _9 n! `6 R! T2 {4 P

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

: V% u+ p" u% B \

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

# y/ p- o4 j2 g9 @: @, q

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

8 x6 n( V6 T/ C" n& ?

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

4 M! {- h0 k7 m3 _% Z

77E7A6CF K> 55 push ebp //来到这里,F2清除断点 6 j" p2 h3 |+ Y5 J& g77E7A6D0 8BEC mov ebp,esp+ g$ t' | a! {0 `- |) u$ @ 77E7A6D2 81EC 9C000000 sub esp,9C: W2 m: ?- M* \2 a 77E7A6D8 53 push ebx1 R/ p3 C7 Z* r9 n( \' z- ? 77E7A6D9 56 push esi3 n; a$ w" T- R2 _6 [( @! v 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:28 , Processed in 0.480329 second(s), 52 queries .

回顶部