现在有很多各种类型的杀毒软件,从以前收费的,到现在大部分免费的,但是大部分人不了解其内部杀毒原理。下面对杀毒软件的工作原理作详细介绍。
一、杀毒软件原理基础
一个杀毒软件的构造的复杂程度要远远高于木马或病毒,所以其原理也比较复杂。而且鉴于现在木马病毒越来越向系统底层发展,杀毒软件的编译技术也在不断向系统底层靠近。
例如现在的“主动防御”技术,就是应用RING0层的编译技巧。这里简单介绍一下基本构成。
一个杀毒软件一般由扫描器、病毒库与虚拟机组成,并由主程序将其结为一体,如图1
扫描器是杀毒软件的核心,用于发现病毒,一个杀毒软件的杀毒效果好坏就直接取决于它的扫描器编译技术与算法是否先进,而且杀毒软件不同的功能往往对应着不同的扫描器,也就是说,大多数杀毒软件都是由多个扫描器组成的。
而病毒库存储的特征码形式则取决于扫描器采用哪种扫描技术。它里面存储着很多病毒所具有的独一无二的特征字符,称之为“特征码”。特征码总的分来只有两个,文件特征码与内存特征码。文件特征码存在于一些未执行的文件里,例如EXE文件、RMVB文件、jpg文件甚至是txt文件中都有可能存在文件特征码,也都有可能被查杀。而内存特征码仅仅存在于内存中已运行的应用程序。而虚拟机则是最近引进的概念,它可以使病毒在一个由杀毒软件构建的虚拟环境中执行,与现实的CPU、硬盘等完全隔离,从而可以更加深入的检测文件的安全性。
简单的说,杀毒软件的原理就是匹配特征码。
当扫描得到一个文件时,杀毒软件会检测这个文件里是否包含病毒库里所包含的特征码,如果有,则报毒病查杀,如果没有,纵然这个文件确实是一个病毒,它也会把它当作正常文件来看待。
二、基于文件扫描的杀毒技术
基于文件的杀毒技术可以分为“第一代扫描技术”、“第二代扫描技术”与“算法扫描”这三种方法,对于免杀爱好者来说,要对每一种方法烂熟于心,才能成为高手!但做为一个初学者来说了解一下即可。
这里介绍一下其中两种种方法,详细的技术原理如果各位得这有兴趣的话可以自行研究。
1、通配符扫描技术
通配符扫描技术属于是第一代扫描技术的一个分支,对于“通配符”,可以理解为具有一定意义的符号,例如DOS命令里的*号就是任意长度的任意字符的意思,而且通配符在不同的领域也里可以代表不同的意思。
现在杀毒软件中简单的扫描器常常支持通配符,因为鉴于字符串扫描技术的执行速度与特征码长度限制等问题,使得其逐渐退出历史舞台,取而代之的是通配符扫描技术,通配符扫描技术以同样简单的原理与技术却实现了更为强大的功能。
扫描器中的通配符一般用于跳过某些字节或字节范围,以至于现在有些扫描器还支持正则表达式!
下面通过一个例子来讲解通配符扫描技术的原理。
例如病毒库中有这样一段特征码:0400
B801 020E 07BB ??02 %3 33C9 8BD1
419C 上面的特征码可以解释为:
1、尝试匹配04,如果找到则继续,否则跳出。
2、尝试上一匹配目标后匹配00,如果找到则继续,否则跳出。
3、尝试上一匹配目标后匹配B8,如果找到则继续,否则跳出。
4、尝试上一匹配目标后匹配01,如果找到则继续,否则跳出。
5、尝试上一匹配目标后匹配02,如果找到则继续,否则跳出。
6、尝试上一匹配目标后匹配0E,如果找到则继续,否则跳出。
7、尝试上一匹配目标后匹配07,如果找到则继续,否则跳出。
8、尝试上一匹配目标后匹配BB,如果找到则继续,否则跳出。
9、忽略此字节。
10、尝试上一匹配目标后匹配02,如果找到则继续,否则跳出。
11、在接下来的3个位置(字节)中尝试匹配33,如果找到则继续,否则跳出。
12、尝试上一匹配目标后匹配C9,如果找到则继续,否则跳出。
13、尝试上一匹配目标后匹配8B,如果找到则继续,否则跳出。
14、尝试上一匹配目标后匹配D1,如果找到则继续,否则跳出。
15、尝试上一匹配目标后匹配41,如果找到则继续,否则跳出。
16、尝试上一匹配目标后匹配9C,如果找到则继续,否则跳出。
这种扫描技术通常支持半字节匹配,这样可以更精确地匹配特征码,一些早期的加密病毒用这种方法都比较容易检测出来。
其实现在的一些特征码仍然在使用类似此种方法的特征码表达技术,因此掌握这些知识会对以后的免杀有所帮助,同样可以使在定位特征码时更加了解自己正在做什么,以及做的是否正确等等,这非常重要。
2、智能扫描
智能扫描属于第二代扫描技术的一个分支,这种方法是在一种病毒变异工具包出现之后提出的。智能扫描法会忽略检测文件中象NOP这样的无意义指令。而对于文本格式的脚本病毒或宏病毒,则可以替换掉多余的例如空格、换行符或制表符等空白字符,这一切替换动作在扫描缓冲区就会执行,从而大大提高了扫描器的检测能力。
3、近似精确识别法
近似精确识别法同样是属于第二代扫描技术的一个分支,但是相比起来应用的更为广泛,这种扫描技术包含了两种方式与若干种方法,在这里不可能一一介绍,下面将主要介绍两种方法的代表。
方法一:多套特征码
该方法采用两个或更多个字符串集来检测每个病毒,如果扫描器检测到其中一个特征符合,那么就会警告发现变种,但并不会执行下一步操作(例如清除病毒体或删除文件)。如果多个特征码全部符合,则报警发现病毒,并执行下一步操作。
方法二:效验和
对于校验和,也许有些朋友会想到文件校验和比对的方法,这个方法的思路是将每一个无毒的文件生成一个校验和,等待下次扫描时在进行简单的校验和比对即可,如果校验和有所变化,在进行进一步的扫描,这样有利于提升扫描器的效率,但是严格地说,这并不算是扫描技术。
效验和扫描技术利用的最为到位的就是比较出名的KAV(卡巴斯基)了,它的第二代扫描器就采用了密码效验和技术,并且没有使用任何搜索字符串技术。关于效验和是一个复杂的概念,简单的说就是通过对病毒中的某一段代码的计算,从而得出一个值(例如123XY4),与MD5加密有些相似,当然这样说不完全正确。
但KAV采用的是一种由卡巴斯基发明的一种叫做密码效验和的特殊算法,这种算法通常会产生两个值。而且病毒库的查询采用了特征码分类思想,例如扫描EXE文件时只调用与EXE文件有关的病毒库,而根据EXE文件的位置不同(例如文件头、入口点)又分为不同的子库,这样有利于提高扫描速度。
三、由此得出的一些经验
首先应该明白第一个例子介绍的通配符“0400 B801 020E 07BB ??02 %3 33C9 8BD1
419C”代表的肯定不是一个字节。
也就是说,杀毒软件厂商定位的特征一般都是数十字节,所以定位特征码时就要避免定位过于精确,一般保证在10字节以内就足够了!因为如果特征码定位的过于精确,会为以后的修改操作带来很大不必要的麻烦。可以简单的想一下,是修改一个字节的方法多,还是修改10字节的方法多?
而由智能扫描也可以得出一个结论,就是不要将杀毒软件想的太傻,例如属于智能扫描的一个分支——启发式扫描,它会将一些异常改动计算到可能性的“权值”里,如果一个文件的可疑改动过多,就会导致报毒,这样之前所做的一些工作就起到了相反的作用,是典型的画蛇添足。
所以,修改木马文件时也要掌握一个度的问题,不要修改的过多,但还要保证自己的木马免杀时间够长,这就要明白那些更改会被归为可疑修改,而那些则不会。
一般情况下,杀毒软件的杀毒方式如下:
特征码扫描法。利用病毒库直接通过提取病毒的主体特征码进行扫描,对比文件中的相应数据判断是否含有病毒代码。根据这一方法,杀毒软件还应用了其他类似的特征码扫描方法,例如广谱扫描法等。主要特点是使用方便,缺点是需要及时升级病毒库。在此基础上后来还开发了分段字符扫描法(逐个检查字符段,以此优化性能)等技术。
智能引擎扫描技术。360的QVM智能引擎、金山的U盘病毒引擎、瑞星的专家引擎等都属于这种引擎。此类引擎中的离线版本一般采用AI分析技术,在线版本结合云进行智能扫描,缺点是可能出现分析错误导致误报甚至漏报的现象。
云引擎扫描技术。云引擎一般结合在线病毒库和云智能引擎进行扫描,可信度较高,并且升级及时,缺点是需要联网使用。当云不可用时只能使用本地引擎。