摘自陈立新《计算机病毒防治百事通》清华大学出版社 }f?$QSF
计算机病毒比较法诊断的原理 . =yF
比较法是用原始的或正常的与被检测的进行比较。比较法包括长度比较法、内容比较法、内存比较法、中断比 GHaD32
较法等。比较时可以靠打印的代码清单(比如DEBUG的口命令输出格式)进行比较,或用程序来进行比较(如DOS的 )7f;FWI
DISKCOMP、COMP或PCTOOLS等其他软件)。这种比较法不需要专用的查病毒程序,只要用常规DOS软件和 PCTOOLS等 6F
!B;D -Q
工具软件就可以进行。而且用这种比较法还可以发现那些尚不能被现有的查病毒程序发现的计算机病毒。因为病毒 }(FF^Mh
传播得很快,新病毒层出不穷,由于目前还没有做出通用的能查出一切病毒,或通过代码分析,可以判定某个程序 wxS.!9K
中是否含有病毒的查毒程序,发现新病毒就只有靠比较法和分析法,有时必须结合这两者来一同工作。 0g o{gUI
1.长度比较法及内容比较法 I!Z=3 $,
病毒感染系统或文件,必然引起系统或文件的变化,既包括长度的变化,又包括内容的变化。因此,将无毒的 mu@He&w"
系统或文件与被检测的系统或文件的长度和内容进行比较,即可发现病毒。长度比较法和内容比较法就是从长度和 8eGq.+5G
内容两方面进行比较而得名。 r01Z
0>
以长度或内容是否变化做为检测病毒的依据,在许多场合是有效的。但是,众所周知,现在还没有一种方法可 pMndyuoJl
以检测所有的病毒。长度比较法和内容比较法有其局限性,只检查可疑系统或文件的长度和内容是不充分的。因为: :qy< G!o
(1)长度和内容的变化可能是合法的。有些普通的命令可以引起长度和内容变化。 <$metN~9j
(2)某些病毒感染文件时,宿主文件长度可保持不变。 ' d' Dlg
上述情况下,长度比较法和内容比较法不能区别程序的正常变化和病毒攻击引起的变化,不能识别保持宿主程 }Vjg>"
序长度不变的病毒,无法判定为何种病毒。实践告诉人们,只靠检测长度或内容是不充分的,将长度比较法、内容 QMwrt
比较法做为检测病毒的手段之一,与其他方法配合使用,效果更好。 e98f+,E/
2.内存比较法 (JenTL`%u
这是一种对内存驻留病毒进行检测的方法。由于病毒驻留于内存,必须在内存中申请一定的空间,并对该空间 =hL;Q@inb
进行占用、保护。因此,通过对内存的检测,观察其空间变化,与正常系统内存的占用和空间进行比较,可以判定 R2,Z`I
是否,有病毒驻留其间。但无法判定为何种病毒。此法对于那些隐蔽型病毒无效。 L6<.>\^Z"
3.中断比较法 $`;1][OD
病毒为实现其隐蔽和传染破坏之目的,常采用“截留盗用”技术,更改、接管中断向量,让系统中断向量转向 1u>[0<U~E
执行病毒控制部分。因此,将正常系统的中断向量与有毒系统的中断向量进行比较,可以发现是否有病毒修改和盗 x
*:v]6y
用中断向量。 K@U[x,Sx
由于高版本的DOS系统在DOS引导之后重新管理一部分BIOS中断服务程序,即将原中断向量保存起来,这时;引 .6C9N{?Tqf
导型病毒所修改的中断向量也同时被保存起来,因而从中断向量中可能观察不到引导型病毒对中断向量的修改。与 =[5F~--Tf
PCTOOLS一同提供的MI是一个非常有用的检测工具,它不仅能够显示系统内存大小、内存分配状况, 而且能够显示 N(c`h
出哪个驻留程序占用哪些内存空间、接管哪些中断向量。用MI软件可检测出文件型病毒常驻内存及更改部分中断向 @:s(L]
量的信息。 bAOL<0RS9`
使用比较法能发现异常,如文件的长度有变化,或虽然文件长度未发生变化,但文件内的程序代码发生了变化。 |2AMj0V~
对硬盘主引导区或对DOS的引导扇区做检查,比较法能发现其中的程序代码是否发生了变化。由于要进行比较, 保 >L4q>S^v
留好原始备份是非常重要的,制作备份时必须在元计算机病毒的环境里进行,制作好的备份必须妥善保管,写好标 ,!
b9
签,贴写好保护签。 Z #uxa
比较法的好处是简单、方便,不需专用软件。缺点是无法确认病毒的种类名称。另外,造成被检测程序与原始 GW{e"b/x
备份之间差别的原因尚需进一步验证,以查明是由于计算机病毒造成的,或是由于DOS数据被偶然原因, 如突然停 -A1@a=q
电、程序失控、恶意程序等破坏的。这些要用到下面介绍的分析法,查看变化部分代码的性质,以此来确证是否存 \*yH33B9
在病毒。另外,当找不到原始备份时,用比较法就不能马上得到结论。从这里可以看到制作和保留原始主引导扇区 c`,'[Q5(O
和其他数据备份的重要性。 }B1f_T
b,h@.s
计算机病毒校验和法诊断的原理 *3@ =XY7
将正常文件的内容,计算其校验和,将该校验和写入文件中或写入别的文件中保存。在文件使用过程中,定期 $Iz *W]B!
地或每次使用文件前,检查文件现在内容算出的校验和与原来保存的校验和是否一致,因而可以发现文件是否感染, uSQlE=
这种方法叫校验和法,它既可发现已知病毒又可发现未知病毒。 {gT4Oq__
这种方法既能发现已知病毒,也能发现未知病毒,但是,它不能识别病毒种类,不能报出病毒名称。由于病毒 Z; 6N7U
感染井非文件内容改变的唯一的排他性原因,文件内容的改变有可能是正常程序引起的,所以校验和法常常误报警, 7!sR%h5p
而且此法也会影响文件的运行速度。 xB:]{9r
病毒感染的确会引起文件内容变化,但是校验和法对文件内容的变化太敏感,又不能区分正常程序引起的变动, Nhf@Y}Cu
而频繁报警。用监视文件的校验和来检测病毒,不是最好的方法。这种方法当遇到软件版本更新、变更口令以及修 S/,)X
改运行参数时都会误报警。 &s^t~>Gpr
校验和法对隐蔽性病毒无效。隐蔽性病毒进驻内存后,会自动剥去染毒程序中的病毒代码,使校验和法受骗, MxLg8,M
对一个有毒文件算出正常校验和。 LS:^K
校验和法的优点是:方法简单、能发现未知病毒、被查文件的细微变化也能发现。其缺点是:必须预先记录正 `_"loPu
常态的校验和、会误报警、不能识别病毒名称、不能对付隐蔽性病毒。 V
|cPAT%
计算机病毒扫描法诊断的原理 2p %j@O
扫描法是用每一种病毒体含有的特定字符串对被检测的对象进行扫描。如果在被检测对象内部发现了某一种特 {Qba`lOkq
定字符串,就表明发现了该字符串所代表的病毒。国外管这种按搜索法工作的病毒扫描软件叫SCANNER。 扫描法包 h~`^H9?M
括特征代码扫描法、特征字扫描法。 utzf7?nIS
1.特征代码扫描法 3-Bz5sj9
病毒扫描软件由两部分组成:一部分是病毒代码库,含有经过特别选定的各种计算机病毒的代码串;另一部分 *q-VY[2
是利用该代码库进行扫描的扫描程序。病毒扫描程序能识别的计算机病毒的数目完全取决于病毒代码库内所含病毒 4$oDq
的种类有多少。显而易见,库中病毒代码种类越多,扫描程序能认出的病毒就越多。 QtHK`f>4#n
病毒代码串的选择是非常重要的。选择代码串的规则是: &v)/mc7D
(1)短小的病毒只有一百多个字节,病毒代码长的有上10KB字节的。 如果随意从病毒体内选一段作为代表该
i"`N5
病毒的特征代码串,可能在不同的环境中,该特征串并不真正具有代表性,不能用于将该串所对应的病毒检查出来。 7TW&=(
选这种串做为病毒代码库的特征串就是不合适的。 :P8X?C63W]
(2)代码串不应含有病毒的数据区,数据区是会经常变化的。 4|/}~9/
(3)在保持唯一性的前提下,应尽量使特征代码长度短些,以减少时间和空间开销。 J.(mg
D
(4)代码串一定要在仔细分析了程序之后才能选出最具代表性的, 足以将该病毒区别于其他病毒和该病毒的 9;Qgby
其他变种的代码串。 W:VX^8</
选定好的特征代码串是很不容易的,是病毒扫描程序的精华所在。一般情况下,代码串是连续的若干个字节组 ]xxE_B7
成的串,但是有些扫描软件采用的是可变长串,即在串中包含有一个到几个“模糊”字节。扫描软件遇到这种串时, V7<w9MM
只要除“模糊”字节之外的字串都能完好匹配,则也能判别出病毒。 例如给定特征串:“E9 7C 00 10 ? 37 CB” ##6u
则“E9 7C 00 10 27 37 CB”和“E9 7C 00 10 9C 37 CB”都能被识别出来,又例如: tP1znJh>y
“E9 7C 37 CB”可以匹配“E9 7C 00 37 CB”,“E9 7C 00 11 37 CB”和“E9 7C 00 11 22 37 CB”。 但不 sa?s[
匹配“E9 7C 00 11 22 33 44 37 CB”,因为7C和37之间的子串已超过4个字节。 ]P*H,&I`#
(5)特征串必须能将病毒与正常的非病毒程序区分开。不然将非病毒程序当成病毒报告给用户, 是假警报, hG2WxYk
这种“狼来了”的假警报大多了,就会使用户放松警惕,等真的病毒一来,破坏就严重了;再就是若将这假警报送 s5\<D7
给清病毒程序,会将好程序给“杀死”了。 ntxaFVD
使用特征串的扫描法被查病毒软件广泛应用着。其优点是: $Sgq7
(1)当特征串选择得很好时,病毒检测软件让计算机用户使用起来很方便快速, 对病毒了解不多的人也能用 =d BK,/
它来发现病毒。 uCx6/n6'
(2)不用专门软件,用PCTOOLS等软件也能用特征串扫描法去检测特定病毒。 LGh#
(3)可识别病毒的名称。 bfq%.<W
(4)误报警率低。 S&F[\4w5]
(5)依据检测结果,可做杀毒处理。 8;d./!|'&g
这种扫描法的缺点也是明显的。 $9@3dM*E?Z
(1)当被扫描的文件很长时,扫描所花时间也越多; h$]nfHi_Q
(2)不容易选出合适的特征串,例如SCAN.EXE时常会发出假警报。 ,7Dm p7
(3)新病毒的特征串未加入病毒代码库时,老版本的扫毒程序无法识别出新病毒。 5SEGV|%
(4)怀有恶意的计算机病毒制造者得到代码库后,会很容易地改变病毒体内的代码,生成一个新的变种, 使 8I~*9MUp
扫描程序失去检测它的能力。 p`Ok(C_
(5)容易产生误警报,只要在正常程序内带有某种病毒的特征串,即使该代码段已不可能被执行, 而只是被 .npD<*
杀死的病毒体残余,扫描程序仍会报警。老版本CPAV对硬盘主引导区内未被清除干净、已失去作用的香港病毒发出 2WS Wfh
假警报就是一个例子。 l0PXU)>C
(6)不易识别Mutation Engine类病毒。 1RauI0d*
(7)搜集已知病毒的特征代码,费用开销大。 emHaZhh
(8)在网络上使用效率低。 q*!Vyk
不管怎样,基于特征串的计算机病毒扫描法仍是今天用得最为普遍的查病毒方法。 =5O&4G`}
2.特征字扫描法 siOyp]
计算机病毒特征字扫描法是基于特征串扫描法发展起来的一种新方法。它工作起来速度更快、误报警更少,但 JLGC'mbJ
特征代码扫描法所具有的(2)、(3)、(4)项缺点特征字扫描法也仍然存在。 特征字扫描只需从病毒体内抽取 YF(bl1>YC
很少几、个关键的特征字,组成特征字库。由于需要处理的字节很少,而又不必进行串匹配,大大加快了识别速度, O[8wF86R
当被处理的程序很大时表现更突出。类似于检测生物病毒的生物活性,特征字识别法更注意计算机病毒的“程序活 1()pKBHf
性”,减少了错报的可能性。 Et'&}NjI
使用基于特征串扫描法的查病毒软件方法与使用基于特征字扫描法的查病毒软件方法是一样的。只要运行查毒 p^C$(}Yh
程序,就能将已知的病毒检查出来。将这两种方法应用到实际中,都需要不断地对病毒库进行扩充,一捕捉到病毒, yujv^2/
经过提取特征并加入到病毒库,就能使查病毒程序多检查出一种新病毒来。使用检查病毒程序的人不需要关于病毒 ZEB,Q~
大多的知识,但病毒代码库的维护更新人员,即反病毒技术人员则需要具备相当多的关于病毒和DOS以及 PC机的知 4}t$Lf_
识。提取病毒特征串或特征字时,需要足够的有关知识,要用到检测计算机病毒的第七种技术—分析法。 S;SI#Vg@
734H{,~
计算机病毒行为监测法诊断的原理 )_kU,RvZ
利用病毒的特有行为特性,监测病毒的方法,称力行为监测法。 !jg<
S>S5
通过对病毒多年的观察、研究,人们发现病毒有一些行为,是病毒的共同行为,而且比较特殊。在正常程序中, l'1_Fb
这些行为比较罕见。当程序运行时,监视其行为,如果发现了病毒行为,立即报警。 v2ab84
C*
这些做为监测病毒的行为特征可列举如下: ;ykX]5jGh
1.占用INT13H [33=+Ca
所有的引导型病毒都攻击BOOT扇区或主引导扇区。系统启动时,当BOOT扇区或主引导扇区获得执行权时,系统 U9XOs)^
就开始工作。一般引导型病毒都会占用INT 13H功能,因为其他系统功能还未设置好,无法利用。引导型病毒占据I >CYz6G j
NT 13H功能,在其中放置病毒所需的代码。 geNvp0
2.修改DOS系统数据区的内存总量 :n OCs
病毒常驻内存后,为了防止DOS系统将其覆盖,必须修改内存总量。 ?s]?2>p
3.对COM和EXE文件做写入动作 f9HoQDFsM
病毒要感染,必须写COM和EXE文件。 2UMX%+ "J
4.病毒程序与宿主程序的切换 8"ulAx74>
染毒程序运行时,先运行病毒,而后执行宿主程序。在两者切换时,有许多特征行为。 =&mdxKoT0
行为监测法的长处在于不仅可以发现已知病毒,而且可以相当准确地预报未知的多数病毒。但行为监测法也有 z>HM$n`YD
其短处,即可能误报警和不能识别病毒名称,而且实现起来有一定难度。 K7ZRj\(CJv
km,@yU
计算机病毒行为感染实验法诊断的原理 {A\y4D@
感染实验是一种简单实用的检测病毒方法。由于病毒检测工具落后于病毒的发展,当病毒检测工具不能发现病 |H%,>r`9S
毒时,如果不会用感染实验法,便束手无策。如果会用感染实验法,可以检测出病毒检测工具不认识的新病毒,可 Nkx W*w%}l
以摆脱对病毒检测工具的依赖,自主地检测可疑新病毒。 2U3WH.o
这种方法的原理是利用了病毒的最重要的基本特征:感染特性。所有的病毒都会进行感染,如果不会感染,就 ]YUst]gu3
不称其为病毒。如果系统中有异常行为,最新版的检测工具也查不出病毒时,就可以做感染实验,运行可疑系统中 in>?kbaG+
的程序后,再运行一些确切知道不带毒的正常程序,然后观察这些正常程序的长度和校验和,如果发现有的程序增
A/OGF>
长,或者校验和变化,就可断言系统中有病毒。 eMjW^-RgE5
1.检测未知引导型病毒的感染实验法 k^%F4d3z@C
(1)先用一张软盘,做一个清洁无毒的系统盘,用DEBUG程序,读该盘的BOOT扇区进入内存,计算其校验和, ={I(i6
并记住此值。同时把正常的BOOT扇区保存到一个文件中。上述操作必须保证系统环境是清洁无毒的。 -l<[CI
(2)在这张实验盘上拷贝一些元毒的系统应用程序。 #&Zj6en}M]
(3)启动可疑系统,将实验盘插入可疑系统,运行实验盘上的程序,重复一定次数。 : n\D
(4)再在干净无毒机器上,检查实验盘的BOOT扇区,可与原BOOT扇区内容比较, 如果实验盘BOOT扇区内容已 [ak[ZXC,
改变,可以断定可疑系统中有引导型病毒。 qSQsY:]j0
随意,在(3)中,不可执行有可能重写BOOT扇区的程序,例如SYS.COM、FORMAT.COM等。 .WS 7gTw
2.检测未知文件型病毒的感染实验法 fK4NmdTV
(1)在干净系统中制作一张实验盘,上面存放一些应用程序,这些程序应保证无毒,应选择长度不同, 类型 w"!zLB&9[
不同的文件(既有COM型又有EXE型)。记住这些文件正常状态的长度和校验和。 mSp;(oQ
(2)在实验盘上制作一个批处理文件,使盘中程序在循环中轮流被执行数次。 w_#5Na}>d
(3)将实验盘插入可疑系统,执行批处理文件,多次执行盘中程序。 S^)xioKsJ
(4)将实验盘放人干净系统,检查盘中文件的长度和校验和,如果文件长度增加,或者校验和变化( 在零长 u:>*~$f
度感染和破坏性感染场合下,长度一般不会变,但校验和会变。),则可断定可疑系统中有病毒。 t.]e8=dE
计算机病毒行为软件模拟法诊断的原理 AE4>pzBe
多态性病毒每次感染都变化其病毒密码,对付这种病毒,特征代码法失效。因为多态性病毒代码实施密码化, mam(h{f$
而且每次所用密钥不同,把染毒文件中的病毒代码相互比较,也无法找出相同的可能做为特征的稳定代码。虽然行 G}`Hu_ [\)
为检测法可以检测多态性病毒,但是在检测出病毒后,无法做消毒处理,因为不知病毒的种类,难于做消毒处理。 eSSv8[u
为了检测多态性病毒,现已研制了新的检测法—软件模拟法。它是一种软件分析器,用软件方法来模拟和分析 ?r R,
h{~
程序的运行。 =
$6pL
新型检测工具纳入了软件模拟法,该类工具开始运行时,使用特征代码法检测病毒,如果发现隐蔽性病毒或多 AAK}t6
态性病毒嫌疑时,启动软件模拟模块,监视病毒的运行,待病毒自身的密码译码以后,再运用特征代码法来识别病 ETaLE[T%1
毒的种类。 %M-B"#OB7
"0 {t~?ol
计算机病毒分析法诊断的原理 okD7!)cr=
一般使用分析法的人不是普通用户,而是反病毒技术人员。使用分析法的目的在于: ANd#m9(x
1.确认被观察的磁盘引导区和程序中是否含有病毒。 _UUp+Hz
2.确认病毒的类型和种类,判定其是否是一种新病毒一 Cc` )P>L
3.搞清楚病毒体的大致结构,提取特征识别用的字符串或特征字, 用于增添到病毒代码库供病毒扫描和识别 5x}OrfDU
程序用。 ]dHV^!
4.详细分析病毒代码,为制定相应的反病毒措施制定方案。 bdr!|WZ
上述四个目的按顺序排列起来,正好大致是使用分析法的工作顺序。使用分析法要求具有比较全面的有关PC机、 )%9P ;/
DOS结构和功能调用以及关于病毒方面的各种知识。 oHx =Cg;
要使用分析法检测病毒,其条件除了要具有相关的知识外,还需要DEBUG、PROVIEW等分析用工具程序和专用的 ^/jALA9!
试验用计算机。因为即使是很熟练的反病毒技术人员,使用性能完善的分析软件,也不能保证在短时间内将病毒代 ]|/\Sd
码完全分析清楚。而病毒有可能在被分析阶段继续传染甚至发作,把软盘硬盘内的数据完全毁坏掉,这就要求分析 nNcmL/(
工作必须在专门设立的试验用PC机上进行,不怕其中的数据被破坏。在不具备条件的情况下,不要轻易开始分析工 ?)XPY<
作,很多计算机病毒采用了自加密、抗跟踪等技术,使得分析病毒的工作经常是冗长和枯燥的。特别是某些文件型 67d p)X
病毒的代码可达10KB以上,与系统的牵扯层次很深,使详细的剖析工作十分复杂。 % I;iP|/
病毒检测的分析法是反病毒工作中不可或缺的重要技术,任何一个性能优良的反病毒系统的研制和开发都离不 .8Gmy07
开专门人员对各种病毒的详尽而认真的分析。 G
4C 7
分析的步骤分为动态和静态两种。 静态分析是指利用DEBUG等反汇编程序将病毒代码打印成反汇编后的程序清 oW8 hC
单进行分析,看病毒分成哪些模块,使用了哪些系统调用,采用了哪些技巧,如何将病毒感染文件的过程翻转为清 O\zGN/!
除病毒、修复文件的过程,哪些代码可被用做特征码以及如何防御这种病毒。分析人员具有的素质越高,分析过程 z_en.
越快,理解越深。动态分析则是指利用DEBUG等程序调试工具在内存带毒的情况下,对病毒做动态跟踪, 观察病毒 M2y"M ,k4
的具体工作过程,以进一步在静态分析的基础上理解病毒工作的原理。在病毒编码比较简单的情况下,动态分析不 WAp#[mW.fx
是必须的。但当病毒采用了较多的技术手段时,必须使用动、静相结合的分析方法才能完成整个分析过程。例如F_ 8(0q,7)y
lip病毒采用随机加密,利用对病毒解密程序的动态分析才能完成解密工作,从而进行下一步的静态分析。 =]F15:%Zq
从上面的讨论可以看出: VTxLBFK;
1.利用原始备份和被检测程序相比较的方法适合于不需专用软件,可以发现异常情况的场合, 是一种简单的 YGr^uTQb
基本的病毒检测方法; <@:LONe<
2.扫描特征串和识别特征字的方法适用于制作成查病毒软件的方式供广大PC机用户使用,方便而又迅速, 但 xZ(VvINL'
对新出现的病毒会出现漏检的情况,需要与分析和比较法相结合。 #zc{N"!
分析病毒的方法主要是由专业人员识别病毒,研制反病毒系统时使用,要求较多的专业知识,是反病毒研究不 D[R<H((
可缺少的方法。 1R"ymWg"
P7kb*
)6Qk|gIu(
""^.fh
0Xw3h^%
U/bQ(,3}
N;d@)h(N!
(eJYv:
^
cdfvc0
}mSfg
qddP -uN
通常计算机病毒的检测方法有两种: C~a-R#
1.手工检测 $@:z4S(
手工检测是指通过一些软件工具(DEBUG.COM、PCTOOLS.EXE、NU.COM、SYSINFO.EXE等提供的功能) 进行病毒的检测。这种方法比较复杂,需要检测者熟悉机器指令和操作系统,因而无法普及。它的基本过程是利用一些工具软件,对易遭病毒攻击和修改的内存及磁盘的有关部分进行检查,通过和正常情况下的状态进行对比分析,来判断是否被病毒感染。这种方法检测病毒,费时费力,但可以剖析新病毒,检测识别未知病毒,可以检测一些自动检测工具不认识的新病毒。 3re|=_
Hy
2.自动检测 _rf
自动检测是指通过一些诊断软件来判读一个系统或一个软盘是否有毒的方法。自动检测则比较简单,一般用户都可以进行,但需要较好的诊断软件。这种方法可方便地检测大量的病毒,但是,自动检测工具只能识别已知病毒,而且自动检测工具的发展总是滞后于病毒的发展,所以检测工具总是对相对数量的未知病毒不能识别。 5x; y{qT
就两种方法相比较而言,手工检测方法操作难度大,技术复杂,它需要操作人员有一定的软件分析经验以及对操作系统有一个深入的了解。而自动检测方法操作简单、使用方便,适合于一般的计算机用户学习使用;但是,由于计算机病毒的种类较多,程序复杂,再加上不断地出现病毒的变种,所以自动检测方法不可能检测所有未知的病毒。在出现一种新型的病毒时,如果现有的各种检测工具无法检测这种病毒,则只能用手工方法进行病毒的检测。其实,自动检测也是在手工检测成功的基础上把手工检测方法程序化后所得的。 (3+:/,{'$
因此,手工检测病毒是最基本、最有力的工具。 rocG;$[
病毒感染正常文件或系统会引起各种变化,从这些变化中找出某些本质性的变化,作为诊断病毒的判据。广泛使用的主要检测病毒方法有:比较法、搜索法、分析法、感染实验法、软件模拟法、行为检测法。