IDE硬盘装置设定在DMA传输 模式下的病毒检测方法 本发明涉及一种计算机病毒的检测方法,特别涉及一种用来检测一设定在DMA传输模式下的IDE硬盘装置的病毒检测方法,可在检测到该计算机系统以DMA数据传输方式写入数据至该IDE硬盘装置时,即时检测可能的病毒。
由于计算机科技的快速发展,使得个人计算机的功能越来越强,因而在现代工商业社会中的各项的文书作业、会计作业、工作安排等皆深深依赖计算机的辅助,故使得计算机数据的安全性益形重要。然而,计算机系统或计算机数据却经常会受到计算机病毒的破坏,特别是在网际网络的普遍使用之后,文件案数据的交换、传输机率越来越高,也使得计算机病毒的感染机会益形提高。
在各种类型的计算机病毒中,都有其特有的病毒型态及传播途径,这些计算机病毒对一计算机系统而言,都会造成不同程度的破坏。一般来说,计算机病毒可区分为文件案型、开机型、复合型、巨集型等型态。有些计算机病毒地型态是以其特有的病毒码写入至计算机系统中的硬盘装置中,并利用这些区域作为传布的媒介,以对该计算机系统的数据文件、执行文件或启动磁区进行破坏。
因此,若要有效防止病毒码破坏计算机系统,则应在该病毒码写入至硬盘机之前,即予以检测、警告,方能达到有效防止计算机病毒的破坏。此外,由于各种计算机系统所使用的界面规格、工作模式等并不相同,故若要有效防止计算机病毒,则尚应针对该计算机系统的组态及该计算机系统所使用的特定界面规格及工作模式,设计出一有效的病毒检测方法,方能奏效。
在目前普遍使用的个人计算机系统中,其硬盘装置仍以IDE(IntegratedDevice Electronics)界面为主。为了要加快该IDE界面的传输速度,故在大部分的个人计算机系统中,其IDE界面所连接的IDE硬盘装置依其传输模式可区分为PIO传输模式(PIO Access Mode)与DMA传输模式(DMA Access Mode)两种模式,其中PIO传输模式又可依据其最高传输速率分为五种模式PIO模式0-4,而DMA传输模式亦可依据其最高传输速率而分为单字DMA模式0-2、以及多字DMA模式0-3等数种模式。
DMA传输模式与PIO传输模式的差别在于前者是以DMA(直接存储器存取)通道作直接的数据存取,而后者则是通过中央处理单元的控制,来完成数据传输的动作。
因此,若要有效防止计算机系统不受计算机病毒的侵入,则需针对计算机系统中的特定的界面、以及不同的工作模式下的特殊执行状况,来设计病毒的检测方法,方能达到有效检测病毒的目的。例如,对一IDE界面的硬盘装置而言,若该硬盘的数据传输模式是被设定在DMA传输模式下,则即应针对此一模式组态的特性设计出正确的病毒检测方法,才能真正达到病毒防止的目的。
因此,本发明的主要目的是提供一种检测计算机病毒的方法,其可在病毒程序企图写入病毒码至计算机系统的硬盘装置中时,予以即时检测出,并发出一警告,以适时警告使用者。
本发明的另一目的是提供一种IDE硬盘装置设定在DMA传输模式下的病毒检测方法。当病毒程序企图以DMA方式写入任何数据至该IDE硬盘装置时,本发明即可即时检测出该可能的病毒码。
本发明的另一目的是提供一种即时检测DMA传输模式下的IDE硬盘装置的病毒方法,该方法结合了计算机系统的中央处理单元中相关的控制寄存器、除错地址寄存器、除错控制寄存器、除错状态寄存器等来执行该病毒的检测。
为了实现本发明的上述目的,在本发明的方法中,当检测出中央处理单元所发出的除错状况时,首先判断该中央处理单元中的除错状态寄存器中对应于1F7h及177h的中断点条件是否被设定。若是,则判断目前执行的指令是否为OUT或OUTS,若是,则判断该写入数据至硬盘装置的动作是否为DMA传输模式。若是,则再判断IDE控制器是否发出硬件中断要求的信号,若是,则读取IDE控制器中的组态寄存器的PRDT值,并取得DMA基底地址及字节计数值。最后,扫描并对比该DMA基底地址及字节计数值所定义的数据区块与预存的已知病毒码,并在找到相吻合的已知病毒码时发出警示。
本发明的其它目的及其详细的病毒检测步骤,将由以下较佳实施例说明并结合附图,作进一步的说明,其中:
图1是显示一包括有总线主控器IDE控制器的计算机系统简化示意图;
图2是显示一Pentium级中央处理单元内部与本发明方法相关的寄存器示意图;
图3是显示本发明病毒检测方法的流程图;
图4是接续图3的本发明控制流程图;
图5是显示图4的步骤111中所述PRDT的数据格式。
图1是显示一包括有总线主控器IDE控制器的计算机系统简化示意图。在该简化示意图中,计算机系统中的中央处理单元1是通过系统总线与系统存储器2连接,该系统总线包括有数据总线DATA、地址总线AD、存储器写入MEMW #、存储器读取MEMR #等信号。
总线主控器IDE控制器3与中央处理单元1间的界面信号包括数据总线DATA、地址总线AD、输出入装置读取IOR #、输出入装置写入IOW #、总线要求HOLD、总线同意HLDA等信号。
总线主控器IDE控制器3与IDE界面5的界面信号则包括DMA要求DREQ、DMA认知DACK、输出入装置读取IOR #与输出入装置写入IOW#等控制信号。该IDE界面5与硬盘磁性记录装置6构成一IDE界面的硬盘装置。此外,该IDE界面5的中断请求信号IRQ(Interrupt Request)通过一中断控制器4(Interrupt Controller)可对中央处理单元1发出请求中断INTR的信号。
参照图2所示,在一典型的Pentinm级中央处理单元中,其内部的寄存器依其功能约略可分为通用目的寄存器10(General Purpose Register)、段寄存器11(Segment Register)、状态及指令寄存器12(Status and InstructionRegister)。其中该通用目的寄存器10包括有AX、BX、CX、DX、BP、SP、SI、DI等寄存器,一般是用来处理字节数据。段寄存器11包括有SS、DS、ES、FS、GS等寄存器,是用来决定存储器地址段的基底地址。状态及指令寄存器12包括有IP、FLAGS寄存器,是用来指定欲执行指令、以及指示在执行指令后的结果状态。
此外,在Pentium级中央处理单元内部尚包括有其它系统寄存器,这些系统寄存器中,与本发明的病毒检测方法有关的寄存器包括有控制寄存器组13及除错寄存器组14。
控制寄存器组13中包括有数个控制寄存器CR0-CR4,其中控制寄存器CR4的位定义中,共有位0至位6,其中的位3乃为除错扩展功能的设定位,当该位设定为1时,乃启动输出入界面断点除错扩展功能,当该位设定为0时,乃解除输出入界面断点除错扩展功能。
除错寄存器组14中包括有八个寄存器DR0-DR7,其中的DR0-DR3是作为除错地址寄存器(Debug Address Resister),每一个除错地址寄存器中含32位的断点线性地址(Breakpoint Linear Address)。DR6是作为除错状态寄存器(Debug Status Register),其可在除错状况产生时,告知该除错状况的条件。DR7是作为一除错控制寄存器(Debug Control Register),其可用来致能或禁能断点功能、以及可用来设定断点条件。
每一个除错地址寄存器DR0-DR3皆有一些各自的控制位(在除错控制寄存器DR7中),例如在DR7中的LEN位值决定了断点地址的存取长度,当LEN=00时,其位长度为一个位;LEN=01时其位长度为二个位,LEN=11时,其位长度为四个位。R/W的值决定在断点地址上发生断点的原因,当R/W=00时是表示指令码存取,R/W=01时是表示数据写入,当R/W=10时是表示I/O读取或写入,当R/W=11时是表示数据读取与写入。
以下将同时参照图1所示的计算机系统简化示意图、图2所示的中央处理单元内部寄存器组结构,对本发明的病毒检测方法作一详细说明如后。
如图3所示,在系统启始后,本发明首先在步骤100中,在计算机系统的存储器中指定一缓冲区。然后于步骤101中,在中央处理单元的控制寄存器CR4中设定除错扩展位(Debug Extention)。此一步骤中的目的是将中央处理单元中的控制寄存器CR4的第三位设定为1,以启始输出入断点除错扩展功能。
然后在步骤102中,将中央处理单元的除错地址寄存器DR0-DR3中的其中两个寄存器中设定十六进位数值数据1F7h及177h,步骤102。其中该数值1F7h是表示计算机系统中所连接的第一个IDE硬盘状态/命令寄存器(IDE Command Register)的地址,而数值177h乃为第二个硬盘状态/命令寄存器的地址。
在步骤103中,在中央处理单元的除错控制寄存器DR7对应的R/W位(读取/写入控制位)中设定数值10,其意味当中央处理单元在执行输出入(I/O)时,会执行中断功能(Break On I/O)。此外,在此一步骤中,也在该除错控制寄存器DR7对应的LEN位(长度位)中设定数值00(其数值是代表位长度值是1位)。
在完成上述的相关寄存器数据设定之后,即判断是否有除错状况(DebugException)产生,步骤104,若否,则重复执行检测,当检测到有除错状况产生时,则执行步骤105,即中央处理单元执行INT1中断辅程序,以判断中央处理单元中除错状态寄存器DR6的状态,该除错状态寄存器DR6可用来寄存除错地址寄存器DR0-DR3的状态。在步骤105中,判断中央处理单元的除错状态寄存器DR6中的IO端地址1F7h及177h对应的中断点条件(Breakpoint Condition)是否被设定。若判断结果为否,则步骤跳回步骤104,继续检测是否有除错状况发生;若判断结果为是,则进行下一步骤106。
在步骤106中,判断中央处理单元目前所执行的指令是否为组合语言中执行数据转移的输出指令OUT或OUTS。若不是,则回到步骤104,若是,则进行下一步骤107。其中该输出指令OUT在组合语言指令中乃为简单的输出入界面指令,是执行简单数据的转移,其数据转移的对象是一序列的输出入端,其在作数据的转移时,是经过中央处理单元中的通用目的寄存器(例如8位时乃为寄存器AL)来进行数据的转移。而输出指令OUTS乃为字符串输出入界面指令,该指令将由中央处理单元中的段寄存器DS与变址寄存器SI所指定的存储器字节数据输出到由寄存器DX所指定的输出入界面端中。
在步骤107中,进一步判断中央处理单元中通用目的寄存器10中的寄存器AL或存储器DS:SI地址的数据(输出入端地址直接定址或寄存器间接定址)是否为CAh或CBh的数值。其中该数值CAh、CBh是表示以DMA的方式写入数据至硬盘磁区的动作。此一步骤的目的即是判断该写入数据至硬盘装置的动作是否为DMA传输模式。若并非这些预定值,则回到步骤104,若恰为该预定值,则进行下一步骤108。
经由前述步骤的判断之后,若通用目的寄存器10中的寄存器AL或DS:SI地址的数据为CAh或CBh,则即在步骤108中设立一代表以DMA写入硬盘磁区的特征位(WRITE_DMA Flag),其目的是作为后述程序的辨识之用。
参照图4所示,其是延续图3中的控制流程。在步骤109中,判断该IDE界面是否有中断要求信号的产生,若判断结果为否,则程序回到步骤104,若判断结果为是,则在步骤110中,清除在前述步骤108中所设立的DMA写入硬盘磁区的特征位(WRITE_DMAFlag)。
接下来,在步骤111中,读取PCI总线上总线主控器IDE控制器中组态寄存器(Configuration Register)中所记录的实体存储区记录表(Physical RegionDescriptor Table,简称PRDT)的内容。该PRDT表格的数据格式,如图5所示,其由一序列的实体存储区记录进入点(Physical Region Descriptor Entries)所组成,每一个进入点(Entry)记录了所欲传送至IDE装置、或由IDE装置传送出数据区块的基底地址(Base Address)及字节计数(Byte Count)。该PRDT的表格结尾是在最后一个记录进入点中的EOT位作为辨识。
在步骤112中,取得该PRDT中的DMA传输数据区块的基底地址及字节计数值的数据,然后在步骤113中,扫描并对比该DMA基底地址及字节计数值所定义的数据区块与预存的已知病毒码,若找到与该DMA传输的数据区块相吻合的预存已知病毒码,步骤114,则由计算机系统发出警示,步骤115,以适时警告使用者。若并未找到病毒,则回到步骤104中,继续检测是否有除错状况的产生。
由以上本发明的计算机病毒检测方法以及配合中央处理单元中相关的控制寄存器、除错地址寄存器、除错控制寄存器、除错状态寄存器等,使本发明可以有效检测到任何以DMA方式企图写入至计算机系统中IDE硬盘装置的可能病毒,并适时发出警示。
总之本发明所提供的计算机病毒检测方法,具有高度的产业利用价值,可达到预期的功效。