QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

菜鸟手动脱Armadillo CopyMem-ll +Debug-Blocker壳全过程,超详细。。。 - i0 d/ k: w- k- g2 u【使用工具】 Ollydbg,Loadpe,Imprec1.6F

; C* P: Q- ?) K- {

【脱壳平台】 Win2K

4 k; o! p8 D, V+ h V6 D5 @

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

1 H. X& \$ D1 O3 S& {

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

+ |" _- t$ I% i: z2 E4 G) `9 r

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

9 {: g5 ?1 Y1 O" R

【脱壳人】飞舞的T恤8 \# c) T9 [/ G9 `7 C$ F' h5 G- C --------------------------------------------------------------------------------

i ^3 K/ y& }: ^

【脱壳内容】

; ^$ H. w# D/ j/ A4 @$ g! Q

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

" c' A z! w; V6 x6 r+ P

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

+ S3 m$ ^ v0 @) r

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

: ^ s( |8 t6 ~& ?) {

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

4 x' x3 P3 L& |6 f

00485000 按> $Content$nbsp; 60 pushad //外壳入口 ; f6 E" j, @+ c* o0 ?# v00485001 . E8 00000000 call 按键精灵.00485006 ) A8 l2 n# ^) G- J00485006 $Content$nbsp; 5D pop ebp / [" @! M7 K+ J8 z; {0 F- L00485007 . 50 push eax& s) U! `( Y. n9 {$ M 00485008 . 51 push ecx6 \0 `7 T9 U% L- y$ p 00485009 . EB 0F jmp short 按键精灵.0048501A0 s; I- ^6 ?% J4 V: J, b" N' C .....................................................................

3 W; h8 C3 p( r/ `9 w

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

/ s" [ \" v$ ~) }0 b& N4 C7 d3 s* N. i

中断

5 n# A7 R, D, U8 W, P& F1 l( A

77E6C503 K> 55 push ebp ! |# G9 M7 P4 X6 n77E6C504 8BEC mov ebp,esp$ J# W/ H6 Q( J6 b 77E6C506 51 push ecx% _; A/ x, X: P& M" R 77E6C507 51 push ecx' J3 q3 E: Z8 `6 F& ? 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 * t' P9 [0 d) v$ A% `5 |77E6C50C 56 push esi) {3 @" H8 {" Z+ Q 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D ( I5 H @* r3 m& U( w0 i& X+ }5 x.....................................................................

- [) o3 u' U/ e7 m @: ]

堆栈内容

' C z- E6 \, x9 @1 C

0012F574 0045C5F1 /CALL 到 OpenMutexA 4 n5 R6 |( G- l6 W9 Y+ k0012F578 001F0001 |Access = 1F00018 d, p. L( [* y3 l 0012F57C 00000000 |Inheritable = FALSE / T( x) ^; h: e- }0012F580 0012FBB4 \MutexName = "2A8:AC7B8F140" //注意MutexName 这个地址 每个机器不同,以看到的为主。

1 X! ~/ O( C/ i

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

& K8 P8 C* U$ f% h# u9 [* j

Ctrl+G 401000

2 A' F( g$ u6 W: J# T

00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。; |6 e/ O3 M! c) w) W9 w- v/ m 00401002 0000 ADD BYTE PTR DS:[EAX],AL : }! V; E6 X. D00401004 0000 ADD BYTE PTR DS:[EAX],AL 0 X2 c2 c0 |& K! W00401006 0000 ADD BYTE PTR DS:[EAX],AL$ q v+ {% t% V3 f 00401008 0000 ADD BYTE PTR DS:[EAX],AL h& X+ U' I" U% ` 0040100A 0000 ADD BYTE PTR DS:[EAX],AL " k( @4 O U8 p! E3 N0040100C 0000 ADD BYTE PTR DS:[EAX],AL0 k5 h; H. ]! S$ C 0040100E 0000 ADD BYTE PTR DS:[EAX],AL

( |2 U" ~8 J: x b

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

2 k8 b, P" q+ Q5 F

00401000 60 pushad7 q* U! K4 n. ^: X 00401001 9C pushfd, `) \6 l3 M2 U 00401002 68 B4FB1200 push 12FBB4 ; ASCII "2A8:AC7B8F140") a& k6 t" H8 q. {! U 00401007 33C0 xor eax,eax2 ^8 w+ W4 x" f1 t# j# \9 d* D 00401009 50 push eax ) r+ s: ^8 _! _, T% e8 g7 p' A0040100A 50 push eax8 m# X5 ~% o- z, d$ T 0040100B E8 6D97A677 call KERNEL32.CreateMutexA i# K8 |$ g! }1 r& _ 00401010 9D popfd/ ^0 [+ W4 [2 `! r1 X 00401011 61 popad, M; f# s# N6 |9 P 00401012 - E9 ECB4A677 jmp KERNEL32.OpenMutexA+ A5 ?3 o2 E5 Q0 `8 b' Y; r/ O1 \ ............................................................

' o$ c7 ]5 p/ \: C7 k& P) o8 Q

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

. A/ `5 v5 j% @7 i. x

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

6 X1 ?$ c; t, r

F9运行。

/ }6 N+ ~$ W$ N4 j9 u

中断

2 x/ |! K6 [0 S1 k

77E6C503 K> 55 push ebp //双击它或F2清除断点。 , V8 N) f0 |8 e: r77E6C504 8BEC mov ebp,esp 1 p% V2 i9 a7 k' y O5 I77E6C506 51 push ecx; T/ q R4 ^8 h$ P2 }+ j 77E6C507 51 push ecx* S/ N5 [. J m0 A0 i 77E6C508 837D 10 00 cmp dword ptr ss:[ebp+10],0 $ R; e" F3 l) N+ \! |' M77E6C50C 56 push esi4 L7 g) A* o- b( b 77E6C50D 0F84 4AB90200 je KERNEL32.77E97E5D* T g t, D" y ............................................................

) h: ~/ z. |- u: ?% W' _, q

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

8 F; `, j7 e! ~$ x' y5 G2 B

77E63DFC K> 55 push ebp //F2去掉断点,右键改为硬件执行。 ; K( J6 p/ ~" J8 r77E63DFD 8BEC mov ebp,esp . _+ s% J5 I; B2 S6 W' B77E63DFF 837D 08 00 cmp dword ptr ss:[ebp+8],09 r$ S. ]/ m, r7 Q3 Q 77E63E03 74 18 je short KERNEL32.77E63E1D 5 r- o% F1 p) q P2 [77E63E05 FF75 08 push dword ptr ss:[ebp+8] c6 N' Q1 B% M& ^/ `. G0 f 77E63E08 E8 87FFFFFF call KERNEL32.77E63D94 - u2 U _9 k+ f, Q" e( ]77E63E0D 85C0 test eax,eax' j! t8 B: Q M q, Q& c 77E63E0F 74 08 je short KERNEL32.77E63E19 ; }3 ], U, L$ d! z77E63E11 FF70 04 push dword ptr ds:[eax+4]& U# ?5 m0 K1 H& `8 t r 77E63E14 E8 3F240000 call KERNEL32.GetModuleHandleW 7 C/ {' I5 ?$ q; E/ K77E63E19 5D pop ebp0 L5 ]7 \" [+ Z) B+ } 77E63E1A C2 0400 retn 4 ) \; A {; u7 Z8 T) z........................................................................

, ~' Z8 c4 A! E3 M4 H" ^) |9 ?; s4 N: T

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

% z# c) P1 I3 c- U

7次F9提示一个非法指令错误,Shift+F9忽略。& o: z9 V4 D( @7 w, X& N. \ 0012BEF8 00B1C807 /CALL 到 GetModuleHandleA 来自 00B1C801 # r: d( \2 Y/ W# A$ q% z0 N* l1 I0012BEFC 00B2D6C8 \pModule = "kernel32.dll" ; ~3 O2 o0 I% ^% F0012BF00 00B2E67C ASCII "VirtualAlloc"

3 T% j- C+ ~8 _

0012BEF8 00B1C824 /CALL 到 GetModuleHandleA 来自 00B1C81E ) D4 w3 n) K- F* Z. X4 l' g/ T0012BEFC 00B2D6C8 \pModule = "kernel32.dll": L, Z a, z) P _ 0012BF00 00B2E670 ASCII "VirtualFree"

; y7 p1 \+ B" Z1 D* p

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

2 R, M |& v/ r% I/ V. M* h, R+ |

堆栈内容

, p& c F c- N! O

0012BC70 00B0799B /CALL 到 GetModuleHandleA 来自 00B07995 % Y6 Y6 F- h" L6 a0 y/ H& F0012BC74 0012BDAC \pModule = "kernel32.dll"

# w: J/ c8 P$ M. O

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

* X& E/ m: y9 C& g7 W$ Q/ s

Ctrl+F9 返回。

" G* p' ?% b: ]* h; ]1 {4 p. N; e1 C

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA- q% N9 S) ^/ k; y3 y 00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]" N: h% J6 G; V* g 00B079A1 89040E mov dword ptr ds:[esi+ecx],eax : M/ N8 J; J. L. h9 ?( e$ y00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]1 T+ E6 K3 z6 S2 m, r! R 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi3 }" t( ?' d$ C2 e v$ j9 l 00B079AC 75 16 jnz short 00B079C41 V; q& [. I( Q/ Q. B, p. t 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]1 f9 H# w- K2 Q! z& U# e* A 00B079B4 50 push eax S) _$ U( A# B 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA( E/ c; Z/ K% Z- N8 Y% M 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]! {7 `8 n2 c i; i; O 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax5 Y$ ^+ a; S. ^) e- _4 c, B 00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0] " k6 _0 M. b* b/ d) Y/ O7 M+ |0 ^00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi : t& z; f( Y+ i7 y8 O' x00B079CC 0F84 AD000000 je 00B07A7F //这是文章中提到的magic jmp,我改。

/ e9 }! C( z2 a: S: ]

改为

j9 X3 p/ p( k

00B07995 FF15 C480B200 call dword ptr ds:[B280C4] ; KERNEL32.GetModuleHandleA ! W( n+ X* x) Q* H7 M% I) C00B0799B 8B0D E011B300 mov ecx,dword ptr ds:[B311E0] 1 l; }. Y% Z' V' ]2 E: w/ Z00B079A1 89040E mov dword ptr ds:[esi+ecx],eax 4 P+ w' j5 f7 u# { C00B079A4 A1 E011B300 mov eax,dword ptr ds:[B311E0]4 p# i/ ?" S. |& N5 W/ y0 g R+ k4 z, Y 00B079A9 393C06 cmp dword ptr ds:[esi+eax],edi& ^; g. b2 i* [. _% j( S! k& _ 00B079AC 75 16 jnz short 00B079C4, ]; N/ @* S, v 00B079AE 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]9 P8 q1 E5 | a3 x' Q+ [ 00B079B4 50 push eax% N- }; }6 M! ]9 T1 L# Q/ z 00B079B5 FF15 CC80B200 call dword ptr ds:[B280CC] ; KERNEL32.LoadLibraryA, Q$ b3 E) S' J. j) T3 W 00B079BB 8B0D E011B300 mov ecx,dword ptr ds:[B311E0]# e7 O7 I7 j% o5 d% v1 J, m 00B079C1 89040E mov dword ptr ds:[esi+ecx],eax 2 P3 }3 ~6 r6 N/ g( `00B079C4 A1 E011B300 mov eax,dword ptr ds:[B311E0]( [' w1 g, V4 N! B" A7 p 00B079C9 393C06 cmp dword ptr ds:[esi+eax],edi ( S, g, ]* ~- {8 H3 I+ @00B079CC E9 AE000000 jmp 00B07A7F //修改 (我试过改标志位Z)

5 x5 a h: Q3 R/ }

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

" `! \) N7 G7 e: A A4 X

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

( n& ^* Q4 s" g9 ~- q

00B206B2 8B04B0 mov eax,dword ptr ds:[eax+esi*4] //来到这里 ( v; g5 P, f9 W7 y0 N3 K& [& ?00B206B5 3341 54 xor eax,dword ptr ds:[ecx+54] ' p1 `! A/ z# M2 J/ U00B206B8 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.004952609 ~0 L, v% J9 v/ N 00B206BE 3341 04 xor eax,dword ptr ds:[ecx+4] 8 t O5 I# k+ N. I00B206C1 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 2 u7 H; A* p# F6 W: } t00B206C7 3341 74 xor eax,dword ptr ds:[ecx+74] 0 H( Y* [1 Y9 d00B206CA 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260 1 k3 v$ t; R2 ]$ }4 f00B206D0 3341 30 xor eax,dword ptr ds:[ecx+30] 3 L" E6 y1 c; M/ ^* O1 a00B206D3 8B0D 9455B300 mov ecx,dword ptr ds:[B35594] ; 按键精灵.00495260" R! C& i% |3 T) t 00B206D9 3341 20 xor eax,dword ptr ds:[ecx+20]

; |3 r( @3 D" k) I* u

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

2 e! p& Q% L) a. o4 Q4 `

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

* ` X! M: n2 J# H# p% j

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

/ M4 ?5 E& S/ r+ i

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

# r# q' o% D: b4 f/ Z

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

+ d; Z' ^- I& g1 f1 O/ q) `

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

# ]! v) s1 m1 @$ u! B

77E7A6CF K> 55 push ebp //来到这里,F2清除断点 + m8 y. R. A& I* w* d77E7A6D0 8BEC mov ebp,esp & H/ B4 l" ~' {77E7A6D2 81EC 9C000000 sub esp,9C # v. p' n( P- ` D) w' v6 v. U+ s77E7A6D8 53 push ebx ! x' H2 e% ^! y; r' D g6 F77E7A6D9 56 push esi & r& z3 X, u w% Q+ ^# {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, 2025-12-28 16:52 , Processed in 0.523402 second(s), 52 queries .

回顶部