当前位置: 技术问答>linux和unix
关于硬盘逻辑锁的问题,不太急,大家可以慢慢看,回复都给分……
来源: 互联网 发布时间:2014-12-02
本文导语: to All: 昨天晚上也是倒霉催的,鬼使神差的突然想起其整理硬盘起来了,结果就惹出了“大火”。 事情是这样,在我整理到Tools目录时,发现safe里面有一个名为hdlock.exe的东东,跟另一个hdunlock.exe的东东...
to All:
昨天晚上也是倒霉催的,鬼使神差的突然想起其整理硬盘起来了,结果就惹出了“大火”。
事情是这样,在我整理到Tools目录时,发现safe里面有一个名为hdlock.exe的东东,跟另一个hdunlock.exe的东东列在一起。我直觉上想到这是一个硬盘锁,就盘算着先运行一下,确定一下是什么效果,然后给他归类备份,那个hdunlock.exe让我很放心,有什么问题,不是还有它兜着吗?
结果没想到,刚一按回车,还没等我反应过来,我的古董机突然重启,我立马就想,悔了,硬盘进不去了,果不其然,等启动画面一过,果然蹦出来个“Invalid OS”,赶紧找到启动盘(dos6.22,win95,win98,winME),Norton恢复盘,急救盘,KV杀毒盘,然后在出现EZ-BIOS(让老主板支持大硬盘的一个工具)时,按Ctrl然后选择A盘引导,结果只见软驱灯闪了一下就再无动静。难道引导盘坏了,换一张,结果错误依旧。
静下心来一想,也许是EZ-BIOS也出了问题,它不是也写了主引导纪录吗?马上想到直接进入CMOS修改成软盘引导优先,果然正常引导,然后开始查那个逻辑锁,先用傻瓜化的DISKMAN.EXE,结果进门就提示0扇区参数非法,0扇区和一扇区重叠,1扇区有问题,1扇区和2扇区重叠,接着显示所有分区为Unknown。我再一想,我本来就安装了EZ-BIOS,当然“有问题”了,我也不敢让它改,否则我的EZ_BIOS要是不能用,我的损失可就大了。看来解决不了问题。
换NDD试试,根本就找不着硬盘分区;再用fixmbr.exe试试,也看不出分区有什么问题,再用KV300的硬盘参数检查,80和55aa标志好像都在,用S备份了一次之后就推了出来。
现在的问题是:那个hdunlock.exe放在硬盘里,我没有来得及备份出来,如果那位知道这个程序的下在地址,那问题就都解决了。否则,就请哪位懂主引导记录的高手帮我看看我的这个HDPT的备份,看问题处在什么地方,我的关于哪方面的资料也全在那个硬盘里。
不过总算我也没什么紧要事需要在上面办,就让它先休回假吧。
欢迎大家就这个问题多多讨论,我闲着没事,就散点分吧(另外一个问题,我怎么三处超过100以上的分啊?)
附录:我的硬盘的主引导记录数据:
147D:0100 FA 33 C0 8E D0 BC 00 7C-FB FC 8E D8 8E C0 8B F4 .3.....|........
147D:0110 BF 00 06 B9 00 01 F3 A5-EA 1D 06 00 00 80 3E BD ..............>.
147D:0120 07 01 74 6F A1 13 04 2D-06 00 A3 13 04 2D 04 00 ..to...-.....-..
147D:0130 C1 E0 06 05 00 00 8E C0-A3 AF 07 33 DB BA 80 00 ...........3....
147D:0140 B9 04 00 53 51 8B CB 80-C1 03 C1 E3 09 B8 01 02 ...SQ...........
147D:0150 CD 13 59 5B 73 08 B4 0D-CD 13 E2 E7 EB 13 FE C3 ..Y[s...........
147D:0160 80 FB 13 73 02 EB D9 33-DB FF 1E AD 07 0E 07 73 ...s...3.......s
147D:0170 0E BD 70 07 E8 A3 00 C7-06 05 07 90 90 EB 7C 3D ..p...........|=
147D:0180 01 00 8C D0 8E C0 B9 10-00 75 08 BD 79 07 E8 89 .........u..y...
147D:0190 00 EB 68 51 BB 00 7C B8-01 02 B9 01 00 80 3E C2 ..hQ..|.......>.
147D:01A0 07 54 74 01 41 BA 80 00-CD 13 59 73 0B 33 C0 CD .Tt.A.....Ys.3..
147D:01B0 13 E2 E0 BD 46 07 EB BC-BF FE 7D 81 3D 55 AA 75 ....F.....}.=U.u
147D:01C0 54 BF BE 07 80 3D 80 75-1C 80 7D 04 55 74 11 80 T....=.u..}.Ut..
147D:01D0 7D 04 54 74 0B BE BE 07-BF BE 7D B9 20 00 F3 A5 }.Tt......}. ...
147D:01E0 EA 00 7C 00 00 80 3D 00-75 0B 81 FF EE 07 74 1C ..|...=.u.....t.
147D:01F0 83 C7 10 EB CF BD 4D 07-E9 79 FF BD 5A 07 E8 19 ......M..y..Z...
147D:0200 00 33 C0 CD 16 CD 19 EA-00 00 FF FF BD 54 07 E8 .3...........T..
147D:0210 08 00 E9 76 FF BD 67 07-EB 9C B4 03 33 DB CD 10 ...v..g.....3...
147D:0220 B8 01 13 B3 07 32 ED 26-8A 4E 00 8A D1 52 32 D2 .....2.&.N...R2.
147D:0230 45 CD 10 B8 01 13 BB 07-00 B9 03 00 5A BD 43 07 E...........Z.C.
147D:0240 CD 10 C3 20 0A 0D 06 52-44 20 45 52 52 06 50 54 ... ...RD ERR.PT
147D:0250 20 45 52 52 05 4E 4F 20-50 54 0C 70 72 65 73 73 ERR.NO PT.press
147D:0260 20 61 20 6B 65 79 2E 08-49 4E 56 4C 44 20 4F 53 a key..INVLD OS
147D:0270 08 49 4E 49 54 20 45 52-52 0D 49 6E 73 65 72 74 .INIT ERR.Insert
147D:0280 20 64 69 73 6B 2C 20 35-32 38 2B 4D 62 79 74 65 disk, 528+Mbyte
147D:0290 28 43 29 31 39 39 33 2D-32 30 30 30 20 53 74 6F (C)1993-2000 Sto
147D:02A0 72 61 67 65 53 6F 66 74-2C 20 49 6E 63 00 00 80 rageSoft, Inc...
147D:02B0 9E 00 00 00 00 00 00 00-00 00 00 00 00 00 80 00 ................
147D:02C0 01 03 55 7F 3F CB 80 5E-00 00 80 BB 18 00 00 00 ..U.?..^........
147D:02D0 01 CC 55 7F 7F C9 00 1A-19 00 00 41 1F 00 00 00 ..U........A....
147D:02E0 41 CA 55 7F FF 12 00 5B-38 00 80 7B 28 00 00 01 A.U....[8..{(...
147D:02F0 01 00 55 7F 3F 02 3F 00-00 00 41 5E 00 00 55 AA ..U.?.?...A^..U.
昨天晚上也是倒霉催的,鬼使神差的突然想起其整理硬盘起来了,结果就惹出了“大火”。
事情是这样,在我整理到Tools目录时,发现safe里面有一个名为hdlock.exe的东东,跟另一个hdunlock.exe的东东列在一起。我直觉上想到这是一个硬盘锁,就盘算着先运行一下,确定一下是什么效果,然后给他归类备份,那个hdunlock.exe让我很放心,有什么问题,不是还有它兜着吗?
结果没想到,刚一按回车,还没等我反应过来,我的古董机突然重启,我立马就想,悔了,硬盘进不去了,果不其然,等启动画面一过,果然蹦出来个“Invalid OS”,赶紧找到启动盘(dos6.22,win95,win98,winME),Norton恢复盘,急救盘,KV杀毒盘,然后在出现EZ-BIOS(让老主板支持大硬盘的一个工具)时,按Ctrl然后选择A盘引导,结果只见软驱灯闪了一下就再无动静。难道引导盘坏了,换一张,结果错误依旧。
静下心来一想,也许是EZ-BIOS也出了问题,它不是也写了主引导纪录吗?马上想到直接进入CMOS修改成软盘引导优先,果然正常引导,然后开始查那个逻辑锁,先用傻瓜化的DISKMAN.EXE,结果进门就提示0扇区参数非法,0扇区和一扇区重叠,1扇区有问题,1扇区和2扇区重叠,接着显示所有分区为Unknown。我再一想,我本来就安装了EZ-BIOS,当然“有问题”了,我也不敢让它改,否则我的EZ_BIOS要是不能用,我的损失可就大了。看来解决不了问题。
换NDD试试,根本就找不着硬盘分区;再用fixmbr.exe试试,也看不出分区有什么问题,再用KV300的硬盘参数检查,80和55aa标志好像都在,用S备份了一次之后就推了出来。
现在的问题是:那个hdunlock.exe放在硬盘里,我没有来得及备份出来,如果那位知道这个程序的下在地址,那问题就都解决了。否则,就请哪位懂主引导记录的高手帮我看看我的这个HDPT的备份,看问题处在什么地方,我的关于哪方面的资料也全在那个硬盘里。
不过总算我也没什么紧要事需要在上面办,就让它先休回假吧。
欢迎大家就这个问题多多讨论,我闲着没事,就散点分吧(另外一个问题,我怎么三处超过100以上的分啊?)
附录:我的硬盘的主引导记录数据:
147D:0100 FA 33 C0 8E D0 BC 00 7C-FB FC 8E D8 8E C0 8B F4 .3.....|........
147D:0110 BF 00 06 B9 00 01 F3 A5-EA 1D 06 00 00 80 3E BD ..............>.
147D:0120 07 01 74 6F A1 13 04 2D-06 00 A3 13 04 2D 04 00 ..to...-.....-..
147D:0130 C1 E0 06 05 00 00 8E C0-A3 AF 07 33 DB BA 80 00 ...........3....
147D:0140 B9 04 00 53 51 8B CB 80-C1 03 C1 E3 09 B8 01 02 ...SQ...........
147D:0150 CD 13 59 5B 73 08 B4 0D-CD 13 E2 E7 EB 13 FE C3 ..Y[s...........
147D:0160 80 FB 13 73 02 EB D9 33-DB FF 1E AD 07 0E 07 73 ...s...3.......s
147D:0170 0E BD 70 07 E8 A3 00 C7-06 05 07 90 90 EB 7C 3D ..p...........|=
147D:0180 01 00 8C D0 8E C0 B9 10-00 75 08 BD 79 07 E8 89 .........u..y...
147D:0190 00 EB 68 51 BB 00 7C B8-01 02 B9 01 00 80 3E C2 ..hQ..|.......>.
147D:01A0 07 54 74 01 41 BA 80 00-CD 13 59 73 0B 33 C0 CD .Tt.A.....Ys.3..
147D:01B0 13 E2 E0 BD 46 07 EB BC-BF FE 7D 81 3D 55 AA 75 ....F.....}.=U.u
147D:01C0 54 BF BE 07 80 3D 80 75-1C 80 7D 04 55 74 11 80 T....=.u..}.Ut..
147D:01D0 7D 04 54 74 0B BE BE 07-BF BE 7D B9 20 00 F3 A5 }.Tt......}. ...
147D:01E0 EA 00 7C 00 00 80 3D 00-75 0B 81 FF EE 07 74 1C ..|...=.u.....t.
147D:01F0 83 C7 10 EB CF BD 4D 07-E9 79 FF BD 5A 07 E8 19 ......M..y..Z...
147D:0200 00 33 C0 CD 16 CD 19 EA-00 00 FF FF BD 54 07 E8 .3...........T..
147D:0210 08 00 E9 76 FF BD 67 07-EB 9C B4 03 33 DB CD 10 ...v..g.....3...
147D:0220 B8 01 13 B3 07 32 ED 26-8A 4E 00 8A D1 52 32 D2 .....2.&.N...R2.
147D:0230 45 CD 10 B8 01 13 BB 07-00 B9 03 00 5A BD 43 07 E...........Z.C.
147D:0240 CD 10 C3 20 0A 0D 06 52-44 20 45 52 52 06 50 54 ... ...RD ERR.PT
147D:0250 20 45 52 52 05 4E 4F 20-50 54 0C 70 72 65 73 73 ERR.NO PT.press
147D:0260 20 61 20 6B 65 79 2E 08-49 4E 56 4C 44 20 4F 53 a key..INVLD OS
147D:0270 08 49 4E 49 54 20 45 52-52 0D 49 6E 73 65 72 74 .INIT ERR.Insert
147D:0280 20 64 69 73 6B 2C 20 35-32 38 2B 4D 62 79 74 65 disk, 528+Mbyte
147D:0290 28 43 29 31 39 39 33 2D-32 30 30 30 20 53 74 6F (C)1993-2000 Sto
147D:02A0 72 61 67 65 53 6F 66 74-2C 20 49 6E 63 00 00 80 rageSoft, Inc...
147D:02B0 9E 00 00 00 00 00 00 00-00 00 00 00 00 00 80 00 ................
147D:02C0 01 03 55 7F 3F CB 80 5E-00 00 80 BB 18 00 00 00 ..U.?..^........
147D:02D0 01 CC 55 7F 7F C9 00 1A-19 00 00 41 1F 00 00 00 ..U........A....
147D:02E0 41 CA 55 7F FF 12 00 5B-38 00 80 7B 28 00 00 01 A.U....[8..{(...
147D:02F0 01 00 55 7F 3F 02 3F 00-00 00 41 5E 00 00 55 AA ..U.?.?...A^..U.
|
给个mail,我发给你HDunlock.exe(105K)。
|
不知道你是否曾碰到过从软盘和硬盘都启动不了计算机的情形?一般计算机的硬盘分区表被病毒感染后,若不能启动机子,通常从软盘可以启动。但在严重的情形下,不但从硬盘不能启动机子,就是从软盘也不能启动。有的恶毒的病毒就能使硬盘被死锁。笔者一次在自己机子上玩弄硬盘锁时,就被锁住过一次。结果在硬盘下选择DOS或WIN95模式启动机子都死机,在软盘下用DOS启动也死机;在COMS中将硬盘类型选择None,虽然可以从软盘启动,但启动后没有硬盘,使用软盘上的FDISK命令,想重新分区或格式化都没门。弄得我一筹莫展。
本来,硬盘被锁住时,可以采用3.0以下的DOS版本启动机子,机子启动后虽然也不认硬盘,但其不认的原因在于其管理不了现在的大硬盘,因此可以用Debug修改硬盘分区表,修改后可以启动。但在已进入WINDOWS的年代,3.0以下的DOS实难找到,即使找到,你的机子上恐怕也因没有5寸软驱而不能使用。因此,最好的办法是编制一个程序来解决这个问题。笔者通过尝试和思考,找到一种比较实用的方法,可以轻松解开死锁的硬盘,当然也把自己的硬盘解开了。下面,我将这种方法介绍出来。
二·硬盘锁住原理
硬盘锁住通常是对硬盘的分区表做手脚,因此首先应该了解硬盘的分区表。硬盘分区表位于0柱面0磁头1区,这个扇区的前面200多个字节是主引导程序,后面从01BEH开始的64个字节是分区表。分区表共64字节,分为4栏,每栏16字节,用来描述一个分区。如果是用DOS的FDISK程序分区后,最多只用两栏,第一栏描述基本的DOS分区,第二栏描述扩展的DOS分区。
分区表一栏的结构与各字节的含义如下:
00H-标志活动字节,活动DOS分区为80H,其它为00H。
01H-本分区逻辑0扇区所在的磁头号。
02H-逻辑0扇区所在柱面中的扇区号。
03H-逻辑0扇区所在的柱面号。
04H-分区类型标志。
05H-本分区最后一个扇区的磁头号。
06H-最后一个扇区的扇区号。
07H-最后一个柱面的柱面号。
08H-硬盘上在本分区之前的扇区总数,用双字表示。
0CH-本分区的扇区总数,从逻辑0扇区计数,不含隐藏扇区,用双字表示。
在上面的介绍中给出的柱面号与扇区号虽然各占一个字节,但实际上扇区号用6位表示,柱面号用10位表示,扇区号所在字节的最高两位实际上是柱面号的最高两位。
分区表的最后两个字节是分区表的有效标志,如果将其改变,将不能从硬盘启动,这是一种简单的锁住硬盘的方法。解决的办法是从软盘启动,启动后硬盘仍然可以使用。用Debug或Noratn中的Diskedit软件将硬盘该分区表中的标志恢复,则从硬盘启动也没有问题了。锁住硬盘的另一种方法是对分区参数做手脚,如果将分区参数全部变为0,则启动时由于找不到分区参数,从硬盘是没法启动,从软盘启动后也不认硬盘,如果你敲入盘符C并回车,将出现提示Invalid driver specification。但所幸的是,毕竟可以启动机子,不认硬盘没关系,在A盘上用DOS的Debug仍然可以读出硬盘0柱面0磁头1扇区的内容,修改后再写入0柱面0磁头1扇区,重新启动机子又没问题了。如果将分区表参数随意改为其它参数,则有可能不能用可以安装DOS的DOS系统盘启动,按F3退出后将出现内存分配错误,不能装载DOS的命令解释器COMMAND的提示,系统就死机了,笔者就曾碰见过这种情形。但用一张格式化成系统盘的软盘则可以顺利启动,只要有Debug,你仍然可以将分区表参数修改回去。可怕的事情是,如果你不幸将分区表参数改成一个循环链,即C盘的下一个分区指向D驱,D驱的下一个分区又指向C区,这样循环下去,DOS启动或WIN95启动时由于无休止的读取逻辑驱动器,就只有死机的份了。这是只要有硬盘存在,不管你用软盘还是硬盘都没法启动机子了,由于不能启动是由于硬盘造成的,即使你将硬盘下到其它计算机上,也没法使用,这样硬盘就彻底被锁死了,笔者所遭遇就是此情形。不信,你只需将硬盘0柱面0磁头1扇区的1D0H处改为1(如果你的D驱开始柱面号不够大,此处本来就为1),将1D1H处改为0,表示D盘的开始柱面号跟C盘一样,看看你的计算机还能不能启动,不过你在没有充分的准备前绝不要试。
一个完整的硬盘锁程序,不过是重新改写0柱面0磁头1扇区的引导程序,并将分区表破坏或故意制造一个循环分区表,而将真正的硬盘分区表参数和引导程序放在其它隐藏扇区并保护起来,如果启动时口令不对,则不能启动机子,口令对了则顺利启动。这种硬盘锁程序,情形好的还可以用软盘启动;情形严重的就是连软盘也不能启动,硬盘真被锁住。
三·解开硬盘锁的程序法
如果硬盘被锁死,是否真的就无法解开呢?当然不是。看看问题的症结所在,根源在于DOS中的IO.SYS文件,它包含LOADER、IO1、IO2、IO3四个模块,其中IO1中包含有一个很关键的程序SysInt_I,它在启动中很固执,非要去读分区表,而且不把分区表读完誓不罢休。如果碰上分区表是循环的,它就只有死机了。这是DOS的脆弱性和不完备性。其实这也不能怪DOS,因为DOS为了获得硬盘使用权,就必需读分区表参数,而且DOS还约定驱动器号不能超过26,只不过没有考虑到此等循环分区表情形。一句话,机子不能启动不过是DOS操作系统造成的,如果另写一个操作系统,或许就能启动机子。当然这只是说个笑话。
明白了病因在于DOS,问题就好办了。DOS启动中不是要读硬盘分区表吗?我不让你读分区表甚至连硬盘都不让你读,不就可以顺利启动了。的确是这样的,开硬盘锁的程序实现方法就是基于这个思想形成的。当然,这只有从软盘启动着手了。
看看计算机的启动过程,上电首先进行的多项硬件自测跟我们没有关系,我们关心的只是它最开始和磁盘打交道时是干什么。如果选择从硬盘启动,则计算机和磁盘最开始打交道是将硬盘0柱面0磁头1扇区的内容读入内存0000:7C00处并跳到0000:7C00处执行;如果选择从软盘启动,则计算机和磁盘最开始打交道是将A盘0磁道0磁头1扇区的内容读入内存0000:7C00处并跳到0000:7C00处执行,在执行过程中,计算机并不检查该扇区的内容是什么,只机械地执行读命令,这使得许多系统型病毒得以生存。但利用这一点,恰恰使我们的程序解锁法有了用武之地。如果我们用DOS格式化一张可以启动机子的系统软盘,将该软盘的0磁道0磁头1扇区的内容移到后面的空白扇区中,而重新写一段程序到该软盘的0磁道0磁头1扇区,这样用软盘启动时首先执行的是我们所写的程序了。在这段程序中,具备这样一些功能:在DOS启动前抢先拦截INT 13H,驻留高端内存并监视INT 13H,判断是否读硬盘,如果是读硬盘就直接返回,这样就禁止了读硬盘,也就避免了DOS读硬盘循环分区表造成的死机;同时拦截对软盘的读取,如果读软盘的0磁道0磁头1扇区,就改成读真正有引导程序和磁盘参数表的扇区,免得DOS在启动中找不到软盘的磁盘参数表而死机。完成这些任务的同时,还要读取软盘真正的引导程序并把控制权交给它。
该方法可以称为万能的,因为它在用软盘启动中,始终不与硬盘打交道,这样不管你硬盘用什么方法加锁了,对DOS的启动都没有影响。当然,这样启动的机子是不认硬盘的,但这没有关系。你可在机子启动后,用Debug调出驻留高端内存的新INT 13H程序,将其改为只有一条直接执行旧INT 13H的语句,这样在Debug下可以用INT 13H读取硬盘0柱面0磁头1扇区的内容,如果你有备份,将分区表参数恢复后再写入0柱面0磁头1扇区,重新启动计算机就可以了。如果实在没有备份,去掉分区表中的循环链,用正常DOS启动盘重启机子后至少也可以重新对硬盘分区,不至于硬盘被锁住打不开了。
四·程序及说明
1·下面是写入软盘0磁道0头1扇区的源程序key.com,程序用debug输入。
C>debug
-a100
100 CLI
101 XOR AX,AX
103 MOV DS,AX
105 MOV ES,AX
107 MOV SS,AX
109 MOV AX,7C00
10C MOV SP,AX
10E STI
10F MOV SI,AX
111 MOV DI,7E00
114 CLD
115 MOV CX,0200
118 REPNZ
119 MOVSB
11A JMP 0000:7E1F
11F MOV CX,0003
122 PUSH CX
123 MOV AX,0201;读启动软盘的引导扇区
126 MOV BX,7C00
129 MOV CX,4F01
12C MOV DX,0100
12F INT 13
131 POP CX
132 DEC CX
133 JNZ 0122
135 MOV AX,[004C];抢先获取INT 13H的位置
138 MOV [7E88],AX
13B MOV AX,[004E]
13E MOV [7E8A],AX
141 MOV AX,[0413]
144 DEC AX
145 MOV [0413],AX
148 MOV CL,06
14A SHL AX,CL
14C MOV ES,AX
14E XOR AX,AX
150 MOV DS,AX
152 MOV SI,7E6D;复制改写的INT 13H程序到高端内存
155 MOV DI,0000
158 MOV CX,0030
15B REPNZ
015C MOVSB
015D MOV AX,0000;将新INT 13H位置写入中断向量表
0160 MOV [004C],AX
0163 MOV AX,ES
0165 MOV [004E],AX
0168 JMP 0000:7C00
016D PUSHF;新INT 13H程序
016E CMP DX,0080;是否是硬盘
0172 JNZ 0176;不是硬盘则继续
0174 POPF
0175 IRET;是硬盘则直接返回
0176 CMP DX,+00;是否读软盘BOOT区?
0179 JNZ 0186
017B CMP CX,+01
017E JNZ 0186
0180 MOV CX,4F01;是则读79磁道1磁头1扇区
0183 MOV DX,0100
0186 POPF
0187 JMP 0000:0000;此处跳转去执行旧INT 13,
本来,硬盘被锁住时,可以采用3.0以下的DOS版本启动机子,机子启动后虽然也不认硬盘,但其不认的原因在于其管理不了现在的大硬盘,因此可以用Debug修改硬盘分区表,修改后可以启动。但在已进入WINDOWS的年代,3.0以下的DOS实难找到,即使找到,你的机子上恐怕也因没有5寸软驱而不能使用。因此,最好的办法是编制一个程序来解决这个问题。笔者通过尝试和思考,找到一种比较实用的方法,可以轻松解开死锁的硬盘,当然也把自己的硬盘解开了。下面,我将这种方法介绍出来。
二·硬盘锁住原理
硬盘锁住通常是对硬盘的分区表做手脚,因此首先应该了解硬盘的分区表。硬盘分区表位于0柱面0磁头1区,这个扇区的前面200多个字节是主引导程序,后面从01BEH开始的64个字节是分区表。分区表共64字节,分为4栏,每栏16字节,用来描述一个分区。如果是用DOS的FDISK程序分区后,最多只用两栏,第一栏描述基本的DOS分区,第二栏描述扩展的DOS分区。
分区表一栏的结构与各字节的含义如下:
00H-标志活动字节,活动DOS分区为80H,其它为00H。
01H-本分区逻辑0扇区所在的磁头号。
02H-逻辑0扇区所在柱面中的扇区号。
03H-逻辑0扇区所在的柱面号。
04H-分区类型标志。
05H-本分区最后一个扇区的磁头号。
06H-最后一个扇区的扇区号。
07H-最后一个柱面的柱面号。
08H-硬盘上在本分区之前的扇区总数,用双字表示。
0CH-本分区的扇区总数,从逻辑0扇区计数,不含隐藏扇区,用双字表示。
在上面的介绍中给出的柱面号与扇区号虽然各占一个字节,但实际上扇区号用6位表示,柱面号用10位表示,扇区号所在字节的最高两位实际上是柱面号的最高两位。
分区表的最后两个字节是分区表的有效标志,如果将其改变,将不能从硬盘启动,这是一种简单的锁住硬盘的方法。解决的办法是从软盘启动,启动后硬盘仍然可以使用。用Debug或Noratn中的Diskedit软件将硬盘该分区表中的标志恢复,则从硬盘启动也没有问题了。锁住硬盘的另一种方法是对分区参数做手脚,如果将分区参数全部变为0,则启动时由于找不到分区参数,从硬盘是没法启动,从软盘启动后也不认硬盘,如果你敲入盘符C并回车,将出现提示Invalid driver specification。但所幸的是,毕竟可以启动机子,不认硬盘没关系,在A盘上用DOS的Debug仍然可以读出硬盘0柱面0磁头1扇区的内容,修改后再写入0柱面0磁头1扇区,重新启动机子又没问题了。如果将分区表参数随意改为其它参数,则有可能不能用可以安装DOS的DOS系统盘启动,按F3退出后将出现内存分配错误,不能装载DOS的命令解释器COMMAND的提示,系统就死机了,笔者就曾碰见过这种情形。但用一张格式化成系统盘的软盘则可以顺利启动,只要有Debug,你仍然可以将分区表参数修改回去。可怕的事情是,如果你不幸将分区表参数改成一个循环链,即C盘的下一个分区指向D驱,D驱的下一个分区又指向C区,这样循环下去,DOS启动或WIN95启动时由于无休止的读取逻辑驱动器,就只有死机的份了。这是只要有硬盘存在,不管你用软盘还是硬盘都没法启动机子了,由于不能启动是由于硬盘造成的,即使你将硬盘下到其它计算机上,也没法使用,这样硬盘就彻底被锁死了,笔者所遭遇就是此情形。不信,你只需将硬盘0柱面0磁头1扇区的1D0H处改为1(如果你的D驱开始柱面号不够大,此处本来就为1),将1D1H处改为0,表示D盘的开始柱面号跟C盘一样,看看你的计算机还能不能启动,不过你在没有充分的准备前绝不要试。
一个完整的硬盘锁程序,不过是重新改写0柱面0磁头1扇区的引导程序,并将分区表破坏或故意制造一个循环分区表,而将真正的硬盘分区表参数和引导程序放在其它隐藏扇区并保护起来,如果启动时口令不对,则不能启动机子,口令对了则顺利启动。这种硬盘锁程序,情形好的还可以用软盘启动;情形严重的就是连软盘也不能启动,硬盘真被锁住。
三·解开硬盘锁的程序法
如果硬盘被锁死,是否真的就无法解开呢?当然不是。看看问题的症结所在,根源在于DOS中的IO.SYS文件,它包含LOADER、IO1、IO2、IO3四个模块,其中IO1中包含有一个很关键的程序SysInt_I,它在启动中很固执,非要去读分区表,而且不把分区表读完誓不罢休。如果碰上分区表是循环的,它就只有死机了。这是DOS的脆弱性和不完备性。其实这也不能怪DOS,因为DOS为了获得硬盘使用权,就必需读分区表参数,而且DOS还约定驱动器号不能超过26,只不过没有考虑到此等循环分区表情形。一句话,机子不能启动不过是DOS操作系统造成的,如果另写一个操作系统,或许就能启动机子。当然这只是说个笑话。
明白了病因在于DOS,问题就好办了。DOS启动中不是要读硬盘分区表吗?我不让你读分区表甚至连硬盘都不让你读,不就可以顺利启动了。的确是这样的,开硬盘锁的程序实现方法就是基于这个思想形成的。当然,这只有从软盘启动着手了。
看看计算机的启动过程,上电首先进行的多项硬件自测跟我们没有关系,我们关心的只是它最开始和磁盘打交道时是干什么。如果选择从硬盘启动,则计算机和磁盘最开始打交道是将硬盘0柱面0磁头1扇区的内容读入内存0000:7C00处并跳到0000:7C00处执行;如果选择从软盘启动,则计算机和磁盘最开始打交道是将A盘0磁道0磁头1扇区的内容读入内存0000:7C00处并跳到0000:7C00处执行,在执行过程中,计算机并不检查该扇区的内容是什么,只机械地执行读命令,这使得许多系统型病毒得以生存。但利用这一点,恰恰使我们的程序解锁法有了用武之地。如果我们用DOS格式化一张可以启动机子的系统软盘,将该软盘的0磁道0磁头1扇区的内容移到后面的空白扇区中,而重新写一段程序到该软盘的0磁道0磁头1扇区,这样用软盘启动时首先执行的是我们所写的程序了。在这段程序中,具备这样一些功能:在DOS启动前抢先拦截INT 13H,驻留高端内存并监视INT 13H,判断是否读硬盘,如果是读硬盘就直接返回,这样就禁止了读硬盘,也就避免了DOS读硬盘循环分区表造成的死机;同时拦截对软盘的读取,如果读软盘的0磁道0磁头1扇区,就改成读真正有引导程序和磁盘参数表的扇区,免得DOS在启动中找不到软盘的磁盘参数表而死机。完成这些任务的同时,还要读取软盘真正的引导程序并把控制权交给它。
该方法可以称为万能的,因为它在用软盘启动中,始终不与硬盘打交道,这样不管你硬盘用什么方法加锁了,对DOS的启动都没有影响。当然,这样启动的机子是不认硬盘的,但这没有关系。你可在机子启动后,用Debug调出驻留高端内存的新INT 13H程序,将其改为只有一条直接执行旧INT 13H的语句,这样在Debug下可以用INT 13H读取硬盘0柱面0磁头1扇区的内容,如果你有备份,将分区表参数恢复后再写入0柱面0磁头1扇区,重新启动计算机就可以了。如果实在没有备份,去掉分区表中的循环链,用正常DOS启动盘重启机子后至少也可以重新对硬盘分区,不至于硬盘被锁住打不开了。
四·程序及说明
1·下面是写入软盘0磁道0头1扇区的源程序key.com,程序用debug输入。
C>debug
-a100
100 CLI
101 XOR AX,AX
103 MOV DS,AX
105 MOV ES,AX
107 MOV SS,AX
109 MOV AX,7C00
10C MOV SP,AX
10E STI
10F MOV SI,AX
111 MOV DI,7E00
114 CLD
115 MOV CX,0200
118 REPNZ
119 MOVSB
11A JMP 0000:7E1F
11F MOV CX,0003
122 PUSH CX
123 MOV AX,0201;读启动软盘的引导扇区
126 MOV BX,7C00
129 MOV CX,4F01
12C MOV DX,0100
12F INT 13
131 POP CX
132 DEC CX
133 JNZ 0122
135 MOV AX,[004C];抢先获取INT 13H的位置
138 MOV [7E88],AX
13B MOV AX,[004E]
13E MOV [7E8A],AX
141 MOV AX,[0413]
144 DEC AX
145 MOV [0413],AX
148 MOV CL,06
14A SHL AX,CL
14C MOV ES,AX
14E XOR AX,AX
150 MOV DS,AX
152 MOV SI,7E6D;复制改写的INT 13H程序到高端内存
155 MOV DI,0000
158 MOV CX,0030
15B REPNZ
015C MOVSB
015D MOV AX,0000;将新INT 13H位置写入中断向量表
0160 MOV [004C],AX
0163 MOV AX,ES
0165 MOV [004E],AX
0168 JMP 0000:7C00
016D PUSHF;新INT 13H程序
016E CMP DX,0080;是否是硬盘
0172 JNZ 0176;不是硬盘则继续
0174 POPF
0175 IRET;是硬盘则直接返回
0176 CMP DX,+00;是否读软盘BOOT区?
0179 JNZ 0186
017B CMP CX,+01
017E JNZ 0186
0180 MOV CX,4F01;是则读79磁道1磁头1扇区
0183 MOV DX,0100
0186 POPF
0187 JMP 0000:0000;此处跳转去执行旧INT 13,
|
第12期《微型计算机》上有一篇文章是讲解硬盘逻辑锁的,你可以参考,但是无法保存数据。
|
在哪,2年没有接触类的东西,现在已不太看得懂这些了,sorry
|
请问一个关于无盘网吧的问题!让我满意者送他1000分!可以一次次给! (lvlvlvlylyly )
http://www.csdn.net/expert/topic/834/834891.xml?temp=.4116632
http://www.csdn.net/expert/topic/834/834891.xml?temp=.4116632
|
请问一个关于无盘网吧的问题!让我满意者送他1000分!可以一次次给! (lvlvlvlylyly )
http://www.csdn.net/expert/topic/834/834891.xml?temp=.4116632
http://www.csdn.net/expert/topic/834/834891.xml?temp=.4116632
|
学习学习
|
我曾经也被锁过,由于当时没有重要资料就格式化从来的