查毒引擎中的虚拟机,并不是像VMWare的工作原理那样,为待查的可执行程序创建一个虚拟的执行环境,提供它可能用到的一切元素,包括硬盘,端口等,让它在其上自由发挥,最后根据其行为来判定是否为病毒 。(当然这是个不错的构想,但考虑到其设计难度过大,需模拟元素过多且行为分析要借助人工智能理论,因而只能作为以后发展的方向 。)就目前而言,卡巴斯基在这方面做得还可以 。而Mcafee的新产品中,则加入了一种缓冲区溢出保护技术,本质上其实也是一种虚拟技术 。查毒引擎的虚拟机是一个软件模拟的CPU,它可以象真正CPU一样取值,译码,执行,可以模拟一段代码在真正CPU上运行得到的结果 。给定一组机器码序列,虚拟机就会自动从中取出第一条指令操作码部分,判断操作码类型和寻址方式以确定该指令长度,然后在相应的函数中执行该指令,并根据执行后的结果确定下条指令的位置,如此循环反复直到某个特定情况发生以结束工作,这就是虚拟机的基本工作原理和简单流程 。
设计虚拟机查毒的目的,就是为了对付加密变形病毒,虚拟机首先从文件中确定并读取病毒入口处代码,然后以上述工作步骤解释执行病毒头部的解密段(Decryptor),最后在执行完的结果(解密后的病毒体明文)中查找病毒的特征码 。这里所谓的“虚拟”,并非是指创建了什么虚拟环境,而是指染毒文件并没有实际执行,只不过是虚拟机模拟了其真实执行时的效果 。这就是虚拟机查毒基本原理 。
早期病毒没有使用任何复杂的反检测技术,如果拿反汇编工具打开病毒体代码,看到的将是真正的机器码 。因而可以由病毒体内某处一段机器代码和此处距离病毒入口(注意不是文件头)偏移值,来唯一确定一种病毒 。查毒时,只需简单的确定病毒入口并在指定偏移处扫描特定代码串 。这种静态扫描技术对付普通病毒是万无一失的 。
随着病毒技术的发展,出现了一类加密病毒 。这类病毒的特点是:其入口处具有解密子(Decryptor),而病毒主体代码被加了密 。运行时首先得到控制权的解密代码将对病毒主体进行循环解密,完成后将控制交给病毒主体运行,病毒主体感染文件时会将解密子,用随机密钥加密过的病毒主体,和保存在病毒体内或嵌入解密子中的密钥一同写入被感染文件 。由于同一种病毒的不同传染实例的病毒主体是用不同的密钥进行加密,因而不可能在其中找到唯一的一段代码串和偏移来代表此病毒的特征,似乎静态扫描技术对此即将失效 。但是,因为不同传染实例的解密子仍保持不变机器码明文,所以如果应用特征码查毒技术,虽然有一定的误报风险(解密子中代码缺少病毒特性,同样的特征码也会出现在正常程序中),但仍不失为一种有效的方法 。
由于加密病毒还没有能够完全逃脱静态特征码扫描,所以病毒写作者在加密病毒的基础之上进行改进,使解密子的代码对不同传染实例呈现出多样性,这就出现了加密变形病毒 。它和加密病毒非常类似,唯一的改进在于病毒主体在感染不同文件会构造出一个功能相同但代码不同的解密子,也就是不同传染实例的解密子具有相同的解密功能但代码却截然不同 。比如,原本一条指令完全可以拆成几条来完成,中间可能会被插入无用的LJ代码 。这样,由于无法找到不变的特征码,静态扫描技术就彻底失效了 。在这种情况下,虚拟机技术将会派上用场 。
2、实时监控
实时监控,其实并非什么新技术,早在DOS时代就出现了 。在Windows下要实现实时监控决非易事,因为普通用户态程序是不可能监控系统的活动的,这也是出于系统安全的考虑 。病毒实时监控普遍使用了驱动编程技术,让工作于系统核心态的驱动程序去拦截所有的文件访问 。当然由于工作系统的不同,驱动程序无论从结构还是工作原理都不尽相同的,当然程序写法和编译环境更是千差万别了 。上面提到的病毒实时监控,实质就是对文件的监控 。除了文件监控外,还有各种各样的实时监控工具,都具有各自不同的特点和功用 。现在流行的网络监控,邮件监控基本上是对文件监控的改进,革命性的改动没有 。
推荐阅读
- 千窟城被毁主力是谁
- 经典说说句子每一句都值得珍藏
- 碧蓝航线格罗斯特建造时间 碧蓝航线格罗斯特属性技能一览
- win10更新失败屏幕不亮进不了系统解决方法
- 豆腐和金针菇可以一起吃吗
- JavaScript对搜索引擎优化的影响和解决方案
- 碧蓝航线黛朵建造时间 SSR皇家轻巡黛朵属性技能一览
- 问道手游八仙曹国舅怎么过
- 碧蓝航线朴是谁 碧蓝航线重樱驱逐浦波原型介绍