微型机与应用
WEIXINGJI YU YINGYONG
1999年3月 第18卷 第3期 vol.18 No.3



硬 盘 保 护 技 术
袁宗福
　　摘　要：计算机病毒的发展威胁着硬盘的正常使用，因此如何对硬盘进行保护，是计算机专业人员所关注的问题。本文介绍了硬盘及CMOS保护卡的原理和软硬件设计。
　　关键词：硬盘及CMOS保护　存储器　译码　GAL设计　中断
　　硬盘保护走过了一条从软保护到硬保护的过程。人们使用Kill、Scan、CPAV及KV300等检查杀毒软件，从原来只能检测1种或几种计算机病毒，到现在能检测几千种，查毒杀毒软件的水平也在不断的提高。但是，在杀病毒软件的应用过程中，人们逐渐发现了软件杀病毒的弱点，这种弱点不在于杀病毒软件，而在于软件本身。杀毒软件运行时，涉及到很多其它程序，一旦被感染，将会带来很多意想不到的问题。虽然，杀毒软件设计者使用了各种防止被感染的方法，但都不够理想。另外，上机人员有意无意的错误操作：如格式化硬盘、删除系统文件和数据、修改CMOS配置等，都给微机管理人员带来很多麻烦。
　　于是，人们开始设计硬盘保护卡，即采用通道写保护技术，将逻辑C盘(双硬盘时为C、D盘)当作固化盘保护起来。硬盘保护卡可以插在PC系列机的任何一个扩展槽上，不占内存空间、使用方便，也使管理人员不必经常费时费力地进行系统的恢复。硬盘保护程序固化在硬盘保护卡上的EPROM里，从而避免了被病毒感染的可能性。硬盘保护卡可带开关锁，使用者只需将DOS及系统软件安装到C盘后将锁上锁，即可保护BOOT区、分区表不受侵犯，确保C盘中的DOS及系统软件不被病毒感染或人为破坏(删除、改写、格式化)，并可确保系统配置(CMOS)不被修改与破坏，同时又不影响各种软件的正常运行。
　　本文将介绍硬盘保护卡的软硬件设计方法，并给出硬件原理图及软件程序框图。
1　硬盘保护卡的原理
　　PC系列微机的ROM BIOS为总线上的、带有扩展ROM程序的适配卡进入系统提供了方便。在主机启动时的上电自检(POST)期间，将为BIOS各调用程序建立中断向量，在缺省向量被设置好之后，对扩展的ROM模块进行扫描。此时，适配器板上的ROM程序可以获得控制权，该程序可以通过设置中断向量将它们自身挂到系统中。
　　为了寻找有效的适配器插件板上的扩展ROM，要对绝对地址C8000H～E0000H以2KB为单位进行扫描，即以C8000H+m×800H为始地址进行搜索。一个有效的ROM块应满足如下定义：
　　字节0：55H；
　　字节1：AAH；
　　字节2：长度指示器，表示ROM中以512B为1块的信息块个数(长度/512)。为测试ROM模块的完整性，需要求一个检查和。在定义的ROM中，每1B按模100H求和，其和必须为0，该模块才被认为有效。
　　当系统的ROMBIOS找到1个有效的ROM时，它对ROM的字节3(将是一个可执行代码)作1次远调用(far call)，适配器板现在可以执行它的加电初始化任务。执行完初始化工作后，适配器插件板上的ROM应通过1条远返回(far return)指令，将控制权交还给ROMBIOS程序，完成系统的启动。
　　由此可见，硬盘保护卡就是这样一个适配器插件板：把自编软件固化在板上的EPROM里作为可访问的ROM组件。当系统POST时它能修改中断向量将其自身挂在系统上，而挂在系统上的程序则可通过对文件执行的实时跟踪检测，以达到保护C盘的目的。
2　硬盘保护卡的硬件设计
　　1.PC扩展槽。在PC机的扩展槽中，62芯的插槽由62条信号线组成，包括地址线、数据线、+5V、GND、读、写信号线等。在这里只对本文中用到的一些信号进行简单的介绍。
　　A0～A19(地址位0～19)：这些信号用来对系统中的存储器与I/O设备寻址。20条地址线最多可访问1MB的存储器，它们均为高电平有效。
　　DO～D7(数据位0～7)：这些信号用于微处理器、存储器与I/O端口之间传送数据，均为高电平有效。
　　AEN：用于端口译码器的控制，高电平有效。
　　MEMR：存储器读信号，低电平有效。
　　MEMW：存储器写信号，低电平有效。
　　2.硬件线路的设计。硬件部分主要包括译码和存储器二部分。
　　选择1片2764(8KB)的EPROM用于存储程序，由于2764是只读存储器，再选择1片6264(8KB RAM)或6116(2KB RAM)用于存储中间结果和变量。RAM存储器的选择可以根据需要来决定，这里使用开关位SW4来控制选择6264或6116。如果程序量大，可以采用分页的方法把大量的存储器映射到少量的存储空间上。
　　译码部分选用GAL16V8(通用阵列逻辑)来实现。GAL16V8是一个可由用户组态而执行一定逻辑功能的电可擦除的、可重编程的PLD器件，它的每个输出是输入的“乘积和”函数，阵列中输入线和输出线的交点上是用逻辑元件连接起来。其基本结构如图1。


图1 GAL基本结构
3.硬盘保护卡所占的内存空间。硬盘保护卡所占的内存空间如表1
表1　硬盘保护卡所占的内存空间
　　191817161514131211109876543210
ROM地
址空间＜1
11
10
01
10
0×
×0
00
10
10
10
10
10
10
10
10
10
10
10
10
1
RAM地
址空间＜1
11
10
01
10
0×
×1
10
10
10
10
10
10
10
10
10
10
10
10
10
1
　　4.硬盘保护卡的电路原理图如图2。
　　5.GAL16V8设计源程序文件。根据硬盘保护卡所占的内存空间和2764、6264(或6116)的片选情况，使用Fast Map编译软件格式编写出如下.PLD文件：
　　PLD16V8
　　HardC U03
　　DESIGNED 10:36:11 5/8/1998
　　HardC
　　A12 A13 A14 A15 A16 A17 A18 A19 AEN GND　/*1～20管脚定义*/
　　MEMW QA11 CS02 CS01 SW1 SW2 SW3 SW4 A11 VCC
　　逻辑方程：
　　/CS01=A19×A18×/A17×A16×/A15×/A14×/SW3×/A13×/AEN+A19×A18×/A17×A16×/A15×A14×SW3×/A13×/AEN
　　/CS02=A19×A18×/A17×A16×/A15×/A14×/SW3×A13×/AEN+A19×A18×/A17×A16×/A15×A14×SW3×A13×/AEN
　　/QA11=SW4×/A11+/SW4×/MEMW
　　DESCRIPTION
　　GAL for protect hard disk C
　　其中，SW3(开或关)用于决定2764的起始地址D0000H或D4000H。SW4用于决定使用6264(8KB)还是6116(2KB)芯片。使用DIP4可以改变ROM地址，目的是避免与其它插件板的地址冲突。



图2　电路原理图
3　硬盘保护卡的软件设计
3.1　硬盘保护卡软件设计应注意的问题
　　硬盘保护卡的初始化程序是在系统上电自检期间执行的，由于DOS系统还没有装入，所以这时只能使用BIOS的功能调用。当用户在DOS提示符下执行文件时，DOS都调用INT 21H的4BH功能，所以，在软件设计时，可截取4BH功能以实现对病毒的实时检测。
3.2　安装INT21H技术
　　DOS由下列4部分组成：引导扇区、IBMDOS.COM、IBMBIOS.COM、COMMAND.COM。其中INT21H是在IBMDOS.COM文件被引入内存后建立的，而硬盘保护卡是在DOS的这4部分之前引入的，也即保护卡上的程序先于IBMDOS.COM执行。如果硬盘保护卡只是在装入时简单地修改一下中断向量，则会被IBMDOS.COM执行时重新设置。那么怎样才能够在IBMDOS.COM修改INT21H后，再修改INT21H中断向量呢?可修改INT8H时钟中断，每秒18.2次检测INT21H是否被修改，一旦被修改，则修改INT 21H和INT 13H，并使其指向硬盘保护程序。
3.3　截取INT 13H的写功能
　　为了对硬盘写操作或格式磁道进行检查，保护卡对做硬盘操作的INT 13H中断进行了截取，如图3。由原13H中断所要求的参数形式计算保护分区(C盘)的保护区域，然后进行合法性判断，包括是否对主导区进行写操作。为了防止非法用户对原13H中断程序的直接调用，可以对原13H中断服务程序前2B进行保存后删除，在新的13H中断程序调用原13H中断程序之前恢复这2B，调用完后再删除这2B。


图3 修改后的 INT 13H流程图
3.4　对CMOS参数的重写
　　为了防止CMOS被修改，可在系统启动时自动对其恢复除时间信息以外的50B CMOS数据。另一种方法是截取键盘中断，在机器运行中每当有键盘输入时，CMOS信息就会重新刷新1次。CMOS参数的备份可存放在主引导记录扇区中(主引导记录中有1片内容为0的单元，可加以利用)，另一种方法是事先写入保护卡上的2764存储器中。
　　以上介绍的硬盘保护卡，笔者已将它做成了成品，作为自制产品在校内的公用机房中使用。实践证明它确实起到了保护硬盘信息的作用，防止了非法用户对CMOS信息的随意修改，提高了机器的维护和管理水平。
作者单位:南京机械高等专科学校计管系(210013)
参考文献
　1　张旭东，廖先芸.IBM微型机实用接口技术.北京：科学技术文献出版社，1993
　2　张研.防病毒卡设计.中国计算机用户，1994
(收稿日期：1998-09-10)
