资源描述
“江民炸弹”的介绍与清除
2002-3-21 浏览次数:1504次
江民炸弹是个更厉害更恐怖的恶意程序,是我见过的最狠毒的硬盘炸弹之一。为什么叫“江民”炸弹,我想大家也都知道吧?毕竟用过KV系列软件的人有很多,如果当年你曾中过KV杀毒软件的逻辑炸弹,那么对这个“江 民”炸弹你也不会陌生——会有熟悉的感觉哦^_^!
软件解压缩后有4个文件,一个是说明文件readme.exe,一个是制作解锁盘用的文件,还有两个文件就是江 民炸弹了。它们的名字分别为Jmbs.arj、JMBOS. zip,其实它们都是一个文件压缩而成,只不过扩展名不同而已。如果你把它们解压会看到jmbs.exe文件,大小为1809字节。这个jmbs.exe就是江 民炸弹了。如果你不小心运行了它,机器的硬盘将会被死锁住,无论你用软驱还是光驱,都不能启动计算机,硬盘和报废了没什么区别!如果不懂得解法,基本上就只有买硬盘了!哈哈,恭喜恭喜,可以升级了。
软件原理:计算机在引导DOS系统时将会搜索所有逻辑盘的顺序,当DOS被引导时,首先要去找主引导扇区的分区表信息,位于硬盘的零头零柱面的第一个扇区的OBEH地址开始的地方,当分区信息开始的地方为80H时表示是主引导分区,其他的为扩展分区,主引导分区被定义为逻辑盘C盘,然后查找扩展分区的逻辑盘,被定义为D盘,以此类推找到E,F,G.....“逻辑锁”就是在此下手,修改了正常的主引导分区记录将扩展分区的第一个逻辑盘指向自己,DOS在启动时查找到第一个逻辑盘后,查找下个逻辑盘总是找到是自己,这样一来就形成了死循环,这就是使用软驱,光驱,双硬盘都不能正常启动的原因。实际上这“逻辑锁”只是利用了DOS在启动时的一个小小缺陷,便令不少高手都束手无策。知道了“逻辑锁”的“上锁”原理,要解锁也就比较容易了。
解决办法:
方法一:把rescue.exe拷贝到一张空白的1.44MB软盘上,插入软驱,然后运行。显示“OK”之类的提示信息后,你就有了一张江 民炸弹的解锁盘,如果你发现里面一个文件也没有,不要惊讶,你没有做错什么,就是这个样子的。快试试吧,用这张恢复盘启动机子,如果出现unlock的字样,那就恭喜你,成功地解锁了!想当年,我用这张解锁盘给朋友解锁,可没少美餐啊!她们是怎么中的就不用我说了吧,嘻嘻^_^!
方法二:修改DOS启动文件
首先准备一张DOS6.22的系统盘,带上debug、pctools5.0、fdisk等工具。然后在一台正常的机器上,使用你熟悉的二进制编辑工具(debug、pctools5.0,或者是运行在Windows下的Ultraedit都行)修改软盘上的IO.SYS文件(修改前记住改该文件的属性为正常),具体是在这个文件里面搜索第一个“55aa”字符串,找到以后修改为任意其他数值即可。用这张修改过的系统软盘你就可以顺利地带着被锁的硬盘启动了。不过这时由于该硬盘正常的分区表已经被逻辑炸弹给恶意修改了,你无法用FDISK来删除和修改分区,而且仍无法用正常的启动盘启动系统,这时你可以用DEBUG来手工恢复。使用DEBUG手工修复硬盘步骤如下:
a:\>debug
-a
-xxxx:100 mov ax,0201 读一个扇区的内容
-xxxx:103 mov bx,500设置一个缓存地址
-xxxx:106 mov cx,0001 设置第一个硬盘的硬盘指针
-xxxx:109 mov dx,0080 读零磁头
-xxxx:10c int 13硬盘中断
-xxxx:10e int 20
-xxxx:0110退出程序返回到指示符
-g运行
-d500查看运行后500地址的内容
这时候会发现地址6be开始的内容是硬盘分区的信息,发现此硬盘的扩展分区指向自己,这就使DOS或Windows启动时查找硬盘逻辑盘进去死循环,在DEBUG指示符下用E命令修改内存数据 具体如下:
E6BE
xx.0 xx.0 xx.0...............
.............................
.......................55 AA
55 AA表示硬盘有效的标记,不要修改,xx0表示把以前的数据“xx”改成0,再用硬盘中断13把修改好的数据写入硬盘就可以了,具体如下:
A:\>debug
a 100 表示修改100地址的汇编指令
-xxxx:100 mov ax,0301 写硬盘一个扇区
-xxxx: 这里直接按回车
-g 运行
-q 退出
然后运行FDISK/MBR(重置硬盘引导扇区的引导程序),再重新启动电脑就行了。
怎么样?用这种方法处理够简单的吧?而且这种方法还有一个好处就是可以保住盘上的数据!如果你不需要保数据的话,还有更加简单的处理方法:
方法三:巧设BIOS,用DM解锁
大家知道DM软件是不依赖于主板BIOS的硬盘识别安装软件(所以在不能识别大硬盘的老主板上也可用DM来安装使用大容量硬盘)。就算在BIOS中将硬盘设为“NONE”,DM也可识别并处理硬盘。
首先你要找到和硬盘配套的DM软件(找JS要或去网上荡),然后把DM拷到一张系统盘上。接上被锁硬盘,开机,按住DEL键,进CMOS设置,将所有IDE硬盘设为“NONE”(这是关键所在!),保存设置,重启动,这时系统即可 “带锁”启动。启动后运行DM,你会发现DM可以绕过BIOS,识别出硬盘,选中该硬盘,分区格式化,就OK了。这么简单?不过这种方法的弱点是硬盘上的数据将全部丢失。
方法四:对硬盘进行热拔插
在加电热拔插之前应该先做好了一切的准备,并尽可能想一下会出现的问题,把硬盘的电源线先给拔松了一点,防止在热拔插时拔不出来,那就遭了,不过也不能太松不然会找不到硬盘的,找一张软盘启动盘,并插到软驱里,加电开机,看着熟悉的画面,心中尽管有些激动,但你的手可千万不要抖啊,不然硬盘烧掉就惨了!眼睛牢牢盯住你的显示器,软驱灯亮之前(就是要在DOS自举之前并且装入硬盘驱动后,)按下键盘上的“PAUSE”!再把硬盘上的电源线的给拔掉,然后就恢复暂定,一直到DOS启动完成出现DOS提示符的时候,这时你再把电源线给插到硬盘上去,这时如果硬盘没坏的话,就会发现已经可以用磁盘分区工具FDISK命令来查看硬盘的分区表了,不过没有这么简单,里面的分区表已经被逻辑炸弹给恶意修改了,只能查看不能修改也不能删除而且一团糟,用普通的办法还是不能解决的,此时只有用DEBUG来手工恢复了!具体方法同方法二。不过只能修复C盘也就是主引导分区,因为扩展分区已经修改了。恢复了以后,硬盘就可以用FDISK把主引导分区的其它空间分成扩展分区与逻辑盘了。一切OK!
方法五:利用分区表备份恢复
这是最简单的方法,在平时将硬盘的分区表备份一个(没有的话,找一个与之相同型号的硬盘的分区表也可以),万一硬盘被逻辑炸弹干掉了,用软盘都起不动的话,可以在BIOS里将硬盘设为“NONE”,启动后,将分区表的备份恢复回去,然后将硬盘的设置改回来,从新启动fdisk就可以了。以上的工作,不需要找什么特别的软件,一般的杀毒软件,如瑞星,KV3000都可以的。还有,如果有条件,最好装一块硬盘保护卡,可以对付绝大部分的病毒,至少,系统不会被破坏——出了问题,冷启一下就可以了。像CIH这样直接修改BIOS数据的都可以恢复。
方法六:用硬盘逻辑锁解锁程序
如果硬盘被锁死的症结根源在于DOS中的IO.SYS文件,它包含LOADER、IO1、IO2、IO3四个模块,其中IO1中包含有一个很关键的程序SysInt_I,它在启动中很固执,非要去读分区表,而且不把分区表读完誓不罢休。如果碰上分区表是循环的,它就只有死机了(通常硬盘分区表被锁住以后,形成一个闭合的循环链,IO.SYS从链头读起,试图读取所有分区的信息,从而形成死循环。如果修改IO.SYS文件,这样读的第十个扇区结尾处不是55 AA,就认为不是一个逻辑分区的主引导记录,停止读盘,跳出死循环链。我们用UltraEdit打开C:\IO.SYS,查找“b9 01 00 cd 13”(MS Dos6.22只有一处,Win98有2处要修改),改为“b9 10 00 cd 13”。不过,这样操作后,这样即使硬盘分区表是完好的,启动后也不认硬盘。所以修改IO.SYS以后,如果要正常访问硬盘还要将IO.SYS恢复原状。)。很明显,这是DOS的脆弱性和不完备性。其实这也不能怪DOS,因为DOS为了获得硬盘使用权,就必需读分区表参数,而且DOS还约定驱动器号不能超过26,只不过没有考虑到此等循环分区表情形。一句话,机子不能启动不过是DOS操作系统造成的,如果另写一个操作系统,或许就能启动机子。当然这只是说个笑话。
明白了病因在于DOS,问题就好办了。DOS启动中不是要读硬盘分区表吗?我不让你读分区表甚至连硬盘都不让你读,不就可以顺利启动了。的确是这样的,开硬盘锁的程序实现方法就是基于这个思想形成的。当然,这只有从软盘启动着手了。
我们当然不用自己去动手编制这样的程序了,因为已经有好心的网友提供了这样的程序,以下为某网友编制的硬盘逻辑锁解锁程序,对付硬盘逻辑锁非常有用,下载地址:
ftp://202.110.213.90/wenxinjy/fix-io.rar,含源代码及目标程序,共1020字节。
使用方法:如果你的硬盘被老王的逻辑锁给锁住了,把这个小工具复制到你的引导盘上,运行它Modify一下,然后用它来引导被锁的机器。一切OK。注意修复硬盘后Restore回来。当然你运行它时,软驱要打开写保护啦。
好了,有了上面这些方法你就不用再害怕逻辑炸弹了。如果你不小心“中弹”,就试试上面这些方法吧。
再 论 制 硬 盘 逻 辑 锁
姜卓睿 雷必武
一、序言
由于教学工作需要,本人在参看了贵刊98年第4期《硬盘逻辑锁技术研究及应用》与99年第3期《解开硬盘逻辑死锁的一种有效方法》的文章之后,决定以同类方法尝试一下,结果未获得成功,又“苦于”没有KV300 L++ 版,不得不自己做一个硬盘逻辑锁。在制作过程中发现,仅仅只做循环链表是不够的,并不能锁住硬盘。以下是本人经过多次实验后,总结出的一套加锁和解锁的方法,(本文所述均在本机上获得通过!)以供大家参考。硬盘逻辑锁的原理请参见以上文章。
二、制作前的准备:
先将本硬盘(笔者使用的是Quantum SE 3.2G硬盘,C盘2.1G,D盘1.1G)的主引导程序(即0磁头0柱面1扇区的内容)备份到软盘中,这里是保存在软盘0磁头0柱面2扇区中,以便万一做不成功时,进行恢复。
C:\DOS>DEBUG
-a 100
mov ax,201
mov bx,200
mov cx,1
mov dx,80
int 13 ;读硬盘0磁头0柱面1扇区的内容到ES:200处
mov ax,301
mov bx,200
mov cx,2
mov dx, 0
int 13 ;写ES:200处内容到软盘0磁头0柱面2扇区
int 3
↙
-g=100
;然后制作一张“启动盘1” :
-a 200
mov ax,201
mov bx,2000
mov cx,2
mov dx,0
int 13 ;读软盘0磁头0柱面2扇区的内容到ES:2000处
jb 200
mov ax,301
mov bx,2000
mov cx,1
mov dx,80
int 13
jmp ffff:0000
↙
-w 200 0 0 1 ;执行此命令之前插入上述软盘,将这一段起引导作用的程序写到软盘的0磁头0柱面1扇区,使之成为一张特殊的“启动盘1”。
三、制作硬盘锁
我们先看一看硬盘分区表的信息(下述为实例,读者在操作中,显示的段地址不一定是1186):
C:\DOS>DEBUG
-a100
1186:0100 mov ax,201
1186:0103 mov bx,200
1186:0106 mov cx,1
1186:0109 mov dx,80
1186:010C int 13
1186:010E int 3
1186:010F ↙
-g=100
-d 3b0 L 50
1186:03B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 80 01
起始磁头号
起始柱面号(01的高2位并上00)
1186:03C0 01 00 06 7F BF 07 3F 00-00 00 C1 FB 3F 00 00 00
结束磁头号、扇区号、柱面号(格式同前)
起始扇区号(01的低6位)
1186:03D0 81 08 05 7F FF 0C 00 FC-3F 00 80 1D 20 00 00 00
1186:03E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1186:03F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA
-e 3c2
02 ; 将分区类型 06 改为 02,即XENIX,该字节含义如下:
0-无效分区
1-DOS 12位FAT
2-XENIX
4-DOS 16位FAT 分区容量<32M
5-扩展DOS分区
6-DOS 16位FAT 分区容量>32M
-e3d0
01 00 ;将D区的起始扇区号和柱面号改为与C区相同的起始扇区号和柱面号,形成循环链表
-a 100
1186:0100 mov ax,301
1186:0103 ↙
-g=100
;将改后的内容写入硬盘主引导扇区
-a 100
1186:0100 mov ax,201
1186:0103 ↙
-g=100
;再次读出硬盘主引导扇区内容
-d 3b0 L 50
1186:03B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 80 01
1186:03C0 01 00 02 7F BF 07 3F 00-00 00 C1 FB 3F 00 00 00
1186:03D0 01 00 05 7F FF 0C 00 FC-3F 00 80 1D 20 00 00 00
1186:03E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1186:03F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA
;显示表明以上分区表内容已改好
-q
;退出DEBUG,重新启动系统,一切OK!Haha,软盘、硬盘都不能启动系统了!
四、症状说明:
1.只修改C盘的分区类型,即将分区类型06改为02后,硬盘不能启动,A盘可以启动。
2.只做循环链表,Win95/98不能启动,但DOS 6.22可正常启动,启动后将有相同容量、相同数据的24个逻辑驱动器(从C盘到Z盘),启动时提示如下错误信息:
Warning:Logical drives past Z exist and will be ignored
笔者在多年前就做过循环分区链表,它对DOS 6.22 的启动可以说无效,但对付DOS 6.22 的FDISK命令很管用,一运行就“死机”(同 Win95/98 启动一样,因循环检查分区链表而呈死机状)。
3.以上两条都修改后,C盘、A盘的DOS 6.22 都不能启动,但可用 A 盘的DOS 3.3启动,启动后可以运行FDISK命令,也可用DEBUG等工具修改分区表(无需顾及C盘容量是否超过33M)。
由此可见,硬盘逻辑锁只针对DOS高版本有效,对DOS 3.3根本不起作用,循环链表对Win95/98 的DOS 即已经有效。
五、解开硬盘锁的方法:
采用贵刊98年第4期《硬盘逻辑锁技术研究及应用》文中所述修改CMOS的方法也无法启动系统,也就无法解开此逻辑锁,需在另一台机器上制作一张“启动盘2”,具体过程如下:
C:\DOS>DEBUG
-a 100
mov ax,201
mov bx,2000
mov cx,1
mov dx,80
int 13
mov al,06 ; C的分区类型改为06
mov [21c2],al
mov al,0
mov [21d2],al ; D的分区类型改为0 ,屏蔽其它分区
mov [21e2],al ; E的分区类型改为0 目的在于破坏循环链
mov [21f2],al ; F的分区类型改为0
mov ax,301
mov bx,2000
mov cx,1
mov dx,80
int 13
jmp ffff:0000
↙
-w 100 0 0 1 ;将本段程序写到软盘的逻辑0扇区,使之成为引导程序
-q
用作好的“启动盘2”启动死锁机器,然后取出该“启动盘2”,再次开机切换到DOS 6.22系统,此时用 Norton 的 DISKEDIT.EXE 等工具或直接用 DEBUG 即可修复分区表。
如果按照前面讲的将原主引导备份到软盘物理第二扇,也可以用“启动盘1”恢复主引导扇区的内容,一启动即告成功恢复。
通讯地址: 430062 湖北大学经济学院 雷必武
E-mail: laybw@
Or jiangzhuorui@
对《再论制作硬盘逻辑锁》的补充
读了2000年第三期上《再论制作硬盘逻辑锁》一文,不禁使所我对硬盘逻辑锁问题再次产生了兴趣,于是对此进行了一些思考和研究。笔者曾在99年第三期上发表了一篇《解开硬盘逻辑死锁的一种有效方法》,文中提到了制作循环分区表可以锁住硬盘,后来一位远方的读者朋友打电话告诉我循环分区表没有锁住他的硬盘,WIN95仍可以正常启动。我不信,于是就在自己的机子上再次做试验,发现是可以锁住的,只要加上循环分区表后,WIN95和DOS6.22都不能启动了。但一位素不相识的朋友不远千里打来电话,说的应该也是事实。我于是又到系上机房找新买的机子做同样的实验,结果令我大吃一惊,确实有机子用循环分区表锁不住硬盘。对那些用循环分区表锁不住的硬盘,到底用什么招可以将其锁住?我一时也没有更好的办法,甚至猜测是不是新的机型已经不可能再被逻辑锁锁住了。由于我有其它一些事很忙,很久也没有再对这个问题进行思考。最近偶然看到这篇《再论制作硬盘逻辑锁》,立刻再次引起了我对硬盘逻辑锁强烈的兴趣,于是又对硬盘锁进行研究和试验。现将我的一些思考和试验结果告诉那些对硬盘锁很感兴趣的朋友们。
以前的文章提到制作硬盘锁,只要加循环分区表就行了。《再论制作硬盘逻辑锁》一文提出了应该还要修改C盘的分区标志,如将硬盘0柱面0磁头1扇区位于1C2H处表示FAT16的0BH修改为DOS和WINDOWS都不能识别的XENIX分区标志02H。这的确是出了一个新招,对原来的硬盘锁是一个改进。该文还列举了只修改C盘分区标志、只做循环分区表和既修改分区标志又做循环分区表三种情况下机子启动时的症状。最后的结论是只有既修改分区标志又做循环分区表才能真正锁住硬盘。这种情况不尽全面。下面列举我所看到的一些现象。
我的机子有两个硬盘,第一个硬盘装的是WIN95,第二个硬盘又独立装了一套WIN98。在WIN95下只制作循环分区表,DOS6.22和WIN95都不能再启动,启动后出现“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盘分区标志,确实可以锁住目前任何一个硬盘(安装DOS或WINDOWS系统的)。如何解释这一点呢?从前面那些加了循环分区表却可以启动的机子来看,启动后的机子无一例外都是读的第一个分区C盘的分区信息,说明C盘分区始终是读成功了的,且C盘是一个有效的逻辑盘。而这里关键是将C盘分区标志修改成了操作系统所不认识的了。
如何破解应硬盘锁呢?笔者这次也找来98年第3期上的《硬盘逻辑死锁技术研究及应用》细细读了,并且也在不同机子上修改CMOS中硬盘参数的方法来试图解锁,都没有成功。我分析原因如下:修改CMOS中硬盘参数,确实是可以使D盘对应的柱面、扇区和磁头号发生改变,但我们制作的硬盘锁中,硬盘主引导扇区中D盘的起始物理柱面、扇区和磁头号已经被改写为与原C盘一样的参数了,因此读D盘的分区参数时实际上还是读的主引导扇区(主引导扇区的物理位置始终不变),并未去真正的D盘物理位置上读,因此修改CMOS中硬盘参数对解硬盘锁没有用处。当然,该文主要是制作一个带密码的逻辑锁,重点不在解锁,因此这里也不再多讨论它了。
到底如何解锁呢?对一个分区表没有做任何备份的机子来说,最简单和最直接的方法是破除循环分区链就一定可以成功。笔者那篇在99年3期上发表的文章《解开硬盘逻辑死锁的一种有效方法》当然是可以的,但整个编制程序的原理和过程都显得复杂,这篇《再论制作硬盘逻辑锁》中“启动盘2”所采用的方法,不失为一种极简单的解决方法。但该方法还可以简化。该方法制作的启动软盘首先读出硬盘主引导扇区,然后修改C盘分区标志为06H,然后修改D盘、E盘、F盘的分区标志为DOS不认识的0H,并将修改后的结果写回硬盘主引导扇区,最后重新用DOS6.22启动机子就可以了。该方法中修改C盘分区标志是不必要的。因为破坏硬盘锁关键是破坏分区链表,只要修改D盘的分区标志为DOS所不认识的,就不会再往下再继续读分区表了,从而也就不会在读分区表时形成循环分区了。修改E盘、F盘分区标志也不必要,因为现在凡是安装DOS或WINDOWS的机子,分区表实际上都只占用了两栏,也就是只有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:0000到0000:1FFF这段恰好存放的是1024个中断向量,如果将硬盘主引导扇区读入这段内存,将完全破坏中断向量,使紧跟后面的INT 13无法执行,机子无法启动。
用该软盘启动机子的执行过程是这样的:软盘引导扇区的内容首先被读入内存0000:7C00处,然后开始执行该段程序,即读出硬盘主引导扇区内容并修改D盘分区标志为DOS不认识的XENIX分区标志02H,然后写回硬盘主引导扇区,并跳转到内存ffff:0000处执行,使机子重新启动。这时只需要拔出该软盘并插入一张DOS6.22的启动盘就可以启动机子。机子启动后,通常硬盘的逻辑盘都不认识,但使用软盘上的DEBUG或DISKEDIT工具都可以读出硬盘主引导扇区内容,然后加以修改,完成后重新启动机子就可以认识硬盘了。上述所有过程笔者都已在不同机子上做过试验,相信应该没有任何问题的。
现在,从《再论制作硬盘逻辑锁》和上面的分析及简化的解决方法来看,曾经令人恐惧的硬盘锁已经变得可以采用极其简单的方法来解决了。这不能不说是大家长期共同研究讨论的结果
硬盘逻辑锁原理及解决
不知道你是否曾碰到过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 (退出)
退出后运行fdisk/mbr来重置硬盘引导程序,重新启动即可。
这种方法虽然麻烦一点,但是它能够恢复硬盘分区表,也就是说恢复以后硬盘中的数据也不会丢失。而以下方法虽然更加方便,但是要么硬盘中的数据难保,要么有一定危险性。
2、外挂软件法
这种方法原理都是绕过bios对硬盘的检测而直接用一些能够自己查找硬盘的软件来控制硬盘。
首先是DM,现在每一个硬盘厂商都有自己的DiskManager程序,而且都能放进一张软盘里,你可以下载一个使用,如果不清楚自己硬盘的牌子,也可以用IBM出的DM万用版,不过它对现在32G以上的大硬盘支持不好。我们先在bios里面将硬盘所在的IDE口设置为none,(如果你不知道哪个是,全部设为none也可以),然后用启动盘启动系统,启动完成后将软盘取出,放入装有DM软件的软盘,运行DM,它会检测到你的病硬盘的存在,然后将它重新分区就搞定了。DM具体用法比较简单,就不详细说了,不过对E文不太好的朋友可能有些困难,请教身边的高手吧。
我们还可以使用低格软件,也是每一种硬盘都有自己的低格软件,但也有通用的Lformat程序(只有30多k),前面的做法相同,还是在bios里面屏蔽掉硬盘,用启动盘启动,然后换软盘运行低格程序对硬盘进行低级格式化,由于分区表只在硬盘最前列部分,所以估摸着格过前面的分区表部分就可以停止了,然后重新启动在bios里面将硬盘设出来,就可以像一块新的硬盘一样对它进行分区等操作了。
3、热插拔
这是最危险的一种方法,很有可能将你的硬盘烧毁,所以请谨慎。具体做法很简单,首先将硬盘的电源线拔掉,然后软盘启动系统,启动完成后再将硬盘的电源线插上,这时候系统就能够控制硬盘了,可以对它进行分区,恢复分区表等操作。我有一个菜鸟朋友就是在热插拔硬盘3次以后搞定的。不过此种方法存在危险,强烈不推荐使用,如因此损坏,本人概不负责。
其实最好的情况是你有分区表备份,那恢复起来就比较容易了,而且数据也不会丢失。
解开硬盘逻辑锁方法
介绍三种有效的逻辑锁解锁方法
(1)、使用DM之类的软件对硬盘进行低级格式化,这种方法不能保留硬盘数据。开机进入BIOS设置,将带有逻辑锁的硬盘设置
展开阅读全文