病毒要进行传染,必然会留下痕迹。生物医学病毒如此,电脑病毒也是一样。检测电脑病毒,就要到病毒寄生场所去检查,发现异常情况,并进而验明“正身”,确认电脑病毒的存在。电脑病毒静态时存储于硬盘中,被激活时驻留在内存中,因此对电脑病毒的检测可以分为对硬盘的检测和对内存的检测。
一般对硬盘进行病毒检测时,要求内存中不带病毒,因为某些电脑病毒会向检测者报告假情况。例如“4096”病毒在内存中时,查看被它感染的文件,不会发现该文件的长度已发生变化,而当在内存中没有病毒时,才会发现文件长度已经增长了4096字节;又例如,“DIR2”病毒在内存中,用Debug程序查看被感染文件时,根本看不到“DIR2”病毒的代码,很多检测程序因此而漏过了被感染的文件;还有引导区型的“巴基斯坦智囊”病毒,当它活跃在内存中时,检查引导区就看不到病毒程序而只看到正常的引导扇区。因此,只有在要求确认某种病毒的类型和对其进行分析、研究时,才能在内存中带毒的情况下作检测工作。从原始的、未受病毒感染的DOS系统软盘启动,可以保证内存中不带病毒。启动必须是上电启动而不是按键盘上的“Alt+Ctrl+Del”三键的那种热启动,因为某些病毒可以通过截取键盘中断,将自己驻留在内存中。检测硬盘中的病毒,启动系统软盘的DOS版本号应该等于或高于硬盘内DOS系统的版本号。如果硬盘上使用了硬盘管理软件DM、ADM,硬盘压缩存储管理软件Stacker、DoubleSpace等,启动系统软盘时应把这些软件的驱动程序包括在软盘上,并把它们写入config.sys文件中,否则用系统软盘引导启动后,将不能访问硬盘上的所有分区,使躲藏在其中的病毒逃过检查。
检测硬盘中的病毒可分成检测引导区型病毒和检测文件型病毒。这两种检测的原理上相同,但由于病毒的存储方式不同,检测方法还是有差别的。主要是基于下列四种方法:比较被检测对象与原始备份的比较法;利用病毒特征代码串进行查找的搜索法;搜索病毒体内特定位置的特征字识别法;运用反汇编技术分析被检测对象,确证是否为病毒的分析法。
比较法
这是用原始备份与被检测的引导扇区或被检测的文件进行比较的方法,可以用打印的代码清单(比如Debug的D命令输出格式)进行比较,也可用程序来进行比较(如DOS的DISKCOMP、COMP或PCTOOLS等其它软件)。比较法不需要专用的查病毒程序,只要用常规DOS软件和PCTOOLS等工具软件就可以进行,而且还可以发现那些尚不能被现有的杀毒软件发现的计算机病毒。因为病毒传播得很快,新病毒层出不穷,而目前还没有能查出一切病毒的通用程序,或通过代码分析,可以判定某个程序中是否含有病毒的查毒程序,所以只有靠比较法和分析法,或这两种方法相结合来发现新病毒。 对硬盘的主引导区或对DOS的引导扇区作检查,用比较法能发现其中的程序源代码是否发生了变化。由于要进行比较,因此保留好原始备份是非常重要的。制作备份时必须在无电脑病毒的环境里进行,制作好的备份必须妥善保管,写好标签,贴好写保护。比较法的好处是简单、方便,不用专用软件;缺点是无法确认病毒的种类名称。另外,造成被检测程序与原始备份之间差别的原因尚需进一步验证,以查明是电脑病毒造成的,还是DOS数据被偶然原因,如突然停电、程序失控、恶意程序等破坏的。这些要用到以后讲的分析法,查看变化部分代码的性质,以此来确认是否存在病毒。
搜索法
这种方法主要是对每一种病毒含有的特定字符串进行扫描,如果在被检测对象内部发现了某一种特定字节串,就表明发现了该字节串所代表的病毒。国外称这种按搜索法工作的病毒扫描软件为“Scanner”。这种病毒扫描软件由两部分组成:一部分是病毒代码库,含有经过特别选定的各种电脑病毒的代码串;另一部分是利用该代码库进行扫描的扫描程序,病毒扫描程序能识别的电脑病毒的数目完全取决于病毒代码库内所含病毒种类的多少。病毒代码串的选择是非常重要的,短小的病毒代码只有一百多个字节,长的也只有10KB字节。一定要在仔细分析程序之后选出最具代表特性的,足以将该病毒区别于其它病毒和该病毒的其它变种的代码串。一般情况下,代码串是由连续若干个字节组成的,但是有些扫描软件采用的是可变长串,即在串中包含有一个到几个“模糊”字节。扫描软件遇到这种串时,只要除“模糊”字节之外的字串都能完好匹配,就也能够判别出病毒。另外,特征串还必须能将病毒与正常的非病毒程序区,不然就会出现“假报、误报”。