微型机与应用
MICROCOMPUTER & ITS APPLICATIONS
2000　No.19　No.1　P.55-56




硬盘写保护方案
伍红兵　沈鑫剡
摘 要： 各种硬盘分区写保护方案以及各种方案的优缺点。
关键词： 硬盘写保护 TSR程序 写保护
　　在大专院校的公共机房以及政府、公司、企业的重要部门的计算机管理中，往往采用硬盘分区写保护的方法来保护系统及数据。在各种方案中，有的基于软件，有的基于硬件，有的则采用软硬结合的方法。本文旨在介绍各种方案及其利弊，以供参考。
1 基于中断驻留程序的写保护方案
　　这种方案实现起来较简单，全部内容就是1个TSR程序，加在自动批处理文件中，开机即被执行，接管INT 13并驻留内存。当程序访问硬盘时，写保护程序先判断操作是读还是写，若是写则还要判断是否写合法分区，若不是则中断返回或给出提示信息。程序流程见图1所示。

图1 接管后的ITN 13
　　实际使用时，一般把计算机硬盘分为2个以上的分区，系统以及重要的数据安装在C分区上，用户数据保留在扩展分区上，写保护软件只对C分区写保护。这种方法对Windows9x也有效（但最好把虚拟内存设置在扩展分区上）。因为操作系统往往设置有较大的磁盘缓冲区，用户可以对写保护的分区进行正常的读写操作，比如删除或拷贝文件，甚至是格式化和分区，表面上操作很正常，但重新开机，写保护分区又复原了。
　　在机房管理中，为尽量减少写保护软件对系统及使用者的影响，也可以把操作系统和应用软件安装在未写保护的分区上，比如D盘，再备份到C分区上，然后对C盘写保护。这样一旦D盘的系统被损坏，可以从C盘快速恢复。这种方案简单易行，除了可以防止人为操作失误外，也可以防止一般病毒的破坏。缺点是不够隐蔽。有些病毒程序专门对付这种保护软件，通过设置单步中断等方法跟踪到原来的INT 13入口，通过长调用绕过写保护程序。因此，对病毒的防范不是很理想。
2 修改硬盘BOOT区的写保护软件
　　硬盘BOOT区包含BOOT区程序和硬盘分区表。BOOT区程序搜索可启动操作系统分区的标志80H，搜索成功则读取引导分区内的操作系统的引导扇区，并把控制权交给引导扇区程序。
　　为实现硬盘写保护，改写BOOT的程序，使之完成以下工作：
　　1．修改INT 13入口，使之指向写保护驻留程序；
　　2．驻留写保护程序；
　　3．执行正常的BOOT程序功能。
　　这里有几个关键问题要注意：
　　1．因为BOOT区程序先于DOS启动，不能用MS－DOS提供的INT 21 AH＝35H及INT 21 AH＝25来取得和设置中断服务程序，因此，必须直接修改中断向量表。
　　2．要使中断服务程序安全运行，就必须使中断服务程序常驻内存，以免被其它程序覆盖。但写保护程序先于DOS启动，无法利用INT 21 AH＝31H来驻留程序。因此必须另辟蹊径。方法是将BIOS数据区0040：0013H记载内存大小的数据减少2KB，使DOS以为常规内存的底端由638KB（或小于640KB的其它值，取决于写保护程序大小）开始，而把硬盘写保护程序搬至638K至640K之间即可。情形如图2所示。

图2 写保护程序加载情况
　　3．完成以上代码往往大于512B，因此一般把程序分布在0磁道的多个扇区中，并由BOOT区的程序启动时装配。
　　4．保护程序运行时，以前的分区表信息和BOOT区程序仍然需要，应把它们放在0磁道的某个扇区中。新的INT 13服务程序把访问0磁道BOOT区的操作都定向到以前的BOOT区内容的备份扇区中，使操作系统及用户感觉不到BOOT区信息有什么异常（但Windows 9x知道）。
　　新的写保护程序先于操作系统加载，因此这种方案较前一种更为隐蔽。同时，BOOT区已不再是以前的正常信息，即使用软盘启动，也因无法看到分区表信息而无法看到硬盘，提高了安全性。这种方案的缺点是仍无法挡住有针对性的病毒的攻击，对一些恶意攻击者来说，也较容易攻破。
3 固化的写保护程序
　　这种方案是对前2个方案的进一步改进。改方案是把写保护程序烧在EPROM中，并以接口卡的形式安装在扩展槽内，成为扩展的BIOS，因此，除具有前者的所有优点以外，安全性更高，用软盘启动，也无法写受保护的硬盘分区。缺点是仍然无法挡住有针对性的病毒及人为的攻击。
4 直接修改主板上的BIOS
　　这种方案是把BIOS代码从EPROM中读出来，找到其中关于磁盘读写的代码，直接修改INT 13的处理程序，使其具有硬盘分区写保护的功能。因为不同的机型的BIOS代码差别较大，不同的机型要进行相应的修改，因此这种方案有相当的难度，而且兼容性很难保证，但效果较好，某些跟踪INT 13原始入口的病毒也无法攻破。
　　这种方案并不是攻不破的，有些病毒程序有自己的INT 13，具有直接写端口的能力，它能直接读写与硬盘有关的1F0～1F7端口，对于这种病毒，任何基于软件的写保护程序都形同虚设。因此，必须寻找基于硬件的硬盘写保护方案。
5 基于硬件写保护的硬盘写保护卡
　　这种方案实实在在地给硬盘加上了写保护。其思路是，不论高层如何访问硬盘，最终都归结为对端口1F0～1F7的读写。可以通过硬件过滤对这些端口的读写，当发现有写磁盘命令，并且是写受保护的分区时，拦截该信号，并给硬盘控制器1个伪造的命令，比如寻道命令。这样，无论什么样的病毒或人为的破坏，都无法攻破。对于需外接多功能卡的主板（如486以下的机型），从总线扩展槽上能获得所有对硬盘的读写操作信号，可以设计如图所示的硬卡插在扩展槽中，实现硬盘分区写保护。其原理见图3。

图3 第一种基于硬件的硬盘写保护方案
　　对于486以上的计算机，多功能卡制作在主板上，硬盘读写信号不再出现在总线扩展槽中。可以对前1种方案稍加改进，并从IDE接口电缆上获得硬盘读写信号。其原理见图4。

图4 第二种基于硬件的硬盘写保护方案Y
6 进一步的设想
　　从以上各种方案来看，基于软件的硬盘写保护方案成本低，但安全性较差；基于硬件的硬盘写保护方案，成本高，但安全性很强。从技术的角度来看，仍然有基于软件的方案可以达到类似于硬件的写保护效果。笔者初步的想法如下：
　　80386以上的CPU都支持保护模式。保护模式中可以设置IO空间保护。方法是在EFLAGS寄存器中设置IOPL字段，同时在TSS中设置相应的I／O许可位图。从而控制对硬盘所有端口的访问。也可以控制访问CMOS端口70H、71H，防止人为地破坏CMOS信息，迫使用户只能从C盘启动。在方案2的基础上，让写保护软件首先启动并进入保护模式，设置相应的系统表，然后加载操作系统，从而实现硬盘写保护。著名的调试软件SOFT－ICE就利用了类似的方案来截获对端口的访问。当然，这一方案的编程难度较大。
伍红兵（南京工程兵工程学院计算机教研室210007）
沈鑫剡（南京工程兵工程学院计算机教研室210007）
收稿日期：1999－08－15
