主题:[讨论]硬盘逻辑锁原理及解决
不知道你是否曾碰到过bios里面能够检测到硬盘,但是你从软盘和硬盘都启动不了计算机的情形?也许这时候你就会认为是硬盘坏掉了,可实际上,很有可能是你的硬盘中了逻辑锁。
硬盘逻辑锁总共有三种,本质都是对硬盘的分区表作了修改,以前只是一些黑客程序使用它,开始大范围对计算机造成危害是在臭名昭著的KV3000反盗版事件的时候,那时江民公司为了打击盗版。在
KV3000新版升级程序植入了一个黑客程序,当检测到用户使用了盗版的KV3000以后就将硬盘的分区表锁住,被称为“主动逻辑锁”,其实就是硬盘逻辑锁的一种,当时却使无数无辜的人受害,江民公司也因此被定罪。这是旧事不谈,下面我们就来介绍一下它的三种情况和解决方法。
首先我们来了解一下硬盘的分区表。硬盘分区表位于磁盘的0磁头0柱面1扇区,这个扇区从01BEH开始的64个字节就是分区表。分区表共64字节,分为4栏,每栏16个字节描述一个分区。如果用FDISK程序分区,那最多只用两栏,第一栏描述主引导分区,第二栏描述扩展分区。分区表的结构与各字节的含义如下:
00H—标志活动字节。活动Dos分区为80H,其它为00H。
01H—本分区逻辑0扇区所在的磁头号。
02H—逻辑0扇区所在柱面中的扇区号。
03H—逻辑0扇区所在的柱面号。
04H—分区类型标志。
05H—本分区最后一个扇区的磁头号。
06H—最后一个扇区的扇区号。
07H—最后一个柱面的柱面号。
08H—硬盘上在本分区之前的扇区总数,用双字节表示。
0CH—本分区的扇区总数,从逻辑0扇区计数,不含隐藏扇区,用双字节表示。
分区表的最后两个字节是它的有效标志,改变后将无法从硬盘启动,这就是第一种简单的锁住硬盘的方法。不过比较容易解决,只要从软盘启动就一切正常,启动后用Debug或Diskedit等软件将硬盘分区表中的标志恢复就可以了。第二种方法是修改分区参数,如果将分区参数全部变为0,则启动后由于找不到分区参数无法从硬盘启动,用启动盘从软盘启动后也不认硬盘,不过机器毕竟能够启动,我们可以在启动后用软盘里的debug等工具修复被改动的分区表参数,重新启动后就没问题了。
我们重点要讲的就是第三种,也就是上文提到的“主动逻辑锁”,它是因为分区表参数被修改成了一个死循环。正常启动时DOS接管硬盘后查找分区表,主引导分区被定义为C盘,然后查找逻辑盘,定义为D盘,然后是E、F、G,而这个主动逻辑锁就是将第一个逻辑盘(一般是D盘)的下一个分区指向它本身,不断读取下一个,其实就是读它自己,结果陷入死循环。因为DOS启动必须包含基本输入输出文件io.sys(我们在Windows下也可以看到,位于C盘根目录下)。而它是有些固执的,启动以后非要把硬盘分区表读完然后接管不可,所以无论我们用什么启动,它一查找逻辑盘就死循环,我们就看到了硬盘灯常亮系统挂起的情况了。
那么我们如何解开它呢?从根本上讲就是让io.sys不起作用或者在它起作用以前将分区表参数修改回来。
1、debug法。
用这种方法首先必须要能启动机器,我们可以在一台正常的电脑上修改启动软盘中的io.sys文件,查找到第一个“55aa”字符串,找到以后修改为任何其他数值,用这张启动软盘你就可以顺利地带着被锁的硬盘启动了。不过这时该硬盘的分区表已经不正常,所以我们无法用FDISK来删除和修改分区,而且仍然无法用正常的启动盘启动系统,这时可以用DEBUG来手工恢复。具体命令如下:
a:\>debug
-a
-????:100 mov ax,0201(读一扇区内容)
-????:103 mov bx,500(设置一缓存地址)
-????:106 mov cx,0001(设置第一硬盘的硬盘指针)
-????:109 mov dx,0080(读零磁头)
-????:10c int 13 (硬盘中断)
-????:10e int 20
-????:0110 回车
(注:-????各硬盘不相同,跟后面的:1??都是自动显示的,我们要输入的只是其后的内容)
-g
-d500 (查看运行后缓存地址500的内容,这时候我们会发现地址6be开始的内容就是硬盘分区表信息,如果硬盘的扩展分区正是指向自己,那么DOS或WINDOWS启动时就会因查找逻辑分区而陷入死循环。)在DEBUG指示符下继续修改内存数据:
E6BE
??.0 ??.0 ??.0……
……
……55 AA
55 AA是硬盘有效的标志,不要修改,??.0表示把以前的数据“??”改成了0,再用硬盘中断13把修改好的数据写入硬盘就可以了:
A:\>debug
a 100 (表示修改100地址的汇编指令)
-????:100 mov ax,0301 (写硬盘一个扇区)
-????: 回车
-g (运行)
-q (退出)
[url=http://www.oneedu.cn]软件工程师[/url]
[url=http://www.oneedu.cn]网络/网站工程师[/url]
[url=http://www.oneedu.cn]电脑美术设计师[/url]
[url=http://www.oneedu.cn][IMG]http://www.oneedu.cn/skin/oneedu1/top_zyjy_dlgc.gif[/IMG][/URL]
[url]http://www.oneedu.cn[/url]
硬盘逻辑锁总共有三种,本质都是对硬盘的分区表作了修改,以前只是一些黑客程序使用它,开始大范围对计算机造成危害是在臭名昭著的KV3000反盗版事件的时候,那时江民公司为了打击盗版。在
KV3000新版升级程序植入了一个黑客程序,当检测到用户使用了盗版的KV3000以后就将硬盘的分区表锁住,被称为“主动逻辑锁”,其实就是硬盘逻辑锁的一种,当时却使无数无辜的人受害,江民公司也因此被定罪。这是旧事不谈,下面我们就来介绍一下它的三种情况和解决方法。
首先我们来了解一下硬盘的分区表。硬盘分区表位于磁盘的0磁头0柱面1扇区,这个扇区从01BEH开始的64个字节就是分区表。分区表共64字节,分为4栏,每栏16个字节描述一个分区。如果用FDISK程序分区,那最多只用两栏,第一栏描述主引导分区,第二栏描述扩展分区。分区表的结构与各字节的含义如下:
00H—标志活动字节。活动Dos分区为80H,其它为00H。
01H—本分区逻辑0扇区所在的磁头号。
02H—逻辑0扇区所在柱面中的扇区号。
03H—逻辑0扇区所在的柱面号。
04H—分区类型标志。
05H—本分区最后一个扇区的磁头号。
06H—最后一个扇区的扇区号。
07H—最后一个柱面的柱面号。
08H—硬盘上在本分区之前的扇区总数,用双字节表示。
0CH—本分区的扇区总数,从逻辑0扇区计数,不含隐藏扇区,用双字节表示。
分区表的最后两个字节是它的有效标志,改变后将无法从硬盘启动,这就是第一种简单的锁住硬盘的方法。不过比较容易解决,只要从软盘启动就一切正常,启动后用Debug或Diskedit等软件将硬盘分区表中的标志恢复就可以了。第二种方法是修改分区参数,如果将分区参数全部变为0,则启动后由于找不到分区参数无法从硬盘启动,用启动盘从软盘启动后也不认硬盘,不过机器毕竟能够启动,我们可以在启动后用软盘里的debug等工具修复被改动的分区表参数,重新启动后就没问题了。
我们重点要讲的就是第三种,也就是上文提到的“主动逻辑锁”,它是因为分区表参数被修改成了一个死循环。正常启动时DOS接管硬盘后查找分区表,主引导分区被定义为C盘,然后查找逻辑盘,定义为D盘,然后是E、F、G,而这个主动逻辑锁就是将第一个逻辑盘(一般是D盘)的下一个分区指向它本身,不断读取下一个,其实就是读它自己,结果陷入死循环。因为DOS启动必须包含基本输入输出文件io.sys(我们在Windows下也可以看到,位于C盘根目录下)。而它是有些固执的,启动以后非要把硬盘分区表读完然后接管不可,所以无论我们用什么启动,它一查找逻辑盘就死循环,我们就看到了硬盘灯常亮系统挂起的情况了。
那么我们如何解开它呢?从根本上讲就是让io.sys不起作用或者在它起作用以前将分区表参数修改回来。
1、debug法。
用这种方法首先必须要能启动机器,我们可以在一台正常的电脑上修改启动软盘中的io.sys文件,查找到第一个“55aa”字符串,找到以后修改为任何其他数值,用这张启动软盘你就可以顺利地带着被锁的硬盘启动了。不过这时该硬盘的分区表已经不正常,所以我们无法用FDISK来删除和修改分区,而且仍然无法用正常的启动盘启动系统,这时可以用DEBUG来手工恢复。具体命令如下:
a:\>debug
-a
-????:100 mov ax,0201(读一扇区内容)
-????:103 mov bx,500(设置一缓存地址)
-????:106 mov cx,0001(设置第一硬盘的硬盘指针)
-????:109 mov dx,0080(读零磁头)
-????:10c int 13 (硬盘中断)
-????:10e int 20
-????:0110 回车
(注:-????各硬盘不相同,跟后面的:1??都是自动显示的,我们要输入的只是其后的内容)
-g
-d500 (查看运行后缓存地址500的内容,这时候我们会发现地址6be开始的内容就是硬盘分区表信息,如果硬盘的扩展分区正是指向自己,那么DOS或WINDOWS启动时就会因查找逻辑分区而陷入死循环。)在DEBUG指示符下继续修改内存数据:
E6BE
??.0 ??.0 ??.0……
……
……55 AA
55 AA是硬盘有效的标志,不要修改,??.0表示把以前的数据“??”改成了0,再用硬盘中断13把修改好的数据写入硬盘就可以了:
A:\>debug
a 100 (表示修改100地址的汇编指令)
-????:100 mov ax,0301 (写硬盘一个扇区)
-????: 回车
-g (运行)
-q (退出)
[url=http://www.oneedu.cn]软件工程师[/url]
[url=http://www.oneedu.cn]网络/网站工程师[/url]
[url=http://www.oneedu.cn]电脑美术设计师[/url]
[url=http://www.oneedu.cn][IMG]http://www.oneedu.cn/skin/oneedu1/top_zyjy_dlgc.gif[/IMG][/URL]
[url]http://www.oneedu.cn[/url]