3.5硬盘解锁
3.5.1硬盘锁住原理
硬盘锁住通常与硬盘的分区表有关,因此首先应该了解硬盘的分区表。硬盘分区表位于0柱面0磁头1区,这个扇区的前面200多个字节是主引导程序,后面从O1 BEH开始的64个字节是分区表。分区表共64个字节,分为4栏,每栏16字节,用来描述一个分区。如果是用DOS的Fdisk程序分区后,最多只用两栏,第一栏描述基本的DOS分区,第二栏描述扩展的DOS分区。
分区表一栏的结构与各字节的含义如下:
(1) OOH:标志活动字节,活动DOS分区为80H,其他为00H;
(2) 01H:本分区逻辑0扇区所在的磁头号;
(3) 02H:逻辑0扇区所在柱面中的扇区号;
(4) 03H:逻辑。扇区所在的柱面号;
(5) 04H:分区类型标志;
(6) 05H:本分区最后一个扇区的磁头号;
(7) 06H:最后一个扇区的扇区号;
(8) 07H:最后一个柱面的柱面号;
(9) 08H:硬盘上在本分区之前的扇区总数,用双宇表示;
(1b) OCH:本分区的扇区总数,从逻辑0扇区计数,不含隐藏扇区,用双字表示。
分区表的最后两个字节是分区表的有效标志,如果将其改变,将不能从硬盘启动,这是一种简单的锁住硬盘的方法。解决的办法是从软盘启动,启动后硬盘仍然可以使用。用Debug或Norton中的Diskedit软件将硬盘该分区表中的标志恢复,则从硬盘启动也没有问题了。
锁住硬盘的另一种方法是修改分区参数,如果将分区参数全部变为0,则启动时由于找不到分区参数,从硬盘无法启动,从软盘启动后也不识别硬盘,如果输入盘符C并回车,将出现提示:
Invalid
driver
specification
此时由于启动计算机,不识别硬盘,在A盘或驱光盘中上用DOS的Debug仍然可以读出硬盘0柱面0磁头1扇区的内容,修改后再写入0柱面0磁头1扇区,重新启动机子又没问题了。如果将分区表参数随意改为其他参数,在不能启动时,可以用安装有DOS的系统盘启动,按“F3”键退出后将出现内存分配错误,不能装载DOS的命令解释器COMMAND的提示,系统就死机了。但用一张格式化成系统盘的软盘或启动光盘则可以顺利启动,只要有Debug,仍然可以将分区表参数修改回去。如果不幸将分区表参数改成一个循环链,即C盘的下一个分区指向D驱,D驱的下一个分区义指向C驱,这样循环下去,启动时由于无休止地读取逻辑驱动,所以会死机。这时只要有硬盘存在,不管用软盘光盘还是硬盘都无法启动计算机了,不能启动是由于硬盘造成的,即使将硬盘装到其他计算机上,也无法使用,这样硬盘就彻底被锁死了。
一个完整的硬盘锁程序,不过是重新改写0柱面0磁头1扇区的引导程序,并将分区表破坏或故意制造一个循环分区表,而将真正的硬盘分区表参数和引导程序放在其他隐藏扇区并保护起来。如果启动时口令不对,则不能启动计算机,口令对了则顺利启动。这种硬盘锁程序,情形好的还可以用启动盘启动,情形严重的就是启动盘也不能启动,此时硬盘就被锁住了。
3.5.2几种常用的解锁方法
1.“热插拔”硬盘电源。
“热插拔”硬盘电源是在当系统启动时,先不给被锁的硬盘加电,启动完成后再给硬盘“热插”上电源线,这样系统就可以正常控制硬盘了。
2. U1traEdit
首先准备一张启动盘,然后在其他正常的计算机上使用二进制编辑工具(推荐U1traEdit)修改软盘上的10. SYS文件(修改前先将该文件的属性改为正常)。具体是在这个文件里面搜索第一个“55 AA”字符串,找到以后修改为任何其他数值即可。用这张修改过的系统软盘就可以顺利地带着被锁的硬盘启动了,不过这时由于该硬盘正常的分区表已经被破坏,当无法用Fdisk来删除和修改分区时,可以用关于分区表恢复的方法来处理。
3. DM
DM是磁盘管理工具,可以对磁盘进行高级格式化、低级格式化、数据清零、重新分区、备份分区表、检测磁盘等,是个很有用的工具。它支持目前所有的硬盘新技术,拥有极为强大的功能:快速的简易和高级选项,初级用户容易掌握其硬盘安装功能,又能完全满足高级用户的特殊需求;完全支持用户操作系统所支持的FAT32文件系统。在一个分区上格式化大于2GB的驱动器,当用户使用高级安装模式或菜单模式时,允许选择自己所需的磁盘簇的大小;突破8. 4GB、32GB限制;使用硬盘诊断功能可以在硬盘子系统中找出相互关联的问题;兼容多种操作系统,包括Windows 9X/ME/NT4/2000/DOS/OS/2;支持IDE电源管理;包含了对IDE/ATA驱动器的多扇区读写支持,加速数据传送;快速格式化IDE/ATA/SCSI驱动器。在绝大多数情况下完全安装驱动器不超过1 min;支持增强型IDE/FAST ATA的高速数据传送;其中包含的低级格式化程序比许多BI-OS附的低级格式化程序先进得多。它可以修改硬盘的交错因子,甚至可以修复某些0磁道出了问题的硬盘。
因为DM是不依赖于主板BIOS来识别硬盘的硬盘工具,就算在主板BIOS中将硬盘设为“NONE",DM也可识别硬盘并进行分区和格式化等操作,所以也可以利用DM软件为硬盘解锁。
首先将DM复制到一张系统盘上,接上被锁硬盘后开机,按“Delete”键进入BIOS设置,将所有IDE接口设为“NONE”并保存后退出,然后用软盘启动系统,系统即可“带锁”启动,因为此时系统就等于没有硬盘。
启动后运行DM,当DM可以识别出硬盘时,选中该硬盘进行分区格式化就可以了。这种方法简单方便,但是有一个致命的缺点,就是硬盘上的数据保不住了。
在使用DM时,使用模式意义为:
/m: Manual mode.(手动模式开关)
/c. Color mode(彩显方式)
/p: PC一XT模式
/a:PC一AT模式
/2:DOS 2. XXmode
(使 DM以DOS2. XX模式工作)
/3:DOS 3. XXmode
(使DM以DOS3. XX模式工作)
/4:DOS4,XXmode
(使DM以DOS4. XX的模式工作)
/z:Zen让hMS-DOScompadbil让ymode
(DM工作时使用MS-DOS的最大兼容模式)
/w:WyseMS-DOScompadbil卸mode
(使DM与WyseMS-DOS兼容)
/I允许DM使用NECDOS3的大分区工作模式
underNECDOS3. 3 Only
/v:VariableClusterandrootdirectorySizes
(用DM改变簇的大小和根目录的多少)
/0:OperatediSklllallageranddeViCedriver
uSlngversiOn2. 02 conventions
(使DM采用2,02版本的设备驱动方式工作)
/i:Selectinterleave value during au
tomactiCinstallaon
(选硬盘交叉因子)
/n:Not with default parameters
(不使用默认参数)
/s:Sectorpertrackparametermatching
(选择扇区的磁道数)
/5:UseWD1005styletranslation scheme
(使DM采用WD1005传输方案工作)
/7:USeWD1007 StyletransladonSCheme
(使DM采用WD1007传输方案工作)
/k;specifycytinderSkewandheadSkew
forusedUringlowlevel initialization
(用DM强制柱面和磁头偏移)
/d:Enterbytes-from index( BFI) when
Addingnawstothe defect list
(使DM输入缺陷表时使用BFI.方式)
4.解开硬盘锁的程序法
硬盘锁死的根源在于DOS中的IO. SYS文件,它包含LOADER、 101、102、103四个模块,其中,101包含有一个很关键的程序Syslnt-I。它在启动中首先要去读分区表,如果碰上分区表是循环的,它就只有死机了,这是DOS的严重缺陷。
知道了病因在于DOS,所以,在启动过程中控制不读分区表,甚至连硬盘都不读,就可以顺利启动了。实际上开硬盘锁的程序实现方法是重新写一套程序,存入启动盘启动。
在计算机的启动过程,如果选择从硬盘启动,则计算机和磁盘最开始读取将是硬盘0柱面0磁头1扇区的内容读入内存0000:7 C00处,并跳到0000:7 C00处执行。如果选择从软盘启动,则计算机和磁盘最开始是将A盘0磁通0磁头1扇区的内容读入内存0000:7 C00处,并跳到0000:7 C00处执行,在执行过程中,计算机不检查该扇区的内容是什么,只机械地执行读命令,使得许多系统中病毒得以生存。但利用这一点,恰恰使程序解锁法有了用武之地,如果用DOS格式化一张可以启动机子的系统软盘,将该软面的0磁道0磁头1扇区的内容移到后面的空白扇区中,而重新写一段程序到该软盘的0磁道0磁头1扇区,这样用软盘启动时首先执行的是之前所写的程序了。在这段程序中,具备这样一些功能:在DOS启动前抢先拦截INT 13H,驻留高端内存并监视INT 13H,判断是否读硬盘,如果是读硬盘就直接返同,这样就禁止了读硬盘,也就避免了DOS读硬盘循环分区表造成的死机;同时拦截对软盘的读取,如果读软盘的0磁道0磁头1扇区,就改成读真正有引导程序和磁盘参数表的扇区,免得DOS在启动中找不到软盘的磁盘参数表而死机。完成这些任务的同时,还要读取软盘真正的引导程序并把控制权交给它。
该方法可以称为万能的,因为它在用软盘启动中,始终不与硬盘打交道,这样不管硬盘用什么方法加锁,对DOS的启动都没有影响。当然,这样启动的计算机是不识别硬盘的,但这没有关系。可在计算机启动后,用Debug调出驻留高端内存的新INT13 H程序,将其改为只有一条直接执行旧INT13 H的语句,这样在Debug下可以用INT12H读取硬盘0柱面0磁头1扇区的内容,如果有备份,将分区表参数恢复后再写入0柱面0磁头1扇区,重新启动计算机就可以了。如果没有备份,去掉分区表中的循环链,用正常DOS启动盘重启计算机后至少也可以重新对硬盘分区,不至于硬盘被锁住打不开了。
5.程序及说明
①下面是存定入软盘或光盘0磁道0头1扇区的源程序key. com,程序用Debug输入。0>debug
-a100
100 CH
101 XOR AX,AX
103 MOV DS,AX
105 MOV ES,AX
107 MOV SS,AX
109 MOV AX,7000
100 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;7ElF
11F MOV CX,0003
122 PISH CX
123 MOV AX,0201;读启动软盘的引导扇区
126 MOV BX,7000
129 MOV CX,4F01
12C MOV DX,0100
12F INT 13
131 POP CX
132 DEC CX
133 JNX 0122
135 MOV AX, [ 0040]抢先获取INT13H的位置
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;复制改写的TNT 13H程序高端内存
155 MOV DI, 0000
158 MOV CX,0030
15B REPNZ
015C MOVSB
015D MOV AX,0000;将新INT13 H位置写入中断向量表
0160 MOV[004C],AX
0163 MOV AX,ES
0165 MOV[004E],AX
0168 JMP 0000 : 7 C00
016D PUSHF:新INT13 H程序
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;此处跳转专执行旧INT13, f日INT 13H的位置由前面程序得后写入
N key,com
RCX
200
W
Q
②程序的装载。在进行下面工作前,先制作一张启动盘,将启动盘内容考入光盘中,然后用Debug。key. com将程序key. com调入内存偏移地址为100H,同时在400H处写入段装载程序,即
C>debug key. com
-a400
400 MOV CX,0003
403 PUSH CX
404 MOV AX,0201;将A盘引导程序读入内在1000H处
407 MOV BX,1000;为确保成功,首次采用重复读三次
40A MOV CX,0001
40D MOV .DX,0000
410 INT 13
412 POP CX
413 DEC CX
414 JNZ 0403
416 MOV AX,0301;将已读入内在的软盘引导程序写入软盘
419 MOV BX,1000;最后一个磁道的首扇区
41C MOV CX,4F01
41F MOV DX,0100
422 INT 13
424 MOV AX,0301;将key. com程序写入软盘0磁道0磁头1扇区
427 MOV BX,0100
42A MOV CX,0001
42D MOV DX,0000
430 INT 13
432 INT 3
为保证万无一失,应将启动盘这两个扇区的内容重新读出来,以保证写入正确。从该软盘启动后,不识别硬盘,并且在高端内存驻留了新INT13H程序,该段程序实际上是key. com中从16D到187部分。由于有此段程序存在,在Debug下也无法读硬盘,也就无法恢复硬盘分区表,因此计算机启动后首先应修改这段程序。这样这段程序就位于内存中9 FCO :0000处,在Debug下,用U9FCO:0显示这段程序。可以看到位于9 FCO. 001A处的是一条跳转指令,该跳转指令是转去执行最原始的INT13 H。由于BIOS版本不一样,跳转指令指向的位置可能不一样,这时在Debug下编写这样一语句:a9 FCO : 0 3 MPF000 : A5 D4。这样,对硬盘的禁写与禁读都不再起作用了,在Debug下用INT13 H的2号子功能可以读出硬盘分区表,修改恢复后再用3号子功能将数据写回分区表。退出Debug,重新用DOS启动计算机即可。
6.建议
为更好地保护硬盘,最好将硬盘分区表信息备份起来。备份有两种方式,一种是以文件形式将硬盘每个逻辑盘的分区信息存储起来;另一种是将分区信息备份在硬盘隐藏扇区里。例如,可以将0柱面0磁头1扇区备份在0柱面0磁头3扇区,将D盘开始柱面号0磁头1扇区备份在该柱面0磁头3扇区,其他逻辑盘也如此。这种方法简单、方便,也很可靠。