不知道你是否曾碰到过bios里面能够检测到硬盘
不知道你是否曾碰到过bios里面能够检测到硬盘,但是你从软盘和硬盘都启动不了计算机的情形?也许这时候你就会认为是硬盘坏掉了,可实际上,很有可能是你的硬盘中了逻辑锁。
y! S) S; @% t1 P- o' _5 ^' D% R7 I$ R4 K& m
硬盘逻辑锁总共有三种,本质都是对硬盘的分区表作了修改,以前只是一些黑客程序使用它,开始大范围对计算机造成危害是在臭名昭著的KV3000反盗版事件的时候,那时江民公司为了打击盗版。在KV3000新版升级程序植入了一个黑客程序,当检测到用户使用了盗版的KV3000以后就将硬盘的分区表锁住,被称为“主动逻辑锁”,其实就是硬盘逻辑锁的一种,当时却使无数无辜的人受害,江民公司也因此被定罪。这是旧事不谈,下面我们就来介绍一下它的三种情况和解决方法。
6 ?$ G3 s. E V( g# e6 w
$ T. H d: K, ~; |首先我们来了解一下硬盘的分区表。硬盘分区表位于磁盘的0磁头0柱面1扇区,这个扇区从01BEH开始的64个字节就是分区表。分区表共64字节,分为4栏,每栏16个字节描述一个分区。如果用FDISK程序分区,那最多只用两栏,第一栏描述主引导分区,第二栏描述扩展分区。分区表的结构与各字节的含义如下:* w/ B: Y2 |" e: @3 \
5 ? \) i( V. T- l! y, v 00H—标志活动字节。活动DOS分区为80H,其它为00H。 1 N1 f4 @) [% n: ~' `! [7 X6 e0 f
4 F& ~+ ]* Z' d' F4 ]0 F 01H—本分区逻辑0扇区所在的磁头号。
- ` F& V7 D1 B% |( u$ f- u1 |% G+ i+ y
02H—逻辑0扇区所在柱面中的扇区号。
7 T" v/ d) x" A# w8 j# H2 Y
J. k7 S" n2 \& X 03H—逻辑0扇区所在的柱面号。 9 D0 R$ C+ s `' d5 }8 v' i
" J. G4 [% T; u1 }( j' h
04H—分区类型标志。 N' K9 ^: [: @- H
9 t o' O) y0 m. A0 b* w: X% j# c8 I
05H—本分区最后一个扇区的磁头号。
2 e# P! J& k* G) D7 R9 O' s1 I0 y7 j. @6 t* v
06H—最后一个扇区的扇区号。
" }" ?; \2 J6 N2 W
6 U- B" D1 K$ K! @, Z2 n 07H—最后一个柱面的柱面号。 : a* q1 Q5 O; D
3 v" Z# J/ w# [. B P9 b 08H—硬盘上在本分区之前的扇区总数,用双字节表示。
4 Y( f% V! ]4 A: N& n* o
% Y% j' L P8 u6 I X 0CH—本分区的扇区总数,从逻辑0扇区计数,不含隐藏扇区,用双字节表示。" `" I; ~* |% a% J
# |+ R, ~( x2 b5 A8 S& h$ Y: D3 ?) @分区表的最后两个字节是它的有效标志,改变后将无法从硬盘启动,这就是第一种简单的锁住硬盘的方法。不过比较容易解决,只要从软盘启动就一切正常,启动后用Debug或Diskedit等软件将硬盘分区表中的标志恢复就可以了。第二种方法是修改分区参数,如果将分区参数全部变为0,则启动后由于找不到分区参数无法从硬盘启动,用启动盘从软盘启动后也不认硬盘,不过机器毕竟能够启动,我们可以在启动后用软盘里的debug等工具修复被改动的分区表参数,重新启动后就没问题了。
% C/ d# S8 N7 R$ B
' m( p, @0 D% Y2 D2 ^我们重点要讲的就是第三种,也就是上文提到的“主动逻辑锁”,它是因为分区表参数被修改成了一个死循环。正常启动时DOS接管硬盘后查找分区表,主引导分区被定义为C盘,然后查找逻辑盘,定义为D盘,然后是E、F、G,而这个主动逻辑锁就是将第一个逻辑盘(一般是D盘)的下一个分区指向它本身,不断读取下一个,其实就是读它自己,结果陷入死循环。因为DOS启动必须包含基本输入输出文件io.sys(我们在windows下也可以看到,位于C盘根目录下)。而它是有些固执的,启动以后非要把硬盘分区表读完然后接管不可,所以无论我们用什么启动,它一查找逻辑盘就死循环,我们就看到了硬盘灯常亮系统挂起的情况了。9 V3 S- R; n2 F& \* C) d
& [/ r, y' e5 ]
那么我们如何解开它呢?从根本上讲就是让io.sys不起作用或者在它起作用以前将分区表参数修改回来。" |6 R1 W* T! w' [. U% l7 K2 \& Z
! V- v. h( u) ]9 z0 Y& J4 n! H4 Z
1、debug法。
6 |6 X0 f( F4 f! V8 U& ?, g, M! H' @' b/ P0 I4 J. S2 D5 I
用这种方法首先必须要能启动机器,我们可以在一台正常的电脑上修改启动软盘中的io.sys文件,查找到第一个“55aa”字符串,找到以后修改为任何其他数值,用这张启动软盘你就可以顺利地带着被锁的硬盘启动了。不过这时该硬盘的分区表已经不正常,所以我们无法用FDISK来删除和修改分区,而且仍然无法用正常的启动盘启动系统,这时可以用DEBUG来手工恢复。具体命令如下:8 E! o1 f3 L( A" i* u2 c I
- e) K4 }* C2 E2 \4 oa:\>debug( _' n2 \' x$ M/ R
7 p" Q( v: u" q; W' d
-a
1 a! r! ?9 V, u. ^; @- v) I0 {# `
-????:100 mov ax,0201(读一扇区内容)
! r: F9 H: A0 N8 I& E* ?; z0 n2 L% E+ [# u$ g# V
-????:103 mov bx,500(设置一缓存地址)6 x! b/ x1 V$ o1 M9 W
/ G* x6 N# X5 [ }! K
-????:106 mov cx,0001(设置第一硬盘的硬盘指针)
5 e$ p3 M, q I5 I$ h- [) t6 R: B9 h' v, x4 u
-????:109 mov dx,0080(读零磁头)* D! \& z% V3 [6 {; Q- A
: W! a) {9 l. F( W-????:10c int 13 (硬盘中断)' R# X: c) c2 l. |9 P R6 Z) y: y
- m6 O1 I, X) Q. D/ _+ W
-????:10e int 20
$ _: G* C9 w) [2 D4 E# d$ K8 g# a! m# A0 t1 m" }2 [, e+ n
-????:0110 回车" c& k* m! G0 c' X0 _: B! P
0 k5 U2 n9 b5 g% R" q6 ^! v
(注:-????各硬盘不相同,跟后面的:1??都是自动显示的,我们要输入的只是其后的内容)% j: C/ k( A% ^3 D4 i4 f
6 q6 P( l; g1 t( e-g- B4 P" E( A0 J5 G
2 u6 v' Y& x# _: u* u-d500 (查看运行后缓存地址500的内容,这时候我们会发现地址6be开始的内容就是硬盘分区表信息,如果硬盘的扩展分区正是指向自己,那么DOS或WINDOWS启动时就会因查找逻辑分区而陷入死循环。)在DEBUG指示符下继续修改内存数据:
6 o2 K2 P6 h4 Q L- l2 A4 Z9 @% O8 P0 ~2 q9 o, i
E6BE& ]& \- v6 _5 r
+ B0 a# ~/ [4 {" ^
??.0 ??.0 ??.0……
, q1 [5 M3 f* L- W, j |
/ Q# R3 Q' O( d5 U……+ e" f: b2 b! i2 y* ]
! ^% E, E& t$ }3 I0 p……55 AA ' G+ y! x- H5 V7 q8 E( I( `
( q+ b! V/ Z3 N% Q8 w7 r
55 AA是硬盘有效的标志,不要修改,??.0表示把以前的数据“??”改成了0,再用硬盘中断13把修改好的数据写入硬盘就可以了:4 m: S F+ d: b( H4 F4 K
2 N8 K% B @) UA:\>debug5 R/ n8 u" F( l! }1 s8 v
7 W& Q0 D6 R2 y9 b. xa 100 (表示修改100地址的汇编指令), L" t8 ]' q& u* _$ G
4 L& L+ s* v6 A5 z* u
-????:100 mov ax,0301 (写硬盘一个扇区)
# z, N$ Y! D3 T$ ^0 K: c1 C/ l3 b; y8 E1 c5 A2 f U1 j) Y
-????: 回车0 `; R2 }: S9 Q, V4 R
* M+ [; ]6 |5 g( _7 I* b
-g (运行)
* c7 k j' f; I E; U8 y& ?, r& ~# g$ G
-q (退出)
% L8 B( {4 L( x5 G- u6 R2 [' x( w% M) k( K# F* x- l) ~
退出后运行fdisk/mbr来重置硬盘引导程序,重新启动即可。! {6 w F2 J, E0 H
# d! s: \, a3 i3 y6 J0 M 这种方法虽然麻烦一点,但是它能够恢复硬盘分区表,也就是说恢复以后硬盘中的数据也不会丢失。而以下方法虽然更加方便,但是要么硬盘中的数据难保,要么有一定危险性。: _- a& h5 H9 {. I W
) ^+ L/ y, b8 M. q- z' `
2、外挂软件法4 D/ e3 @' p# {' e) h
; G$ e9 ]9 ~9 j
这种方法原理都是绕过bios对硬盘的检测而直接用一些能够自己查找硬盘的软件来控制硬盘。
3 \3 k7 `6 s: D) v9 `3 ~
3 i% L4 y5 l2 f9 M首先是DM,现在每一个硬盘厂商都有自己的DiskManager程序,而且都能放进一张软盘里,你可以下载一个使用,如果不清楚自己硬盘的牌子,也可以用IBM出的DM万用版,不过它对现在32G以上的大硬盘支持不好。我们先在bios里面将硬盘所在的IDE口设置为none,(如果你不知道哪个是,全部设为none也可以),然后用启动盘启动系统,启动完成后将软盘取出,放入装有DM软件的软盘,运行DM,它会检测到你的病硬盘的存在,然后将它重新分区就搞定了。DM具体用法比较简单,就不详细说了,不过对E文不太好的朋友可能有些困难,请教身边的高手吧。5 u" M& G8 b" ~4 J
, Z+ o" n# R! b. p0 U& B- X# [我们还可以使用低格软件,也是每一种硬盘都有自己的低格软件,但也有通用的Lformat程序(只有30多k),前面的做法相同,还是在bios里面屏蔽掉硬盘,用启动盘启动,然后换软盘运行低格程序对硬盘进行低级格式化,由于分区表只在硬盘最前列部分,所以估摸着格过前面的分区表部分就可以停止了,然后重新启动在bios里面将硬盘设出来,就可以像一块新的硬盘一样对它进行分区等操作了。
" Y/ V, t: G7 y r3 F1 x: N* \; \
3、热插拔, n i. V" K. f1 B( X" O
" e2 I) g" q; I( i1 m这是最危险的一种方法,很有可能将你的硬盘烧毁,所以请谨慎。具体做法很简单,首先将硬盘的电源线拔掉,然后软盘启动系统,启动完成后再将硬盘的电源线插上,这时候系统就能够控制硬盘了,可以对它进行分区,恢复分区表等操作。我有一个菜鸟朋友就是在热插拔硬盘3次以后搞定的。不过此种方法存在危险,强烈不推荐使用,如因此损坏,本人概不负责。
8 R6 K: F. H1 b6 Q; @/ ~* `' |# L3 E: {7 D% j p" n
其实最好的情况是你有分区表备份,那恢复起来就比较容易了,而且数据也不会丢失。
点击图标进入精品网摘收藏 欢迎大家加入网络收藏夹