爱问知识人 爱问教育 医院库

什么杀毒软件好用?

首页

什么杀毒软件好用?

为什么我有用杀毒和防毒软件还会中毒呢?

提交回答
好评回答

其他答案

    2006-02-05 18:34:44
  •   让你看一篇文章,很好,但很长的。
    |转贴|杀毒软件的引擎- -
                              
    郑重声明:本贴原作者为走走看看
    为防止误解,特作如下声明:
    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入门到精通》(有中文版),第二部分四节有叙述)。我们所知的大部分杀毒软件既工作与该层上。
       对于未知病毒的判断实际上代表着杀毒软件厂商在引擎研究方面的最高能力。业界公认,防止未知病毒是"代表研究水平的"。平心而论,非美国厂商在这方面能力较差。业界对于防止未知病毒能力是按照如下方法衡量的:以评测当日的杀毒软件最新版本为该厂商的供测试版本,未知病毒由如下而来: 1。
      病毒作者提供。有些病毒作者在将自己的病毒发布以前总爱送给一些业界的安全杂志供其评测(最佩服这种人)2。大部分真正的业界安全杂志都有自己的研究实验室,他们自己的研究人员会根据最新的趋势和技术手段及工具写一些病毒。一般情况下,这些病毒是不会流到网上去的。
      3。假病毒。一些很类似于病毒行为的文件,程序等。测试的时候病毒库被置空(就是杀毒软件试图调用病毒库时采用程序方法向其返回一个空结果),在这种情况下进行测试。如果有人有兴趣,可以到病毒论坛上搞点新手写的小病毒(一般也就100-200行),弄上几十个拿自己的杀毒软件试一试,就会发现在平均状态下诺顿病毒库被置空时起对未知病毒判断能力还是挺强的,怎么着也到了x%,(x为两位数),很多杀毒软件结果挺惨的,尤其在对付比较复杂的蠕虫病毒时,某厂商的产品近乎全军覆没。
      下面对虚拟机和实时监控进行介绍。由于大家认为在文中加入程序代码看着很累,因此不再给出技术实现代码,其实根据原理你自己也可以写出来。 虚拟机,在反病毒界也被称为通用解密器,已经成为反病毒软件中最重要的部分之一虚拟机的概念和它与诸如Vmware和WIN9X下的VDM(DOS虚拟机,它用来在32位保护模式环境中运行16实模式代码)是有区别的。
      其实这些虚拟机的设计思想是有渊源可寻的,都来自于IBM的一批研究人员搞的一套东西。 Vmware作为原操作系统下的一个应用程序可以为运行于其上的目标操作系统创建出一部虚拟的机器,目标操作系统就象运行在单独一台真正机器上,丝毫察觉不到自己处于Vmware的控制之下。
      当在Vmware中按下电源键(Power On)时,窗口里出现了机器自检画面,接着是操作系统的载入,一切都和真的一样。而WIN9X为了让多个程序共享CPU和其它硬件资源决定使用VMs(所有Win32应用程序运行在一部系统虚拟机上;而每个16位DOS程序拥有一部DOS虚拟机),winxp是采用区域内存访问来实现16位程序支持的。
       VM是一个完全由软件虚构出来的东西,以和真实电脑完全相同的方式来回应应用程序所提出的需求。从某种角度来看,你可以将一部标准的PC的结构视为一套 API。这套API的元素包括硬件I/O系统,和以中断为基础的BIOS和MS-DOS。WIN9X常常以它自己的软件来代理这些传统的API元素,以便能够对珍贵的硬件多重发讯。
      在VM上运行的应用程序认为自己独占整个机器,它们相信自己是从真正的键盘和鼠标获得输入,并从真正的屏幕上输出。稍被加一点限制,它们甚至可以认为自己完全拥有CPU和全部内存。 查毒的虚拟机并不是象某些人想象的:如Vmware一样为待查可执行程序创建一个虚拟的执行环境,提供它可能用到的一切元素,包括硬盘,端口等,让它在其上自由发挥,最后根据其行为来判定是否为病毒。
      当然这是个不错的构想,但考虑到其设计难度过大(需模拟元素过多且行为分析要借助人工智能理论),因而只能作为以后发展的方向。就目前可以知道的信息而言,卡巴斯基在这方面做得还可以,mcafee的新产品中加入了一种溢出保护技术,本质上而言也是一种所谓的虚拟技术。
      查毒的虚拟机是一个软件模拟的CPU,它可以象真正CPU一样取指,译码,执行,它可以模拟一段代码在真正CPU上运行得到的结果。给定一组机器码序列,虚拟机会自动从中取出第一条指令操作码部分,判断操作码类型和寻址方式以确定该指令长度,然后在相应的函数中执行该指令,并根据执行后的结果确定下条指令的位置,如此循环反复直到某个特定情况发生以结束工作,这就是虚拟机的基本工作原理和简单流程。
      设计虚拟机查毒的目的是为了对付加密变形病毒,虚拟机首先从文件中确定并读取病毒入口处代码,然后以上述工作步骤解释执行病毒头部的解密段(decryptor),最后在执行完的结果(解密后的病毒体明文)中查找病毒的特征码。这里所谓的"虚拟",并非是创建了什么虚拟环境,而是指染毒文件并没有实际执行,只不过是虚拟机模拟了其真实执行时的效果。
      这就是虚拟机查毒基本原理。曾经跟搞杀毒的技术人员探讨是否可以采用模拟实际执行的方法来搞一套杀毒软件,回答是微软可以,因为微软可以在系统底层搞一套硬件虚拟层,来实现硬件虚拟。我忽然想到,如果微软真的搞杀毒软件,其实无论别的杀毒软件公司多么强,大家都得彻底玩完。
       早期病毒没有使用任何复杂的反检测技术,如果拿反汇编工具打开病毒体代码看到的将是真正的机器码。因而可以由病毒体内某处一段机器代码和此处距离病毒入口(注意不是文件头)偏移值来唯一确定一种病毒。查毒时只需简单的确定病毒入口并在指定偏移处扫描特定代码串。
      这种静态扫描技术对付普通病毒是万无一失的。 随着病毒技术的发展,出现了一类加密病毒。这类病毒的特点是:其入口处具有解密子(decryptor),而病毒主体代码被加了密。运行时首先得到控制权的解密代码将对病毒主体进行循环解密,完成后将控制交给病毒主体运行,病毒主体感染文件时会将解密子,用随机密钥加密过的病毒主体,和保存在病毒体内或嵌入解密子中的密钥一同写入被感染文件。
      由于同一种病毒的不同传染实例的病毒主体是用不同的密钥进行加密,因而不可能在其中找到唯一的一段代码串和偏移来代表此病毒的特征,似乎静态扫描技术对此即将失效。但仔细想想,不同传染实例的解密子仍保持不变机器码明文(从理论上讲任何加密程序中都存在未加密的机器码,否则程序无法执行),所以将特征码选于此处虽然会冒一定的误报风险(解密子中代码缺少病毒特性,同样的特征码也会出现在正常程序中),但仍不失为一种有效的方法。
       由于加密病毒还没有能够完全逃脱静态特征码扫描,所以病毒写作者在加密病毒的基础之上进行改进,使解密子的代码对不同传染实例呈现出多样性,这就出现了加密变形病毒。它和加密病毒非常类似,唯一的改进在于病毒主体在感染不同文件会构造出一个功能相同但代码不同的解密子,也就是不同传染实例的解密子具有相同的解密功能但代码却截然不同。
      比如原本一条指令完全可以拆成几条来完成,中间可能会被插入无用的LJ代码。这样,由于无法找到不变的特征码,静态扫描技术就彻底失效了。在这种情况下,虚拟机技术将会派上用场。 实时监控技术其实并非什么新技术,早在DOS编程时代就有之。只不过那时人们没有给这项技术冠以这样专业的名字而已。
      在WINDOWS下要实现实时监控决非易事,普通用户态程序是不可能监控系统的活动的,这也是出于系统安全的考虑。病毒实时监控(For WIN9X&WINNT/2000)都使用了驱动编程技术,让工作于系统核心态的驱动程序去拦截所有的文件访问。当然由于工作系统的不同,驱动程序无论从结构还是工作原理都不尽相同的,当然程序写法和编译环境更是千差万别了,上面提到的病毒实时监控其实就是对文件的监控,说成是文件监控应该更为合理一些。
      除了文件监控外,还有各种各样的实时监控工具,它们也都具有各自不同的特点和功用。现在流行的什么网络监控,邮件监控基本上是对文件监控的改进,革命性的改动没有。 病毒实时监控其实就是一个文件监视器,它会在文件打开,关闭,清除,写入等操作时检查文件是否是病毒携带者,如果是则根据用户的决定选择不同的处理方案,如清除病毒,禁止访问该文件,删除该文件或简单地忽略。
      这样就可以有效地避免病毒在本地机器上的感染传播,因为可执行文件装入器在装入一个文件执行时首先会要求打开该文件,而这个请求又一定会被实时监控在第一时间截获到,它确保了每次执行的都是干净的不带毒的文件从而不给病毒以任何执行和发作的机会。以上说的仅是病毒实时监控一个粗略的工作过程,病毒实时监控的设计主要存在以下几个难点: 其一是驱动程序的编写不同于普通用户态程序的写作,其难度很大。
      写用户态程序时你需要的仅仅就是调用一些熟知的API函数来完成特定的目的,比如打开文件你只需调用CreateFile就可以了;但在驱动程序中你将无法使用熟悉的CreateFile。在NT/2000下你可以使用 ZwCreateFile 或NtCreateFile(native API),但这些函数通常会要求运行在某个IRQL(中断请求级)上,如果你对如中断请求级,延迟/异步过程调用,非分页/分页内存等概念不是特别清楚,那么你写的驱动将很容易导致蓝屏死机(BSOD),Ring0下的异常将往往导致系统崩溃,因为它对于系统总是被信任的,所以没有相应处理代码去捕获这个异常。
      在NT下对KeBugCheckEx的调用将导致蓝屏的出现,接着系统将进行转储并随后重启。另外驱动程序的调试不如用户态程序那样方便,用象VC ++那样的调试器是不行的,你必须使用系统级调试器,如softice,kd,trw等。 其二是驱动程序与ring3下客户程序的通信问题。
      这个问题的提出是很自然的,试想当驱动程序截获到某个文件打开请求时,它必须通知位于ring3下的查毒模块检查被打开的文件,随后查毒模块还需将查毒的结果通过某种方式传给ring0下的监控程序,最后驱动程序根据返回的结果决定请求是否被允许。这里面显然存在一个双向的通信过程。
      写过驱动程序的人都知道一个可以用来向驱动程序发送设备I/O控制信息的API调用DeviceIoControl,它的接口在MSDN中可以找到,但它是单向的,即ring3下客户程序可以通过调用DeviceIoControl将某些信息传给ring0下的监控程序但反过来不行。
      既然无法找到一个现成的函数实现从ring0下的监控程序到ring3下客户程序的通信,则我们必须采用迂回的办法来间接做到这一点。为此我们必须引入异步过程调用(APC)和事件对象的概念,它们就是实现特权级间唤醒的关键所在。现在先简单介绍一下这两个概念,具体的用法请参看后面的每子章中的技术实现细节。
      异步过程调用是一种系统用来当条件合适时在某个特定线程的上下文中执行一个过程的机制。当向一个线程的APC队列排队一个APC时,系统将发出一个软件中断,当下一次线程被调度时,APC函数将得以运行。APC分成两种:系统创建的APC称为内核模式APC,由应用程序创建的APC称为用户模式APC。
      另外只有当线程处于可报警(alertable)状态时才能运行一个APC。比如调用一个异步模式的ReadFileEx时可以指定一个用户自定义的回调函数FileIOCompletionRoutine,当异步的I/O操作完成或被取消并且线程处于可报警状态时函数被调用,这就是APC的典型用法。
      Kernel32。dll中导出的QueueUserAPC函数可以向指定线程的队列中增加一个APC对象,因为我们写的是驱动程序,这并不是我们要的那个函数。很幸运的是在Vwin32。vxd中导出了一个同名函数QueueUserAPC,监控程序拦截到一个文件打开请求后,它马上调用这个服务排队一个ring3下客户程序中需要被唤醒的函数的APC,这个函数将在不久客户程序被调度时被调用。
      这种APC唤醒法适用于WIN9X,在 WINNT/2000下我们将使用全局共享的事件和信号量对象来解决互相唤醒问题。有关WINNT/2000下的对象组织结构我将在3。4。2节中详细说明。NT/2000版监控程序中我们将利用KeReleaseSemaphore来唤醒一个在ring3下客户程序中等待的线程。
      目前不少反病毒软件已将驱动使用的查毒模块移到ring0,即如其所宣传的"主动与操作系统无缝连接",这样做省却了通信的消耗,但把查毒模块写成驱动形式也同时会带来一些麻烦,如不能调用大量熟知的API,不能与用户实时交互,所以我们还是选择剖析传统的反病毒软件的监控程序。
       其三是驱动程序所占用资源问题。如果由于监控程序频繁地拦截文件操作而使系统性能下降过多,则这样的程序是没有其存在的价值的。本论文将对一个成功的反病毒软件的监控程序做彻底的剖析,其中就包含有分析其用以提高自身性能的技巧的部分,如设置历史记录,内置文件类型过滤,设置等待超时等。
       这段文字也是从关于病毒工作原理那篇文章里搞出来的,由于那是一片老文章,因此其中的很多观点可能在现在已经不再适用,很多加密方式已经变得很强。本人并不非常赞同文章关于实时监控技术的解释。MM告诉我,现在的基于NT内核的操作系统应用程序文件-应用程序-操作系统之间的响应关系与原9x时代还是有一定区别的,特别是加入了很多线程级的权限控制,杀毒软件现在可以采用实时内存监控的方法来影射应用程序的活动。
      为什么欧美的软件厂商没有搞出那么多的监控方式像什么"网页监控,聊天软件监控等",原因很简单,因为病毒能够起作用,就必须在内存中运行,因此良好的文件监控和内存监控足以解决病毒,国内搞出那么多名堂更多的是出于市场商业考虑。 毋庸置疑,现在的杀毒软件引擎都是虚拟机技术和实时监控技术的复合体。
      由于各家研发人员所研究的方向不同,各产品的杀毒品质也非常迥异。比如诺顿的杀毒理念就是在确保系统正常运行的前提下,控制最终消除可能影响系统稳定的因素;而另有些厂商则认为杀毒软件应该最快的消除有害程序。业界一种获得公认的设计底线是杀毒软件绝对不能因为杀毒导致系统崩溃,可惜的是现在很多厂商屡屡撞线。
       。

    雷***

    2006-02-05 18:34:44

  • 2006-02-05 18:33:59
  • 那是因为你的病毒库没有更新~~
    而且你的防火墙没能防住木马~~~
    用瑞星2006吧~~推荐~~
    防火墙用天网~
    要经常更新~~
    而且要时刻不能轻视可疑文件~

    C***

    2006-02-05 18:33:59

类似问题

换一换
  • 软件 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):