Office文档修复介绍之:laola文件格式介绍

Office文档是目前应用最广泛的文档格式,但很多人都没有为office文件建立完善的安全防护措施,也没有养成进行文件备份的良好习惯,所以一旦出现操作失误、病毒破坏、系统故障等情况,就有可能造成当前正在编辑的word、excel文档和access数据库等受到损坏,下次无法打开。那么一旦遇到这类文档被破坏或者丢失我们是否就束手无策了呢,当然不是,我们可以借助专业知识和小工具进行受损文档修复。

未公开的office文档存储格式秘密

Office文档格式一直以来都是微软公司的技术机密,至今未曾向外界公布。那么我们现在要做的是修复受损的文档,如果真的对office文件数据结构一无所知的话那么最终也只能止步于“傻瓜式”的文档修复工具水平。想要提高自己的文档修复水平,在最大程度上挽救丢失的数据,那就必须对office文档二进制格式有所了解,下面我们以word文档为例子,给大家介绍word文件内部结构和office文档格式的部分秘密。为什么说是部分呢,因为全部的office文档格式可能只有微软自己才知道了。

Laola的文件格式

Laola文件格式是微软复合文档结构的二进制格式。按照微软的命名来说,这种文档结构应该叫做“复合文档二进制结构(Compound File Binary Format)”。但微软官方并没有公开关于这种文档结构的相关内容,大量***通过对word、Excel文件的逆向分析以及办公软件的跟踪,基本上破解了“复合文档二进制结构”的组成和算法。但这些并不是微软的官方文档,有存在差异的可能性,并且微软有权随时改变这一算法结构,因此人们有必要使用另外的名称“laola”来描述这一结构。

复合文档的起源

国内最早分析“复合文档二进制结构”的是反宏病毒技术人员,但国际上在宏病毒没出现前针对微软复合文档二进制结构的分析就已经开始了。进行这种分析的根本目的是为了在其他操作系统下(这里主要指的是linux和其他开源操作系统下)能够开发出可读写微软办公软件使用的文档。
“复合文档”是微软引入的一种在文件内部存放结构化信息的方法。例如:我们写一篇文章,如果这篇文章没有任何格式信息和嵌入图像,那么使用没有任何结构的文本格式就可以了,但是一篇完善的文章里可能包含段落、格式、字体、颜色、插图等,这样简单的无格式文本就无法满足需要了。所以需要在文件的内部存放很多结构,包括段落的文字、字体、甚至段落本身信息等。针对这种需求、以及电子数据表、演示制作等软件的需要,微软开发了一种“文件中的文件系统”,也就是“复合文档”结构。

复合文档结构介绍

在复合文档中,可以有很多目录,在每个目录下可以有子目录,目录和子目录包含了“存储”,一个存储相当于磁盘上的一个文件,整个复合文档就形成了一个类似于磁盘上的目录和文件所组成的树状结构。如果在视窗环境下使用复合路径,可以利用操作系统提供的功能对复合文件进行读写。
与硬盘划分扇区的方法类似,所有使用laola文件格式的文件由512 B的数据块组成(有兴趣的可以验证一下,所有的word、excel或其他office文件大小都是512B的倍数),数据块的序号从-1开始,如下图所示。

序号为-1的块是整个文件的文件头块,存放了复合文件的一些整体信息,结构见下图:

在512 B的数据块基础上,复合文件中包括了两种最基本的结构:
第一种是由512 B的大块连接起来的大块链。如果对以文件分配表“FAT”为基础的文件系统熟悉的话,可以很容易的理解大块链的概念,只要知道一个大块链的开始块序号,通过大块映像图就可以找到这一条大块链的所有内容。一个典型的大块映像图如下图所示:

从图中可以看到,如果一个大块链的开始序号是0的话(该处的内容是5),那么这个大块链包括:序号为0的数据块、序号为5的数据块(该处的内容是7)、序号为7的数据块(该处的内容是9)、序号为9的数据块(该处的内容是0b)、序号为0b的数据块(该处的内容是-1,表示这是该链的最后一个数据块)。
对于比较小的结构,如果以512 B为单位的话会造成比较大的空间浪费,所以专门使用一个大块链来存放比较小的数据块,小于4096 B的数据结构使用小块链来表示,小块链的组成和寻址方式和大块链非常类似,唯一不同的是小块链里面对小块的寻址不是在整个复合文件范围内的,而是在某一个特定的大块链范围内,这个大块链的开始块序号会在以后的更新中叙述。
目录链:是复合文件最基本的数据链,描述了复合文件的目录结构信息。目录链的开始在头块中可以找到。目录链中包括了复合文件的目录信息,每一个目录项的大小是128 B,所以 目录链的一个块可以包括4个目录项,第一个目录项是根目录项,名字叫“根入口(Root Entry)”,任何复合文件里这都是第一个目录项。一个典型的根目录项如下图所示:

下面是目录项的结构说明:

由于上面的数据结构并不是来源于微软的官方文档,其中包含了很多猜测的成分,所以很多内容暂时无法判断其意义,有些结构说明可能与微软原意不同,不过我们利用这个结构对微软的大量文档进行分析,至今尚未发现有明显错误。
在基本的laola文件结构基础上,字处理文档、电子数据表文档具有不同的内部目录结构,下面介绍一个典型word文件内部目录结构
a.doc
—1 Table:一些数据表
—CompObj:通用的对象
—ObjectPool:对象池,是一个目录,包括word文档中嵌入的图像、声音或者其他对象
—WordDocument:实际的文字和格式化信息就存放在这里
—SummaryInformation:摘要信息
—DocumentSummaryInformation:其他的摘要信息

原文地址:https://blog.51cto.com/sun510/2458875

时间: 2024-07-30 23:57:27

Office文档修复介绍之:laola文件格式介绍的相关文章

基于MVC+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览

在很多文章里面,曾经有一些介绍Office文档预览查看操作的,有些通过转为PDF进行查看,有些通过把它转换为Flash进行查看,但是过程都是曲线救国,真正能够简洁方便的实现Office文档的预览的还是比较少,这里的Office文档包括了Word.Excel.PPT文档.本文介绍两种方式,一种方式是通过在线预览的方式,利用微软的平台进行Office文档的在线查看:一种是把Office文档生成HTML文件后进行查看.然后对比他们的优缺点,并进行总结. 1.利用微软的平台进行Office文档的在线查看

基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览

在博客园很多文章里面,曾经有一些介绍Office文档预览查看操作的,有些通过转为PDF进行查看,有些通过把它转换为Flash进行查看,但是过程都是曲线救国,真正能够简洁方便的实现Office文档的预览的还是比较少,这里的Office文档包括了Word.Excel.PPT文档.本文介绍两种方式,一种方式是通过在线预览的方式,利用微软的平台进行Office文档的在线查看:一种是把Office文档生成HTML文件后进行查看.然后对比他们的优缺点,并进行总结. 1.利用微软的平台进行Office文档的在

C# winform 使用DsoFramer 创建 显示office 文档

使用微软DsoFramer 组件创建,显示office 1. DsoFramer  组件的介绍 dsoframer是微软提供一款开源的用于在线编辑.调用Word. Excel .PowerPoint等的ActiveX控件.国内很多著名的OA中间件, 电子印章,签名留痕等大多数是依此改进而来的. 2. C# winform 或者web 显示 开发的方式下载 DsoFramer 下载的界面如下: 使用就是这以上的两个dll 代码: public partial class Form1 : Form 

Java实现web在线预览office文档与pdf文档实例

https://yq.aliyun.com/ziliao/1768?spm=5176.8246799.blogcont.24.1PxYoX 摘要: 本文讲的是Java实现web在线预览office文档与pdf文档实例, 1.首先我们需要找到可以把office转换成pdf的方法,查找资料发现有openoffice这一软件可以把office转换成pdf,这一软件先下载下来,然后记住自己安装的在那个位置.然后在cmd环境下进入安装目录的program目 云计算 云服务器ECS 大数据 建站 备案 文档

java读取pdf和MS Office文档

有时候PDF中的文字无法复制,这可能是因为PDF文件加密了,不过使用PDFBox开源软件就可以把它读出来. 还有一个用于创建PDF文件的项目----iText. PDFBox下面有两个子项目:FontBox是一个处理PDF字体的java类库:JempBox是一个处理XMP元数据的java类库. 一个简单示例: 要引入pdfbox-app-1.6.0.jar这个包. package pdf; import java.io.File;import java.net.MalformedURLExcep

java将office文档pdf文档转换成swf文件在线预览

java将office文档pdf文档转换成swf文件在线预览 第一步,安装openoffice.org   openoffice.org是一套sun的开源office办公套件,能在widows,linux,solaris等操作系统上执行. 主要模块有writer(文本文档),impress(演示文稿),Calc(电子表格),Draw(绘图),Math(公式),base(数据库) 笔者下载的是openoffice.org 3.3.0.下载完直接安装即可.      但是,我们还需要启动openof

office文档在线预览 (doc、docx、ppt、pptx、xls、xlsx)

要想实现office文档在线预览,可以使用红樱枫软件公司开发的数据格式转换软件HTML Filter,该产品可以以程序库的形式提供给用户,提供各种程序接口,如:C/C++.Java..Net等接口,供用户将软件镶嵌在自己的系统中.通过调用本产品的提供的API功能接口,实现MS Office系列文档到HTML的快速转换.本产品在国内外得到了广泛的应用,在国内有腾讯.搜狐等多家知名企业使用本产品.对多种文档进行统一管理,编辑,检索和浏览.用户可以使用本产品,十分便利的将office文档Word,Ex

AOPR快速破解Office文档密码的三个技巧

Advanced Office Password Recovery是一款专业的Office密码破解工具,AOPR软件并不复杂但是可以在极短的时间内轻松破解Excel2013或者Word2016的密码.本文将具体介绍几个在使用Advanced Office Password Recovery破解Office文档密码的技巧.  Advanced Office Password Recovery密码破解工具 技巧一:估计Office文档密码特点 为了尽可能缩短Advanced Office Passw

Office文档格式如何与PDF格式互转

Office文档格式与PDF互转是很多朋友比较关心的问题,特别是将Word的DOC文档转成PDF文档,或者把PDF转换成Word文档用的最为广泛.或许大家并不知道,除了PDF与Word文档相互转换外,PDF文档还可以转成其它一些文件格式,大家一起来瞧瞧吧. PDF文档之间的转换: 迅捷PDF转换器是一个PDF转Word的工具,支持PDF转换成Word.Excel.图片.HTML等等,并且还带有PDF切割.PDF合并.PDF解密.PDF压缩.PDF图片获取等功能.不但转换速度非常快,转换出来的效果