摘自陈立新《计算机病毒防治百事通》清华大学出版社 S`*al<m
计算机病毒比较法诊断的原理 n"MFC
比较法是用原始的或正常的与被检测的进行比较。比较法包括长度比较法、内容比较法、内存比较法、中断比 hyTi':
较法等。比较时可以靠打印的代码清单(比如DEBUG的口命令输出格式)进行比较,或用程序来进行比较(如DOS的 p jrA:;
DISKCOMP、COMP或PCTOOLS等其他软件)。这种比较法不需要专用的查病毒程序,只要用常规DOS软件和 PCTOOLS等 E|5gKp-wJ
工具软件就可以进行。而且用这种比较法还可以发现那些尚不能被现有的查病毒程序发现的计算机病毒。因为病毒 ]#*@<T*[
传播得很快,新病毒层出不穷,由于目前还没有做出通用的能查出一切病毒,或通过代码分析,可以判定某个程序 rg P$\xn-
中是否含有病毒的查毒程序,发现新病毒就只有靠比较法和分析法,有时必须结合这两者来一同工作。 h]zx7zt-
1.长度比较法及内容比较法 ?]7ITF
病毒感染系统或文件,必然引起系统或文件的变化,既包括长度的变化,又包括内容的变化。因此,将无毒的 6f{ c
系统或文件与被检测的系统或文件的长度和内容进行比较,即可发现病毒。长度比较法和内容比较法就是从长度和 eFeeloH?e*
内容两方面进行比较而得名。 `i.f4]r
以长度或内容是否变化做为检测病毒的依据,在许多场合是有效的。但是,众所周知,现在还没有一种方法可 =a {Z7W
以检测所有的病毒。长度比较法和内容比较法有其局限性,只检查可疑系统或文件的长度和内容是不充分的。因为: }`h}h<B(
(1)长度和内容的变化可能是合法的。有些普通的命令可以引起长度和内容变化。 O&O1O>[p1
(2)某些病毒感染文件时,宿主文件长度可保持不变。 h]D=v B
上述情况下,长度比较法和内容比较法不能区别程序的正常变化和病毒攻击引起的变化,不能识别保持宿主程 :s$9#}hw,
序长度不变的病毒,无法判定为何种病毒。实践告诉人们,只靠检测长度或内容是不充分的,将长度比较法、内容 {`3;Pd`
比较法做为检测病毒的手段之一,与其他方法配合使用,效果更好。 Ne#nSx5,
2.内存比较法 #~#_)\l'F
这是一种对内存驻留病毒进行检测的方法。由于病毒驻留于内存,必须在内存中申请一定的空间,并对该空间 nxH$$}9
进行占用、保护。因此,通过对内存的检测,观察其空间变化,与正常系统内存的占用和空间进行比较,可以判定 Y&&Y:+
V
是否,有病毒驻留其间。但无法判定为何种病毒。此法对于那些隐蔽型病毒无效。 !
4s$93
3.中断比较法 \XpPb{:>
病毒为实现其隐蔽和传染破坏之目的,常采用“截留盗用”技术,更改、接管中断向量,让系统中断向量转向 D&oC1
执行病毒控制部分。因此,将正常系统的中断向量与有毒系统的中断向量进行比较,可以发现是否有病毒修改和盗 @RnG K 5
用中断向量。 3s|tS2^4
由于高版本的DOS系统在DOS引导之后重新管理一部分BIOS中断服务程序,即将原中断向量保存起来,这时;引 -({\eL$n
导型病毒所修改的中断向量也同时被保存起来,因而从中断向量中可能观察不到引导型病毒对中断向量的修改。与 95H`-A
PCTOOLS一同提供的MI是一个非常有用的检测工具,它不仅能够显示系统内存大小、内存分配状况, 而且能够显示 $OUa3!U_!
出哪个驻留程序占用哪些内存空间、接管哪些中断向量。用MI软件可检测出文件型病毒常驻内存及更改部分中断向 <&x_e-;b'
量的信息。 QOP*vH >J
使用比较法能发现异常,如文件的长度有变化,或虽然文件长度未发生变化,但文件内的程序代码发生了变化。 tq*Q|9j7VG
对硬盘主引导区或对DOS的引导扇区做检查,比较法能发现其中的程序代码是否发生了变化。由于要进行比较, 保 _@@S,(MA
留好原始备份是非常重要的,制作备份时必须在元计算机病毒的环境里进行,制作好的备份必须妥善保管,写好标 n@%'Nbc>b
签,贴写好保护签。 8l}|.Q#--
比较法的好处是简单、方便,不需专用软件。缺点是无法确认病毒的种类名称。另外,造成被检测程序与原始 xApa+j6I
备份之间差别的原因尚需进一步验证,以查明是由于计算机病毒造成的,或是由于DOS数据被偶然原因, 如突然停 iF
67
电、程序失控、恶意程序等破坏的。这些要用到下面介绍的分析法,查看变化部分代码的性质,以此来确证是否存 N..u<06j/
在病毒。另外,当找不到原始备份时,用比较法就不能马上得到结论。从这里可以看到制作和保留原始主引导扇区 2`Pk@,:_
和其他数据备份的重要性。 Lc.7:r
~ h:^Q
计算机病毒校验和法诊断的原理 ^<E,aCy
将正常文件的内容,计算其校验和,将该校验和写入文件中或写入别的文件中保存。在文件使用过程中,定期 k(7!W
地或每次使用文件前,检查文件现在内容算出的校验和与原来保存的校验和是否一致,因而可以发现文件是否感染, gF%ad=xm
这种方法叫校验和法,它既可发现已知病毒又可发现未知病毒。 Q!Op^4Jz
这种方法既能发现已知病毒,也能发现未知病毒,但是,它不能识别病毒种类,不能报出病毒名称。由于病毒 9YvMJ
感染井非文件内容改变的唯一的排他性原因,文件内容的改变有可能是正常程序引起的,所以校验和法常常误报警, leD?yyjw7
而且此法也会影响文件的运行速度。 Bf-&[ 5N}
病毒感染的确会引起文件内容变化,但是校验和法对文件内容的变化太敏感,又不能区分正常程序引起的变动, i\<l&W
而频繁报警。用监视文件的校验和来检测病毒,不是最好的方法。这种方法当遇到软件版本更新、变更口令以及修 AG9U2x
改运行参数时都会误报警。 BShZ)t
校验和法对隐蔽性病毒无效。隐蔽性病毒进驻内存后,会自动剥去染毒程序中的病毒代码,使校验和法受骗, A l` ;SWN
对一个有毒文件算出正常校验和。 B"EMir'
校验和法的优点是:方法简单、能发现未知病毒、被查文件的细微变化也能发现。其缺点是:必须预先记录正 D~%cf
常态的校验和、会误报警、不能识别病毒名称、不能对付隐蔽性病毒。 `QkzWy~V3
计算机病毒扫描法诊断的原理 J*;t{M5
扫描法是用每一种病毒体含有的特定字符串对被检测的对象进行扫描。如果在被检测对象内部发现了某一种特 v |i(peA#
定字符串,就表明发现了该字符串所代表的病毒。国外管这种按搜索法工作的病毒扫描软件叫SCANNER。 扫描法包 PNKmI
括特征代码扫描法、特征字扫描法。 5q)Eed
1.特征代码扫描法 {<]abO
病毒扫描软件由两部分组成:一部分是病毒代码库,含有经过特别选定的各种计算机病毒的代码串;另一部分 :WxMv~e{U
是利用该代码库进行扫描的扫描程序。病毒扫描程序能识别的计算机病毒的数目完全取决于病毒代码库内所含病毒 KS|$_-7u
的种类有多少。显而易见,库中病毒代码种类越多,扫描程序能认出的病毒就越多。 Y0b.utR&
病毒代码串的选择是非常重要的。选择代码串的规则是: <e=0J8V8,i
(1)短小的病毒只有一百多个字节,病毒代码长的有上10KB字节的。 如果随意从病毒体内选一段作为代表该 wWm#[f],?
病毒的特征代码串,可能在不同的环境中,该特征串并不真正具有代表性,不能用于将该串所对应的病毒检查出来。 vx
,yz+yP
选这种串做为病毒代码库的特征串就是不合适的。 $]T7Iwk
(2)代码串不应含有病毒的数据区,数据区是会经常变化的。 tl4;2m3w
(3)在保持唯一性的前提下,应尽量使特征代码长度短些,以减少时间和空间开销。 !BY=HFT
(4)代码串一定要在仔细分析了程序之后才能选出最具代表性的, 足以将该病毒区别于其他病毒和该病毒的 AX&1-U
其他变种的代码串。 Z@h]dU5%a
选定好的特征代码串是很不容易的,是病毒扫描程序的精华所在。一般情况下,代码串是连续的若干个字节组 My[L3KTTp
成的串,但是有些扫描软件采用的是可变长串,即在串中包含有一个到几个“模糊”字节。扫描软件遇到这种串时, 3!}#@<j
只要除“模糊”字节之外的字串都能完好匹配,则也能判别出病毒。 例如给定特征串:“E9 7C 00 10 ? 37 CB” SKS[Lf
则“E9 7C 00 10 27 37 CB”和“E9 7C 00 10 9C 37 CB”都能被识别出来,又例如: eR}d"F4W
“E9 7C 37 CB”可以匹配“E9 7C 00 37 CB”,“E9 7C 00 11 37 CB”和“E9 7C 00 11 22 37 CB”。 但不 RM`8P5i]sF
匹配“E9 7C 00 11 22 33 44 37 CB”,因为7C和37之间的子串已超过4个字节。 62zlO{ >rJ
(5)特征串必须能将病毒与正常的非病毒程序区分开。不然将非病毒程序当成病毒报告给用户, 是假警报, kO5KZ;+N-
这种“狼来了”的假警报大多了,就会使用户放松警惕,等真的病毒一来,破坏就严重了;再就是若将这假警报送 U{R*WB b
给清病毒程序,会将好程序给“杀死”了。 y=&)sq
使用特征串的扫描法被查病毒软件广泛应用着。其优点是: k9bU<
(1)当特征串选择得很好时,病毒检测软件让计算机用户使用起来很方便快速, 对病毒了解不多的人也能用 >a0;|;hp
它来发现病毒。 FINM4<s)
(2)不用专门软件,用PCTOOLS等软件也能用特征串扫描法去检测特定病毒。 0}b8S48|?
(3)可识别病毒的名称。 V}JW@
(4)误报警率低。 T|}HK]QOX
(5)依据检测结果,可做杀毒处理。 .6tz ^4
这种扫描法的缺点也是明显的。 /!E /9[V
(1)当被扫描的文件很长时,扫描所花时间也越多; y.~5n[W
(2)不容易选出合适的特征串,例如SCAN.EXE时常会发出假警报。 <8y8^m`P9
(3)新病毒的特征串未加入病毒代码库时,老版本的扫毒程序无法识别出新病毒。 6[CX[=P30
(4)怀有恶意的计算机病毒制造者得到代码库后,会很容易地改变病毒体内的代码,生成一个新的变种, 使 D,)~j6OG8
扫描程序失去检测它的能力。 BHU[Rz7x
(5)容易产生误警报,只要在正常程序内带有某种病毒的特征串,即使该代码段已不可能被执行, 而只是被 wY=ky629
杀死的病毒体残余,扫描程序仍会报警。老版本CPAV对硬盘主引导区内未被清除干净、已失去作用的香港病毒发出 s+CWyW@
假警报就是一个例子。 tz)L`g/J~
(6)不易识别Mutation Engine类病毒。 ~<$8i}7
(7)搜集已知病毒的特征代码,费用开销大。 G)putk@
(8)在网络上使用效率低。 r&H>JCRZ<=
不管怎样,基于特征串的计算机病毒扫描法仍是今天用得最为普遍的查病毒方法。 ^]v}AEcmW
2.特征字扫描法 %]
Bb;0G
计算机病毒特征字扫描法是基于特征串扫描法发展起来的一种新方法。它工作起来速度更快、误报警更少,但 i|=XW6J%
特征代码扫描法所具有的(2)、(3)、(4)项缺点特征字扫描法也仍然存在。 特征字扫描只需从病毒体内抽取 cvC;QRx
很少几、个关键的特征字,组成特征字库。由于需要处理的字节很少,而又不必进行串匹配,大大加快了识别速度, Npu;f>g0_
当被处理的程序很大时表现更突出。类似于检测生物病毒的生物活性,特征字识别法更注意计算机病毒的“程序活 &zm5s*yNt
性”,减少了错报的可能性。 ?&