|
再 论 制 硬 盘 逻 辑 锁
|
|
一、序言 由于教学工作需要,本人在参看了贵刊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
起始磁头号 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@163.net
|