摘自陈立新《计算机病毒防治百事通》清华大学出版社 ]4&B*]j
计算机病毒比较法诊断的原理 o(Ro/U(Wu
比较法是用原始的或正常的与被检测的进行比较。比较法包括长度比较法、内容比较法、内存比较法、中断比 &ETPYf%#
较法等。比较时可以靠打印的代码清单(比如DEBUG的口命令输出格式)进行比较,或用程序来进行比较(如DOS的 SCD;(I~4
DISKCOMP、COMP或PCTOOLS等其他软件)。这种比较法不需要专用的查病毒程序,只要用常规DOS软件和 PCTOOLS等 m:5bb3
工具软件就可以进行。而且用这种比较法还可以发现那些尚不能被现有的查病毒程序发现的计算机病毒。因为病毒 /Oa.@53tK6
传播得很快,新病毒层出不穷,由于目前还没有做出通用的能查出一切病毒,或通过代码分析,可以判定某个程序 Y]HtO^T2
中是否含有病毒的查毒程序,发现新病毒就只有靠比较法和分析法,有时必须结合这两者来一同工作。 ,koG*sn
1.长度比较法及内容比较法 vTYgWR,h
病毒感染系统或文件,必然引起系统或文件的变化,既包括长度的变化,又包括内容的变化。因此,将无毒的 '3ZYoA%
系统或文件与被检测的系统或文件的长度和内容进行比较,即可发现病毒。长度比较法和内容比较法就是从长度和 $*dY f
内容两方面进行比较而得名。 :X-\!w\
以长度或内容是否变化做为检测病毒的依据,在许多场合是有效的。但是,众所周知,现在还没有一种方法可 ^]?Yd )v
以检测所有的病毒。长度比较法和内容比较法有其局限性,只检查可疑系统或文件的长度和内容是不充分的。因为: 7#iT33(3
(1)长度和内容的变化可能是合法的。有些普通的命令可以引起长度和内容变化。 U7Pn
$l2!
(2)某些病毒感染文件时,宿主文件长度可保持不变。 .1?7)k
v
上述情况下,长度比较法和内容比较法不能区别程序的正常变化和病毒攻击引起的变化,不能识别保持宿主程 JWs?az
序长度不变的病毒,无法判定为何种病毒。实践告诉人们,只靠检测长度或内容是不充分的,将长度比较法、内容 v`u>;S_
比较法做为检测病毒的手段之一,与其他方法配合使用,效果更好。 u&ozc
2.内存比较法 vpqMKyy
这是一种对内存驻留病毒进行检测的方法。由于病毒驻留于内存,必须在内存中申请一定的空间,并对该空间 d`4@aoM
进行占用、保护。因此,通过对内存的检测,观察其空间变化,与正常系统内存的占用和空间进行比较,可以判定 z`rW2UO#a`
是否,有病毒驻留其间。但无法判定为何种病毒。此法对于那些隐蔽型病毒无效。 s2\6\8Ipn
3.中断比较法 _<G%
病毒为实现其隐蔽和传染破坏之目的,常采用“截留盗用”技术,更改、接管中断向量,让系统中断向量转向 ||sj*K
执行病毒控制部分。因此,将正常系统的中断向量与有毒系统的中断向量进行比较,可以发现是否有病毒修改和盗 oq }Q2[.b
用中断向量。 834dsl+U
由于高版本的DOS系统在DOS引导之后重新管理一部分BIOS中断服务程序,即将原中断向量保存起来,这时;引 Q\<^ih51
导型病毒所修改的中断向量也同时被保存起来,因而从中断向量中可能观察不到引导型病毒对中断向量的修改。与 wPU<jAQyp
PCTOOLS一同提供的MI是一个非常有用的检测工具,它不仅能够显示系统内存大小、内存分配状况, 而且能够显示 Y=N; Bj
出哪个驻留程序占用哪些内存空间、接管哪些中断向量。用MI软件可检测出文件型病毒常驻内存及更改部分中断向 f Tc,"{
量的信息。 zE<G wVI~
使用比较法能发现异常,如文件的长度有变化,或虽然文件长度未发生变化,但文件内的程序代码发生了变化。 M4TFWOC1
对硬盘主引导区或对DOS的引导扇区做检查,比较法能发现其中的程序代码是否发生了变化。由于要进行比较, 保 wC[Bh^]
留好原始备份是非常重要的,制作备份时必须在元计算机病毒的环境里进行,制作好的备份必须妥善保管,写好标 ]&/KAk
签,贴写好保护签。 {^n\
r^5
比较法的好处是简单、方便,不需专用软件。缺点是无法确认病毒的种类名称。另外,造成被检测程序与原始 k@= LR
备份之间差别的原因尚需进一步验证,以查明是由于计算机病毒造成的,或是由于DOS数据被偶然原因, 如突然停 2Md'<.
电、程序失控、恶意程序等破坏的。这些要用到下面介绍的分析法,查看变化部分代码的性质,以此来确证是否存 5&*B2ZBzH
在病毒。另外,当找不到原始备份时,用比较法就不能马上得到结论。从这里可以看到制作和保留原始主引导扇区 0Ku%9wh-
和其他数据备份的重要性。 ';bovh@*
~.w Db,*
计算机病毒校验和法诊断的原理 2i~qihx5^
将正常文件的内容,计算其校验和,将该校验和写入文件中或写入别的文件中保存。在文件使用过程中,定期 f@a@R$y
地或每次使用文件前,检查文件现在内容算出的校验和与原来保存的校验和是否一致,因而可以发现文件是否感染, #%i-{t+_>
这种方法叫校验和法,它既可发现已知病毒又可发现未知病毒。 #GHLF
这种方法既能发现已知病毒,也能发现未知病毒,但是,它不能识别病毒种类,不能报出病毒名称。由于病毒 z~BrKdS
感染井非文件内容改变的唯一的排他性原因,文件内容的改变有可能是正常程序引起的,所以校验和法常常误报警, Wd_cNR\
而且此法也会影响文件的运行速度。 .%4{zaB
病毒感染的确会引起文件内容变化,但是校验和法对文件内容的变化太敏感,又不能区分正常程序引起的变动, Soa5TM
而频繁报警。用监视文件的校验和来检测病毒,不是最好的方法。这种方法当遇到软件版本更新、变更口令以及修 ~:%rg H
改运行参数时都会误报警。 cAE.I$T(
校验和法对隐蔽性病毒无效。隐蔽性病毒进驻内存后,会自动剥去染毒程序中的病毒代码,使校验和法受骗, a/wkc*}}/
对一个有毒文件算出正常校验和。 ,\K1cW~U5
校验和法的优点是:方法简单、能发现未知病毒、被查文件的细微变化也能发现。其缺点是:必须预先记录正 Vhs:X~=qL
常态的校验和、会误报警、不能识别病毒名称、不能对付隐蔽性病毒。 txwTJScg
计算机病毒扫描法诊断的原理 _8'F I_E3
扫描法是用每一种病毒体含有的特定字符串对被检测的对象进行扫描。如果在被检测对象内部发现了某一种特 :bA@
u>
定字符串,就表明发现了该字符串所代表的病毒。国外管这种按搜索法工作的病毒扫描软件叫SCANNER。 扫描法包 emV@kN.
括特征代码扫描法、特征字扫描法。 1!E+(Iq
1.特征代码扫描法 ,{{uRs/
病毒扫描软件由两部分组成:一部分是病毒代码库,含有经过特别选定的各种计算机病毒的代码串;另一部分 .baS
mfc
是利用该代码库进行扫描的扫描程序。病毒扫描程序能识别的计算机病毒的数目完全取决于病毒代码库内所含病毒 zAxwM-`
的种类有多少。显而易见,库中病毒代码种类越多,扫描程序能认出的病毒就越多。 ?_F,HhQ
病毒代码串的选择是非常重要的。选择代码串的规则是: ^m
(1)短小的病毒只有一百多个字节,病毒代码长的有上10KB字节的。 如果随意从病毒体内选一段作为代表该 hsQrHs'k
病毒的特征代码串,可能在不同的环境中,该特征串并不真正具有代表性,不能用于将该串所对应的病毒检查出来。 m
dC.M$
选这种串做为病毒代码库的特征串就是不合适的。 }>:x
(2)代码串不应含有病毒的数据区,数据区是会经常变化的。 gi7As$+E
(3)在保持唯一性的前提下,应尽量使特征代码长度短些,以减少时间和空间开销。 [D H@>:"dd
(4)代码串一定要在仔细分析了程序之后才能选出最具代表性的, 足以将该病毒区别于其他病毒和该病毒的 ?6
"F.\O@
其他变种的代码串。 <L__;j1Wx
选定好的特征代码串是很不容易的,是病毒扫描程序的精华所在。一般情况下,代码串是连续的若干个字节组 "l&sDh%Lk<
成的串,但是有些扫描软件采用的是可变长串,即在串中包含有一个到几个“模糊”字节。扫描软件遇到这种串时, 9k^;]jE
只要除“模糊”字节之外的字串都能完好匹配,则也能判别出病毒。 例如给定特征串:“E9 7C 00 10 ? 37 CB” 8fdK|l w
则“E9 7C 00 10 27 37 CB”和“E9 7C 00 10 9C 37 CB”都能被识别出来,又例如: t$=0 C
“E9 7C 37 CB”可以匹配“E9 7C 00 37 CB”,“E9 7C 00 11 37 CB”和“E9 7C 00 11 22 37 CB”。 但不 F^=|NlU&%
匹配“E9 7C 00 11 22 33 44 37 CB”,因为7C和37之间的子串已超过4个字节。 >=2nAv/(
(5)特征串必须能将病毒与正常的非病毒程序区分开。不然将非病毒程序当成病毒报告给用户, 是假警报, )^^r\
这种“狼来了”的假警报大多了,就会使用户放松警惕,等真的病毒一来,破坏就严重了;再就是若将这假警报送 9b !+kJD
给清病毒程序,会将好程序给“杀死”了。 Z8=4cWI~;
使用特征串的扫描法被查病毒软件广泛应用着。其优点是: [j5^Zb&0
(1)当特征串选择得很好时,病毒检测软件让计算机用户使用起来很方便快速, 对病毒了解不多的人也能用 6!i0ioZzi0
它来发现病毒。 %xR;8IO
(2)不用专门软件,用PCTOOLS等软件也能用特征串扫描法去检测特定病毒。 3Lq?Y7#KQp
(3)可识别病毒的名称。 `\&qk)ZP
(4)误报警率低。 48n>[
FMSR
(5)依据检测结果,可做杀毒处理。 w>X33Ff]8@
这种扫描法的缺点也是明显的。 N2}].}
(1)当被扫描的文件很长时,扫描所花时间也越多; zu}h3n5
(2)不容易选出合适的特征串,例如SCAN.EXE时常会发出假警报。 %&^F.JTt\
(3)新病毒的特征串未加入病毒代码库时,老版本的扫毒程序无法识别出新病毒。 %t\`20-1<
(4)怀有恶意的计算机病毒制造者得到代码库后,会很容易地改变病毒体内的代码,生成一个新的变种, 使 VbtFM=Dg
扫描程序失去检测它的能力。 #cQ[ vE)y
(5)容易产生误警报,只要在正常程序内带有某种病毒的特征串,即使该代码段已不可能被执行, 而只是被 vbQo8GFp}
杀死的病毒体残余,扫描程序仍会报警。老版本CPAV对硬盘主引导区内未被清除干净、已失去作用的香港病毒发出 S[NV-)r=
假警报就是一个例子。 oS$&jd
(6)不易识别Mutation Engine类病毒。 oj<.axA,
(7)搜集已知病毒的特征代码,费用开销大。 XTyn[n
(8)在网络上使用效率低。 6yF4%Sz9
不管怎样,基于特征串的计算机病毒扫描法仍是今天用得最为普遍的查病毒方法。 5jg^12EP
2.特征字扫描法 @)m+O#a
计算机病毒特征字扫描法是基于特征串扫描法发展起来的一种新方法。它工作起来速度更快、误报警更少,但 F5J=+Q%8[&
特征代码扫描法所具有的(2)、(3)、(4)项缺点特征字扫描法也仍然存在。 特征字扫描只需从病毒体内抽取 awXL}m[_!
很少几、个关键的特征字,组成特征字库。由于需要处理的字节很少,而又不必进行串匹配,大大加快了识别速度, =5LtEgHU
当被处理的程序很大时表现更突出。类似于检测生物病毒的生物活性,特征字识别法更注意计算机病毒的“程序活 ;P _`4w3
性”,减少了错报的可能性。 /wCee G,<
使用基于特征串扫描法的查病毒软件方法与使用基于特征字扫描法的查病毒软件方法是一样的。只要运行查毒 ?}B9=R$Pi
程序,就能将已知的病毒检查出来。将这两种方法应用到实际中,都需要不断地对病毒库进行扩充,一捕捉到病毒, a7q-*%+d5
经过提取特征并加入到病毒库,就能使查病毒程序多检查出一种新病毒来。使用检查病毒程序的人不需要关于病毒 +iwNM+K/gQ
大多的知识,但病毒代码库的维护更新人员,即反病毒技术人员则需要具备相当多的关于病毒和DOS以及 PC机的知 2u6N';jgZ
识。提取病毒特征串或特征字时,需要足够的有关知识,要用到检测计算机病毒的第七种技术—分析法。 DnaG$a<
)j@k[}R#g
计算机病毒行为监测法诊断的原理 }{Lf 4|8
利用病毒的特有行为特性,监测病毒的方法,称力行为监测法。 -b(:kAwStk
通过对病毒多年的观察、研究,人们发现病毒有一些行为,是病毒的共同行为,而且比较特殊。在正常程序中, [/*854
这些行为比较罕见。当程序运行时,监视其行为,如果发现了病毒行为,立即报警。 |n=kYs
这些做为监测病毒的行为特征可列举如下: E+"INX7
1.占用INT13H @}x)>tqD
所有的引导型病毒都攻击BOOT扇区或主引导扇区。系统启动时,当BOOT扇区或主引导扇区获得执行权时,系统 bsPw Tp^
就开始工作。一般引导型病毒都会占用INT 13H功能,因为其他系统功能还未设置好,无法利用。引导型病毒占据I .dp~%!"Sn,
NT 13H功能,在其中放置病毒所需的代码。 x-Z`^O
2.修改DOS系统数据区的内存总量 :%A1k2
病毒常驻内存后,为了防止DOS系统将其覆盖,必须修改内存总量。 C|W_j&S65
3.对COM和EXE文件做写入动作 @^;WC+\0
病毒要感染,必须写COM和EXE文件。 %I%F
!M
4.病毒程序与宿主程序的切换 '8k\a{t_z
染毒程序运行时,先运行病毒,而后执行宿主程序。在两者切换时,有许多特征行为。 (1(3:)@S6
行为监测法的长处在于不仅可以发现已知病毒,而且可以相当准确地预报未知的多数病毒。但行为监测法也有 Os8]iNvW\
其短处,即可能误报警和不能识别病毒名称,而且实现起来有一定难度。 S_6`.@B}
t3Q;1#Zf
计算机病毒行为感染实验法诊断的原理 f<WnPoV
感染实验是一种简单实用的检测病毒方法。由于病毒检测工具落后于病毒的发展,当病毒检测工具不能发现病 _e8@y{/~Fd
毒时,如果不会用感染实验法,便束手无策。如果会用感染实验法,可以检测出病毒检测工具不认识的新病毒,可 4\2p8__
以摆脱对病毒检测工具的依赖,自主地检测可疑新病毒。 f8N
这种方法的原理是利用了病毒的最重要的基本特征:感染特性。所有的病毒都会进行感染,如果不会感染,就 PQvq$|q
不称其为病毒。如果系统中有异常行为,最新版的检测工具也查不出病毒时,就可以做感染实验,运行可疑系统中 _QBd3B%
的程序后,再运行一些确切知道不带毒的正常程序,然后观察这些正常程序的长度和校验和,如果发现有的程序增 cWp
n/.a
长,或者校验和变化,就可断言系统中有病毒。 0wZLkU_(
1.检测未知引导型病毒的感染实验法 1w+&Y;d|
(1)先用一张软盘,做一个清洁无毒的系统盘,用DEBUG程序,读该盘的BOOT扇区进入内存,计算其校验和, n4k.tq
并记住此值。同时把正常的BOOT扇区保存到一个文件中。上述操作必须保证系统环境是清洁无毒的。 < W/-[ M
(2)在这张实验盘上拷贝一些元毒的系统应用程序。 0V}vVAa(B
(3)启动可疑系统,将实验盘插入可疑系统,运行实验盘上的程序,重复一定次数。 G+b $WQn2t
(4)再在干净无毒机器上,检查实验盘的BOOT扇区,可与原BOOT扇区内容比较, 如果实验盘BOOT扇区内容已 Si*Pi
改变,可以断定可疑系统中有引导型病毒。 lbT<HWzNH
随意,在(3)中,不可执行有可能重写BOOT扇区的程序,例如SYS.COM、FORMAT.COM等。 *
2T&