对复合文档二进制结构(即“劳拉”文件格式)感兴趣的请进

    [复制链接]

该用户从未签到

29

主题

1092

回帖

1万

积分

[INTOHARD]工兵

Rank: 1

积分
17691
QQ
发表于 2007-11-17 21:30:17 | 显示全部楼层 |阅读模式


劳拉”文件格式是微软复合文档结构的二进制格式,本来按照微软的说法,这种结构应该叫做“复合文档二进制结构”(Compound File Binary Format),但是微软没有公开关于“复合文档二进制结构”的有关内容,大量黑客通过对WORD、excel文件的分析,以及对微软办公软件的跟踪,基本上了解了“复合文档二进制结构”的组成和其中的含义,但是整理出来的毕竟不是微软的官方文档,可能有和微软的定义不一致的地方,同时微软也有权改变这一结构,所以人们使用另外的名称:“劳拉”来描述这种结构。
复合文档”是微软在引入的一种在文件内部存放结构化信息的方法,比如说我们写一篇文章,如果这篇文章没有任何格式信息和嵌入的图像,那么使用没有任何结构的文本格式就可以了,但是一篇完善的文章里面可能有不同的段落、每个段落可能有不同的格式、字体和颜色,段落之间可能还有插图,这样简单的无格式文本就无法满足需要了,所以需要在文件的内部存放很多结构,包括段落的文字、段落的字体、甚至段落本身的信息等等,针对这种需求,以及电子数据表、演示制作等软件的需要,微软开发了一种“文件中的文件系统”也就是“复合文档”结构。
  在复合文档中,可以有很多目录,每个目录下面可以有子目录,目录和子目录中包含了“存储”,一个存储就相当于磁盘上的一个文件,整个复合文档就形成了一个类似于磁盘上的目录和文件所组成的树状结构。如果在视窗环境下使用复合文件,可以利用操作系统提供的功能对复合文件进行读写,就像读写通常的文件和目录一样,可以在复合文件内部列目录,可以打开一个指定的目录,可以读写其中的一个“存储”(文件)。


  “劳拉”文件格式:所有使用“劳拉”文件格式的文件由512字节的数据块组成(你可以注意一下,所有的WORD、EXCEL、或者其他的Office文件大小都是512的倍数),数据块的序号从-1开始:
  复合文档
数据块-1
数据块0
数据块1
数据块2
数据块。。。
512字节
512字节


序号为-1的块是整个文件的文件头块,存放了复合文件的一些整体信息,结构如下:
偏移量(十六进制)
大小(字节)
内容
0
8
复合文件标识(d0 cf 11 e0 a1 b1 1a e1)
2C
4
大块映象图的大小(块数)
30
4
目录链根的开始块序号
3C
4
小块映象图的开始块序号
4C
不确定
大块映象图使用的块的列表


在512字节的数据块基础上,复合文件中包括了两种最基本的结构:
第一种是由512字节的大块连接起来的大块链,如果对以文件分配表([wiki]FAT[/wiki])为基础的文件系统熟悉的话,可以很容易的理解大块链的概念,只要知道一个大块链的开始块的序号,通过大块映象图,就可以找到这一条大块链的所有内容。一个典型的大块映象图如下:
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字节的数据结构使用小块链来表示,小块链的组成和寻址方法和大块链非常类似,唯一不同的是,小块链里面对小块的寻址不是在整个复合文件范围内的,而是在某一个特定的大块链范围内的,这个大块链的开始块序号在后面叙述。
 
   

该用户从未签到

29

主题

1092

回帖

1万

积分

[INTOHARD]工兵

Rank: 1

积分
17691
QQ
 楼主| 发表于 2007-11-17 21:31:40 | 显示全部楼层
目录链,目录链是复合文件最基本的数据链,描述了复合文件的目录结构信息。目录链的开始在头块中可以找到。目录链中包括了复合文件的目录信息,每一个目录项的大小是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:一些数据表
——CompObj:通用的对象
——ObjectPool:对象池,是一个目录,包括WORD文件中嵌入的图像、声音或者其他对象
——WordDocument:实际的文字和格式化信息就存放在这里
——SummaryInforamtion:摘要信息
——DocumentSummaryInformation:其他的摘要信息

 

  这篇关于复合文档二进制结构的内容可能很多朋友在《数据恢复高级技术》中看到,但有两个问题(红色文字部分,我觉得有点问题)讨论一下:

1、文中分析的是一个大块链是:0-5-7-9-0B,但我从大块映象图中分析好像有以下几个大块链,没有他说的那个大块链:① 0 ② 1-5  ③ 2  ④ 3-4-6-7-8-9-0A-0B。  

2、在目录项结构的说明表中描述目录项的类型1是一个存储(文件),2是目录,3是根”,但我在《复合文档文件格式研究》(这个文档在3楼上传)中发现不一样(见下图),我的理解是:1是目录,2是文件,5是根目录

目录项的类型.JPG


[ 本帖最后由 tclrz100e 于 2007-11-18 20:35 编辑 ]

该用户从未签到

29

主题

1092

回帖

1万

积分

[INTOHARD]工兵

Rank: 1

积分
17691
QQ
 楼主| 发表于 2007-11-17 21:32:38 | 显示全部楼层
这是我看完Agstick写的《复合文档文件格式研究》后对复合文档文件头的主要[wiki]字节[/wiki]的含义做的一个注解,以便以后做OFFICE文档的[wiki]数据恢复[/wiki]时方便查阅用,由于个人的理解能力有限,而且我不是科班出身,只是一个数据恢复爱好者,所以希望把它做得更完善,请各位行家指正。
复合文档头说明.JPG
复合文档文件格式研究.rar (246.08 KB, 下载次数: 2112)

[ 本帖最后由 tclrz100e 于 2007-11-18 10:08 编辑 ]

该用户从未签到

29

主题

1092

回帖

1万

积分

[INTOHARD]工兵

Rank: 1

积分
17691
QQ
 楼主| 发表于 2007-11-17 21:33:54 | 显示全部楼层
便于大家理解复合文档的文件结构(说实话,我花了一个星期的业余时间才基本上读懂它),我作了一个复合文档与FAT文件系统术语的对比的图:
术语比较.JPG

说明:两篇文章中的术语有些不同,我做的图主要是根据《复合文档文件格式研究》中的术语描述的。

问题:文章中关于目录中的红黑树相关的知识(左节点和右节点)我还没有理解,有知道的朋友能不能解释一下,谢谢!!(这个问题目前已解决!!)

体会:一个OFFICE文档,如果仅仅是文件头破坏,可以通过手工恢复文件头(就像手工修复DBR一样)来对文档进行恢复(我曾做实验论证过),但如果除了文件头外的数据破坏了,好像不能恢复。这个结论不知对不对?(现在感觉到这个结论不完全正确,好像其它数据破坏了,也可以修复,有时可能不能完全修复,但这个技术我还没有学会,我的一个朋友现在掌握了这个技术,而且写了一个修复WORD和EXCEL文档的商业软件,不久后可能要发布的!!)


[ 本帖最后由 tclrz100e 于 2008-5-16 23:31 编辑 ]

该用户从未签到

132

主题

1250

回帖

5851

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
5851
发表于 2007-11-17 21:42:49 | 显示全部楼层
非常好,谢了,希望能多多为大家(38: (38: (38:

该用户从未签到

1

主题

113

回帖

102

积分

[INTOHARD]班长

Rank: 2

积分
102
QQ
发表于 2007-11-17 22:01:42 | 显示全部楼层
看到最后要钱的[s:15]

该用户从未签到

29

主题

1092

回帖

1万

积分

[INTOHARD]工兵

Rank: 1

积分
17691
QQ
 楼主| 发表于 2007-11-18 10:20:05 | 显示全部楼层


我要的答案现在找到了,所以现在免费了!为了不浪费本网站的资源,我把这个文档以附件的形式上传,如果不想下载可以在这儿直接看:http://club.excelhome.net/dispbbs.asp?boardid=2&id=227502

该用户从未签到

0

主题

5

回帖

20

积分

[INTOHARD]工兵

Rank: 1

积分
20
发表于 2007-11-18 23:09:59 | 显示全部楼层
不错不错,感谢楼主分享经验,顶了。

该用户从未签到

3

主题

129

回帖

103

积分

[INTOHARD]班长

Rank: 2

积分
103
发表于 2007-11-19 01:35:00 | 显示全部楼层
过来凑凑热闹,不知能否看得懂,还是谢过楼主,支持继续发好贴!

该用户从未签到

63

主题

338

回帖

3623

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
3623
发表于 2007-11-19 12:05:49 | 显示全部楼层
2.JPG
不知道这两者有什么关系?请指教!
1.JPG
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表