按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
后很长时间内,把“杀宏病毒不破坏文档”这个对杀毒软件的基本要求作为产品的重大技术突破反复宣传。
“劳拉”文件格式:所有使用“劳拉”文件格式的文件由512字节的数据块组成(你可以注意一下,所有的WORD、EXCEL、或者其他的Office文件大小都是512的倍数),数据块的序号从-1开始:
复合文档
序号为-1的块是整个文件的文件头块,存放了复合文件的一些整体信息,结构如下:
偏移量(十六进制)
大小(字节)
内容
0
8
复合文件标识(d0 cf 11 e0 a1 b1 1a e1)
2C
4
大块映象图的大小(块数)
30
4
目录链根的开始块序号
3C
4
小块映象图的开始块序号
4C
不确定
大块映象图使用的块的列表
在512字节的数据块基础上,复合文件中包括了两种最基本的结构:
第一种是由512字节的大块连接起来的大块链,如果对以文件分配表(FAT)为基础的文件系统熟悉的话,可以很容易的理解大块链的概念,只要知道一个大块链的开始块的序号,通过大块映象图,就可以找到这一条大块链的所有内容。一个典型的大块映象图如下:
00200: fd ff ff ff 05 00 00 00 fe ff ff ff 04 00 00 00
00210: 06 00 00 00 fe ff ff ff 07 00 00 00 08 00 00 00
00220: 09 00 00 00 0a 00 00 00 0b 00 00 00 fe ff ff ff
00230: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
我们可以看到,如果一个大块链的开始块序号是0的话(该处的内容是5),那么这个大块链包括:序号为0的数据块、序号为5的数据块(该处的内容是7)、序号为7的数据块(该处的内容是9)、序号为9的数据块(该处的内容是0b)、序号为0b的数据块(该处的内容是…1,表示这是该链的最后一个数据块)。
对于比较小的结构,如果以512字节为单位的话会造成比较大的空间浪费,所以专门使用一个大块链来存放比较小的数据块,小于4096字节的数据结构使用小块链来表示,小块链的组成和寻址方法和大块链非常类似,唯一不同的是,小块链里面对小块的寻址不是在整个复合文件范围内的,而是在某一个特定的大块链范围内的,这个大块链的开始块序号在后面叙述。
目录链,目录链是复合文件最基本的数据链,描述了复合文件的目录结构信息。目录链的开始在头块中可以找到。目录链中包括了复合文件的目录信息,每一个目录项的大小是128字节,所以目录链的一个块可以包括4个目录项,第一个目录项是根目录项,名字叫做“根实体”(Root Entry),任何复合文件里面这都是第一个目录项。一个典型的根目录项如下:
00400: 52 00 6f 00 6f 00 74 00 20 00 45 00 6e 00 74 00 R o o t E n t
00410: 72 00 79 00 00 00 00 00 00 00 00 00 00 00 00 00 r y
00420: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00430: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00440: 16 00 05 00 ff ff ff ff ff ff ff ff 03 00 00 00
00450: 00 09 02 00 00 00 00 00 c0 00 00 00 00 00 00 46
00460: 00 00 00 00 00 00 00 00 00 00 00 00 86 29 f6 1f
00470: ad 57 bb 01 03 00 00 00 00 0f 00 00 00 00 00 00
目录项结构的说明如下:
偏移量(十六进制)
大小(字节)
内容
0
40
目录项的名字(所以复合文件中名字最长不能超过40字节)
40
2
名字的长度
42
2
目录项的类型1是一个存储(文件),2是目录,3是根
44
4
前一个目录项
48
4
下一个目录项
4C
4
如果是目录,指向子目录项
74
4
所存储内容的开始块
78
4
所存储内容的大小
由于上面的数据结构不是来源于微软的官方文档,包括了很多猜测的成分,所以很多内容暂时无法断定其意义,有些结构的说明可能和微软的原意也不相符合,但是我们使用这个结构对微软的大量文档进行了分析,至今尚未发现有明显的错误存在。
在基本的“劳拉”文件结构的基础上,字处理文档、电子数据表文档具有不同的内部目录结构,下面是一个典型WORD文件的内部目录结构:
1。doc
——1Table:一些数据表
——pObj:通用的对象
——ObjectPool:对象池,是一个目录,包括WORD文件中嵌入的图像、声音或者其他对象
——WordDocument:实际的文字和格式化信息就存放在这里
——SummaryInforamtion:摘要信息
——DocumentSummaryInformation:其他的摘要信息
第九节 真的有未卜先知这回事吗?
反病毒软件本质上是一种亡羊补牢的软件,也就是说,只有某一段代码被编制出来之后,才能断定这段代码是不是病毒,才能谈到去检测或者清除这种病毒。
那么,未知病毒能够防范吗?如果纯粹从理论的意义上说,未知病毒是不可能完全被防范的,电脑如果做到能够防范未知病毒,那么人工智能的水平肯定已经远远超过了通过图灵试验的程度。
图灵试验,阿兰·图灵是著名的英国计算机科学家、数学家和哲学家,被公认为现代计算机科学的奠基人之一,1950年,图灵在他的著名论文《智能与机器》中提出了所谓〃图灵试验〃:测试者与另一屋子里的人或机器对话,若测试者无法辨别与之对话的是人还是机器,则认为机器具有了人的智能。。图灵试验现在经常作为衡量机器智能程度的一种思考方法而不是具体的测试手段,也就是说衡量机器是否具有智能的一个基本因素是进行一个假想的实验,用机器在某件具体的事情上代替人的位置,然后判断机器是不是能够做的和人一样好,如果机器能够表现出接近人的智能水平,那么可以认为在这件事情上机器具有了某种程度的人类智能。
但是,为什么很多杀毒软件声称自己能够防范未知病毒呢,这是不是完全出于宣传的目的呢?如果我们不从理论上来考虑问题,不去探讨是不是具有某种通用的算法能够完全判断出一块代码是不是病毒,而是从实践的角度上考虑这个问题,“是不是有这样一种算法,可以发现大部分未知的病毒”
从某种意义上说,防范未知病毒是可能的,但是就像现阶段人工智能的应用一样,这种可能性是建立在很多先决条件之下的,也就是说,对于某种采用了已知的感染和破坏的模式的病毒。
虚拟执行技术,又叫做启发式扫描技术,是防范未知病毒的基础。
我们说〃虚拟〃二字,有着两方面的含义:其一在于运行一定规则的描述语言的机器并不一定是一台真实地以该语言为机器代码的计算机,比如JAVA想做到跨平台兼容,那么每一种支持JAVA运行的计算机都要运行一个解释环境,这就是JAVA虚拟机;另一个含义是运行某种语言的机器并不是直接执行该语言的原始环境,这种情况也称为仿真环境。
跨越计算机平台的虚拟机也有很多,比较典型的是在很多Unix下运行MS…DOS或Windows程序的仿真器。在一台非英特尔80x86为CPU的计算机上运行 MS…DOS应用程序,首先需要对MS…DOS应用程序所使用的x86指令进行解释执行,并要提供完整的仿真DOS中断、功能调用和绝大多数BIOS调用,并要解决MS…DOS 环境所使用的内存特点。
因此,我们大致可以看到一个比较完整的虚拟机需要在很多的层次上做仿真,主要包括CPU指令的解释执行和操作系统运行环境的模拟。
具体在电脑病毒的扫描技术上,对于简单的病毒采用特征码或者改进后的特征码技术就可以应付自如了,但是对于多态编码病毒,如果能够正确解析这个病毒在编码上的规律,那么理论上是可以应付自如的,但是对于比较复杂的编码算法以及众多的多态编码病毒,如果没有相对统一的方法来处理,那么势必要仔细研究每种病毒的编码,这种工作量是非常大的。如果能够让病毒在控制下先行运行一段时间,让其自己还原,那么,问题就会相对明了。可以说虚拟机是这种情况下的最佳选择(如果直接放病毒执行,会碰到多种操作系统下的兼容性问题,以及可能执行了病毒代码的危险性)。
通过利用软件构造一个虚拟x86计算机的寄存器表、指令对照表和虚拟内存,能够让病毒体在监控下在虚拟机中运行一段时间。这一过程可以提取与〃有可能被怀疑是〃病毒或与病毒程序〃相似〃的行为,比如截获中断、〃可疑〃的跳转等和普通计算机程序〃不太一样〃的地方。
同时,编码病毒在运行过程中完成自解码,还原成病毒体〃原形〃。病毒在自解码之后,还要再度结合原来的特征值方法,将已知病毒代码特征库和虚拟机的运行结果进行比较,完成对一个特定已知病毒(可能是多态的病毒)的判定。
通过虚拟机对被扫描的程序(可能的病毒代码)进行模拟执行,可以收集到这段代码的行为信息—是否更改了中断、是否进行了的内存驻留等,从而发现具有病毒特征的代码,从某种意义上可以判断出未知病毒。
如何知道一个软件是否能够检测未知病毒?
杀毒软件通常都会声称自己能够发现百分之多少的未知病毒,虽然非常困难,但是实际上这个比例从某种意义上说是可以检验的,下面是一种对未知病毒判断算法的检验方法:
我们知道,一种杀毒软件检测病毒的数量是由这种软件所拥有的病毒特征库的数量决定的,也就是说,一种杀毒软件如果能够查杀60,000种病毒,就要求这种软件至少要包括60,000条病毒特征记录,在不影响识别准确性的前提下,目前最先进的病毒特征码长度最少是8个字节(采用类似于单向HASH算法的校验码计算方法),加上杀病毒的描述8个字节(