首页 文学文摘 时政新闻 科技科普 经济法律 健康生活 管理财经 教育教学 文化艺术 社科历史

微软复合文档的数据修复技术

作者:耿浩然 来源:电子技术与软件工程

摘 要 随着科学技术和信息技术不断发展,复合文档广泛应用于我们的工作生活中,其在给我们带来便利的同时,也经常碰到文件损坏的问题,甚至造成重要数据丢失。本文以微软复合文档作为研究对象,针对其文件格式不同的损坏形式进行分析,并提出物理修复、逻辑修复、内容修复等方法,经实验验证本文提出的方法能在一定程度上有效地修复出关键数据。

【关键词】复合文档 文件格式 数据修复 存储

1 复合文档的文件格式

文件格式是指计算机中存储文件的特殊编码方式,用于计算机操作系统识别不同的文件类型,比如程序、文字、图片、视频等文件,每一种文件格式通常会关联一个或多个扩展名,但也可能不关联固定的扩展名。微软复合文档(以下简称复合文档)是微软公司制定的文件格式, 广泛应用于Word、Excel、PowerPoint等办公文档中,单一的复合文档可以包含多个文本、图形、声音、视频、电子表格数据等各种多媒体信息。

复合文档的物理结构由文件头和扇区组成,文件头就是复合文档最前面的512字节,描述了复合文档的文件签名标识、扇区大小等结构信息,是整个文档最关键的部分;复合文档的其余部分被划分为大小相等的存储空间,每一个存储空间叫做一个扇区(通常为512字节)。复合文档的扇区分配表相当于FAT32文件系统中的FAT表,用于对分配使用的所有扇区进行编号和标识;每一个数据流都可以在扇区分配表中按照顺序找到其存储位置。扇区分配表的前109个扇区编号存放在文件头中,当扇区分配表多于109个扇区,需要附加主扇区分配表存储,文件头中已经标识了主扇区分配表的第一个扇区编号和扇区总数。

复合文档的逻辑结构类似一个小型的文件系统,其由目录和数据流组成;数据流相当于文件系统中的文件,数据流存储在目录中;目录和数据流都有名字,一个目录可以有多个子目录和多个数据流,同一目录下的子目录和数据流不能重名;每个复合文档都有一个叫做“Root Entry”的根目录。每一个目录和数据流都有一个索引,这些索引存储在一个单独的流中,这个流就叫做全局索引流。全局索引流由一系列的索引节点组成。每一个索引节点表示一个目录或数据流;索引节点固定为128个字节,每个扇区可以包含4个索引结构。

当一个数据流的大小小于指定值(通常为4096字节),就叫做短流,短流具有特殊的寻址方式,所有的短流存储在一个大的数据流中,其存储空间被划分为更小的扇区(通常为64字节),由短流扇区分配表进行编号和标识。

2 复合文档的数据修复

根据复合文档的文件格式,针对其不同的损坏方式,数据修复一般分为物理修复、逻辑修复和内容修复。

2.1 物理修复

文件头修复。当复合文档的文件头损坏时,复合文档无法正常使用。文件头结构体中大多数内容比较容易修复,比如扇区大小、短流大小、标准流最小值等,比较难修复的是扇区总数、短扇区总数、目录流的首扇区编号、扇区分配表的前109个扇区编号等,单纯的文件头损坏,可以根据复合文档后面的完整部分计算并修复文件头结构体。

扇区分配表修复。扇区分配表损坏对复合文档的结构完整性破坏最大,其修复难度也是最大的。最简单的修复方法就是先判断损坏的扇区,然后将损坏的扇区修复为-1,即标识为未分配的扇区。判断依据就是扇区分配表中的扇区编号(每4个字节组成的有符号32位整数),其取值范围必须小于扇区总数,或者大于-4。

2.2 逻辑修复

逻辑修复主要针对全局索引流,根据全局索引流扇区链和索引节点的损坏可以分为两种情况。当全局索引流扇区链损坏而索引节点完整时,修复原理同上,可以扫描出所有的索引节点所在的扇区,再根据其编号构造扇区链。当索引节点损坏而全局索引流扇区链完整时,可以参照正常的复合文档修复目录,因为在所有的Word、Excel、PowerPoint文件中,这些目录的索引节点都是相对固定的;但是当索引节点是数据流时,其扇区链首扇区编号和大小是最关键的信息,直接影响修复内容的正确率,可以通过扫描扇区分配表识别所有的数据流,再根据经验尝试所有的可能性。

2.3 数据流内容修复

复合文档的数据流内容和短流内容损坏,并没有破坏复合文档结构的完整性,一般都可以正常打开,但是复合文档的内容已经破坏。以Word2003创建的Word文件为例,其中数据流“Data”中存储图片、视频等数据,数据流“1Table”中存储表格,数据流“CompObj”中存储对象数据,数据流“WordDocument”中存储文字内容,数据流“SummaryInformation”中存储Word文档的摘要信息,數据流“DocumentSummaryInformation”中存储Word文档的属性信息。“Data”数据流存储所有的图片,每个图片存储在一个图片结构体中,图片结构体的前4个字节表示结构体大小,图片结构体头部偏移d1H处,就是该图片实体文件的文件头。假如word文件中有部分图片文件损坏,可以按照这种方法导出所有的图片文件,并对损坏的图片文件进行进一步修复。

3 复合文档数据修复下一步研究方向

对于文件格式和结构化数据的研究一直都是数据修复技术的重要发展方向之一,本文在国外有关开源项目研究的基础上,对复合文档的数据修复技术进行了探讨,并利用该技术实现了复合文档的物理修复、逻辑修复和内容修复。本文的研究还处于复合文档数据修复技术研究的初步阶段,下一步的研究重点是复合文档的自动受损评估和修复机制。

参考文献

[1]https://baike.baidu.com/item/复合文档.

[2]http://sc.openoffice.org/compdocfileformat.pdf.

作者单位

徐州撷秀中学高三(3)班 江苏省徐州市 221000