郑重声明:本贴原作者为走走看看
为防止误解,特作如下声明:
1.鉴于个人能力有限,文中大量借用了业已在病毒界获得公认的两篇文章:先进杀毒引擎的设计原理 ,流行杀毒软件的引擎设计 。
2.为便于理解,文中很多词语未使用严格的工业研发用语。比如杀毒引擎的前端正式名称为‘基于初步预扫描的(文件)对象汇入工程部分"。很多工业用语听起来很拗口,自己变通了一下,感兴趣者可查阅L.Felly:系统的安全与防护 中的有关章节。
3.我认为现今在全球流行的几款杀毒软件在技术上并不存在谁的技术远远领先的问题,没有必要过与赞扬那一款杀毒软件,自己用着高兴就好。文中对某些杀软的介绍比较详细,主要是因为它的资料较多,有东西可写,没有其余的意思。
4.到现在为止,我已经用过几乎所有的杀毒软件(论坛上提到的)
5. 我个人非常不喜欢设计病毒,私下写过的几个纯粹是写着玩,大部分时候是MM生气的时候写个玩笑程序让她高兴用的
6.很长时间不在专业病毒论坛上走动了。我认为如果因为喜欢程序设计看一下病毒的代码是可以的,当出于其他目的的时候,还是收手吧。
7.鉴于个人能力原因,有一部分是MM写的,MM很漂亮,也很娇气,但对我基本上言听计从,必经一起走过了十几年了。原帖子中有一部分是错误的,已经由她修改过。
8.文中有一部分内容来自一个朋友提供的杀毒软件公司的开发文档,我已经大幅改动过。
9.本人是学生,且正在忙于考G,上网的时间并不怎么多,因此很多问题可能并不能及时作出解答,还望原谅。
10.我一直在使用的杀毒软件(其余的半路都卸了):SAV9.0,KV2004(两套系统)。在我看来杀毒软件就只是一款软件罢了,没必要大家为用什么争来争去,自己感觉好就行了,争论的时间还不如用来多陪陪女友呢。
正文部分
文章比较长,加之本人写作水平有限和某些技术文档需要核实,只能写一段发一段,还望大家原谅。有误之处,敬请指出,谢谢!(各段数值标出,每次均对该文件进行编辑.
1.什么是杀毒软件引擎,与病毒库的关系?
首先必须指出杀毒软件的引擎与其病毒库并没有什么直接的关系。杀毒引擎的任务和功能非常简单,就是对于给定的文件或者程序进程判断其是否是合法程序(对应于杀毒软件厂商自己定义的正常和非异常程序规范而言。正常的程序规范是指在程序所在系统平台上操所系统本身洗净有定义的或者业界已经公认的程序行为过程,比如操作系统正常运行就必须要求应用程序与系统核心进行进程响应并与交换相关数据。非异常程序活动是指可能存在非法程序操作结果但能够以较高的置信度确定其非非法程序活动规范的。一般情况下,相关文件的复制,移动,删除等都奔包括在该界定范围内)。
我们知道病毒的最终目的有些是与合法活动很类似的,在这种情况下,要求软件厂商必须自己有一个行为规范界定规则,在一个给定的范围和置信度下,判断相关操作是否为合法。在这方面,各个厂商的界定是有区别的,一般而言非美国厂商界定是非常严格的,只有有很高的置信水平的程序行为,他们才判别为非病毒操作。记得前一阵论坛上有人给了四段简单的代码,很多杀毒软件将其判为病毒或有病毒性质的文件行为,实际上看那几段代码可以知道,其结果并不足以视之为病毒。美国厂商一般判断比较复杂,这主要由于美国市场上的杀毒软件引擎来源比较复杂,比如诺顿,有足够的技术资料确信它的杀毒软件引擎是自成体系的,而mcafee则存在一定的外界技术引进(收购所罗门)。
用简单的话说,杀毒引擎就是一套判断特定程序行为是否为病毒程序(包括可疑的)的技术机制。一个完整的技术引擎遵守如下的行为过程:
1.非自身程序行为的程序行为捕获。包括来自于内存的程序运行,来自于给定文件的行为虚拟判断,来自于网络的动态的信息等等。一般情况下,我们称之为引擎前端。捕捉的方法非常多,除诺顿以外的杀毒软件采用的都是行为规范代码化的方法。诺顿由于与微软有这远远高于其它厂商合作关系,其实现过程比较独特,另有叙述。
2.基于引擎机制的规则判断。这个环节代表了杀毒引擎的质量水平,一个好的杀毒引擎应该能在这个环节发现很多或者称之为相当规模的病毒行为,存而避免进入下一个判断环节。传统的反病毒软件引擎使用的是基于特征码的静态扫描技术,即在文件中寻找特定十六进制串,如果找到,就可判定文件感染了某种病毒。但这种方法在当今病毒技术迅猛发展的形势下已经起不到很好的作用了。为了更好的发现病毒,相继开发了所谓的虚拟机,实时监控等相关技术。这个环节被叫做杀毒软件引擎工作的核心层。
3.引擎与病毒库的交互作用。这个过程往往被认为是收尾阶段,相对于前两个环节,这个阶段速度是非常慢的,杀毒引擎与要将非自身程序行为过程转化为杀毒软件自身可识别的行为标识符(包括静态代码等),然后与病毒库中所存贮的行为信息进行对应,并作出相应处理。当然必须承认,当前的杀毒软件对大量病毒的识别都是在这个阶段完成的。因此一个足够庞大的病毒库往往能够弥补杀毒软件引擎的不足之处。但是必须意识到,如果在核心层阶段就可以结束并清除病毒程序,那么杀毒软件的工作速度将会大幅提升。"很可惜的是,当前我们没有足够聪明的杀毒引擎来完成这个过程",这就是为什么有病毒库的原因。
诺顿是微软最高级的安全方面核心合作厂商,因此它的杀毒软件在某些方面工作比较特殊。比如在杀毒软件的安装,使用和功能实现方面,大部分厂商采用的是中间件技术,在系统底层与非自身应用程序之间作为中间件存在并实现其功能;另有一些厂商使用的是应用程序或者嵌入技术,相对而言这种方法安全性较低;诺顿和 mcafee实现方式比较相似,诺顿采用了基于系统最底层的系统核心驱动,这种实现方式是最安全的或者说最高级的实现方式,当然这需要微软的系统源代码级的支持(要花许多money),业界公认,这是最稳定的实现方法,但从目前而言,只诺顿一家。Mcafee实现方式与诺顿很接近,一般称之为软件驱动。相当于在系统中存在一个虚拟"硬件",来实现杀毒软件功能。这些实现方式关系着杀毒引擎对程序行为进行捕捉的方式。
我们使用的intel系的处理器有两个 ring层,对应两个层,微软的操作系统将系统中的所有行为分为如下几个层:
1.最底层:系统核心层,这个层的所有行为都由操作系统已经内置的指令来实现,所有外界因素(即使你是系统管理员)均不能影响该层的行为。诺顿的核心层既工作在这个层上。
2.硬件虚拟层,一般称之为HAL。为了实现硬件无关性,微软设计了该层。所有的外部工作硬件(相对于系统核心而言)都进入HAL,并被HAL处理为核心层可以相应的指令。我们所使用的硬件的驱动程序既工作在该层上。当外界硬件存在指令请求时,驱动程序作出相关处理后传给核心层。如果无与之对应的驱动相应,那么将按照默认硬件进行处理。好像安全模式下硬件的工作就被置于默认硬件模式。Mcafee被认为工作与该层上。
3.用户层(分为两个子层,不详细叙述,感兴趣的可以查阅《windows xp入门到精通》(有中文版),第二部分四节有叙述)。我们所知的大部分杀毒软件既工作与该层上。一个完整的程序行为请求是如下流程:位于3户层上的应用程序产生指令行为请求,被传递至2HAL进行处理,最后进入1最底层后进入CPU的指令处理循环,然后反向将软件可识别的处理结果经1-2-3再响应给应用程序。对于诺顿而言,其整个工作过程如下:3-2-1,完成;mcafee:3-2-1-1-2,完成:其余:3-2-1-1-2-3,完成;这个环节代表了杀毒软件引擎的前端行为规范的获得。只从这个过程而言,诺顿和mcafee是比较先进的。(具体的系统与CPU的ring()的对应,记不清楚了。 WinNT时代,微软的NT系统被设计有与四个ring()层相对应,RISC系列的处理器有四个ring。因此现在的大部分杀毒软件是不能工作与NT上的。具体的CISC和RISC的ring()数我记得可能有误,反正是一个2ring(),一个4ring().)。
尽管比较先进的工作方式给诺顿和mcafee带来了较高的系统稳定性(HAL层很少出现问题,最底层出问题的几率接近于零),较快的响应速度(减少了环节),但同时也带来了一些问题:1.资源占用比较厉害。在mcafee上体现的不是很明显,在诺顿上表现非常明显。因为对于越底层的行为,硬件资源分配越多。最好资源的是什么?当然是操作系统。应为它最最底层。2.卸载问题。卸载底层的组件出问题的概率是相对比较高的,因此诺顿的卸载比较慢,偶尔还出问题。