你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
对《再论制作硬盘逻辑锁》的补充
 

读了2000年第三期上《再论制作硬盘逻辑锁》一文,不禁使所我对硬盘逻辑锁问题再次产生了兴趣,于是对此进行了一些思考和研究。笔者曾在99年第三期上发表了一篇《解开硬盘逻辑死锁的一种有效方法》,文中提到了制作循环分区表可以锁住硬盘,后来一位远方的读者朋友打电话告诉我循环分区表没有锁住他的硬盘,WIN95仍可以正常启动。我不信,于是就在自己的机子上再次做试验,发现是可以锁住的,只要加上循环分区表后,WIN95DOS6.22都不能启动了。但一位素不相识的朋友不远千里打来电话,说的应该也是事实。我于是又到系上机房找新买的机子做同样的实验,结果令我大吃一惊,确实有机子用循环分区表锁不住硬盘。对那些用循环分区表锁不住的硬盘,到底用什么招可以将其锁住?我一时也没有更好的办法,甚至猜测是不是新的机型已经不可能再被逻辑锁锁住了。由于我有其它一些事很忙,很久也没有再对这个问题进行思考。最近偶然看到这篇《再论制作硬盘逻辑锁》,立刻再次引起了我对硬盘逻辑锁强烈的兴趣,于是又对硬盘锁进行研究和试验。现将我的一些思考和试验结果告诉那些对硬盘锁很感兴趣的朋友们。

以前的文章提到制作硬盘锁,只要加循环分区表就行了。《再论制作硬盘逻辑锁》一文提出了应该还要修改C盘的分区标志,如将硬盘0柱面0磁头1扇区位于1C2H处表示FAT160BH修改为DOSWINDOWS都不能识别的XENIX分区标志02H。这的确是出了一个新招,对原来的硬盘锁是一个改进。该文还列举了只修改C盘分区标志、只做循环分区表和既修改分区标志又做循环分区表三种情况下机子启动时的症状。最后的结论是只有既修改分区标志又做循环分区表才能真正锁住硬盘。这种情况不尽全面。下面列举我所看到的一些现象。

我的机子有两个硬盘,第一个硬盘装的是WIN95,第二个硬盘又独立装了一套WIN98。在WIN95下只制作循环分区表,DOS6.22WIN95都不能再启动,启动后出现Warning: Logical drivers past Z existed and will be ignored就死机了。可是当我在CMOS中去掉第一硬盘,只留装WIN98的第二硬盘,同样在该盘上只制作循环分区表,发现用软盘的DOS6.22不能启动,但WIN98却可以启动,只是启动后有26个盘符,但都是原来C盘的内容。是不是凡WIN95就不能启动而WIN98就能启动呢?我发现也不是这样的。我有幸一个公共机房不同机子上试验,发现有的装WIN98的机子可以启动,有的又不能启动;有的装WIN95的机子能启动,有的还是不能启动。而且更怪的是,同样是DOS6.22,在有的机子上可以软盘启动,在有的机子上又出现跟我的机子用DOS启动一样的死机症状。通过这诸多的不同现象,说明只制作循环分区表,对锁住硬盘不一定有效。至于为什么对有的机子有效,而对有的机子无效,我猜测与操作系统和BIOS都有关系。不能启动的机子就不说了,凡能启动的机子,启动后无一例外有26个盘符,且各个盘都与原C盘一般大小,内容也完全一样。这倒很好解释,因为有循环分区表存在,操作系统不可能读到真正的D盘的内容,每个逻辑盘在物理上读到的都是原C盘的分区表和实际内容。

但不管是在我的第一硬盘和第二硬盘上,还是在我所有试验过的多台不同机子上,都发现只要在循环分区表的基础上再修改C盘的分区标志,无一例外,不管是DOS6.22,还是WIN9X都不能再启动了。这说明,循环分区表加上修改C盘分区标志,确实可以锁住目前任何一个硬盘(安装DOSWINDOWS系统的)。如何解释这一点呢?从前面那些加了循环分区表却可以启动的机子来看,启动后的机子无一例外都是读的第一个分区C盘的分区信息,说明C盘分区始终是读成功了的,且C盘是一个有效的逻辑盘。而这里关键是将C盘分区标志修改成了操作系统所不认识的了。

如何破解应硬盘锁呢?笔者这次也找来98年第3期上的《硬盘逻辑死锁技术研究及应用》细细读了,并且也在不同机子上修改CMOS中硬盘参数的方法来试图解锁,都没有成功。我分析原因如下:修改CMOS中硬盘参数,确实是可以使D盘对应的柱面、扇区和磁头号发生改变,但我们制作的硬盘锁中,硬盘主引导扇区中D盘的起始物理柱面、扇区和磁头号已经被改写为与原C盘一样的参数了,因此读D盘的分区参数时实际上还是读的主引导扇区(主引导扇区的物理位置始终不变),并未去真正的D盘物理位置上读,因此修改CMOS中硬盘参数对解硬盘锁没有用处。当然,该文主要是制作一个带密码的逻辑锁,重点不在解锁,因此这里也不再多讨论它了。

到底如何解锁呢?对一个分区表没有做任何备份的机子来说,最简单和最直接的方法是破除循环分区链就一定可以成功。笔者那篇在993期上发表的文章《解开硬盘逻辑死锁的一种有效方法》当然是可以的,但整个编制程序的原理和过程都显得复杂,这篇《再论制作硬盘逻辑锁》中启动盘2所采用的方法,不失为一种极简单的解决方法。但该方法还可以简化。该方法制作的启动软盘首先读出硬盘主引导扇区,然后修改C盘分区标志为06H,然后修改D盘、E盘、F盘的分区标志为DOS不认识的0H,并将修改后的结果写回硬盘主引导扇区,最后重新用DOS6.22启动机子就可以了。该方法中修改C盘分区标志是不必要的。因为破坏硬盘锁关键是破坏分区链表,只要修改D盘的分区标志为DOS所不认识的,就不会再往下再继续读分区表了,从而也就不会在读分区表时形成循环分区了。修改E盘、F盘分区标志也不必要,因为现在凡是安装DOSWINDOWS的机子,分区表实际上都只占用了两栏,也就是只有C盘和D盘的分区信息,至于E盘的分区信息,却存放在D盘的物理起始柱面的0磁头1扇区中,主引导扇区中根本就没有,因此也就不用修改了。该文修改C盘分区标志为DOS6.22认识的06H,主要是想启动后能C盘可以使用,其实如果原来C盘使用的是FAT32文件系统,则其分区标志本来为0BH,现在即使将其修改为06H再用软盘DOS6.22启动,仍然无法使用C盘的,当敲入C盘盘符时,就会出现提示:Not ready reading driver C。因此此步实在不必要。要破坏循环分区表,只要DOS系统不认识D盘分区标志,循环分区自然就不起任何作用,机子当然也就可以启动了,不过得用软盘上的DOS启动。因此只需要在另一台机子上制作一张启动盘就可以了(如果你只有一台机子,只要在CMOS中挂起硬盘,然后从软盘启动,利用debug可以进行同样制作),方法如下:

C:\DOS>DEBUG

-a100

mov ax, 201

mov bx,2000  ;此处地址不能低于2000H

mov cx,1

mov dx,80

int 13

mov al,02   ;D盘分区标志修改为DOS所不认识的XENIX分区

mov [21D2],al

mov ax,301

int 13

jmp ffff:0000  调转重新启动机子

w  100  0  0  1  ; 将该段程序写入软盘引导扇区

-q

有一点需要解释一下,修改硬盘主引导扇区的内容是读入内存2000H后进行操作的。其实这个2000H并不是唯一的,只要高于2000H且在内存范围内都可以,为什么要高于2000H呢?这是因为用该软盘启动机子时,这段程序是被加载于0000:7C00处执行的,此时它的段地址为0000,而0000:00000000:1FFF这段恰好存放的是1024个中断向量,如果将硬盘主引导扇区读入这段内存,将完全破坏中断向量,使紧跟后面的INT 13无法执行,机子无法启动。

用该软盘启动机子的执行过程是这样的:软盘引导扇区的内容首先被读入内存0000:7C00处,然后开始执行该段程序,即读出硬盘主引导扇区内容并修改D盘分区标志为DOS不认识的XENIX分区标志02H,然后写回硬盘主引导扇区,并跳转到内存ffff:0000处执行,使机子重新启动。这时只需要拔出该软盘并插入一张DOS6.22的启动盘就可以启动机子。机子启动后,通常硬盘的逻辑盘都不认识,但使用软盘上的DEBUGDISKEDIT工具都可以读出硬盘主引导扇区内容,然后加以修改,完成后重新启动机子就可以认识硬盘了。上述所有过程笔者都已在不同机子上做过试验,相信应该没有任何问题的。

现在,从《再论制作硬盘逻辑锁》和上面的分析及简化的解决方法来看,曾经令人恐惧的硬盘锁已经变得可以采用极其简单的方法来解决了。这不能不说是大家长期共同研究讨论的结果!

 

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089