office文档格式简要介绍

本文目的:理清office文档格式,学习何为OLE。

一、OpenXML (OOXML)

     OpenXML(OOXML) 是微软在Office 2007中提出的一种新的文档格式,Office 2007中的Word、Excel、PowerPoint默认均采用OpenXML格式。OpenXML在2006年12月成为了ECMA规范的一部分,编号为ECMA376;并于2008年通过国际标准化组织的表决,并于两个月后公布为ISO/IEC 29500国际标准。

二、OLE(Object Linking and Embedding) 

     Office 97-2003的存储规范:OLE(Object Linking and Embedding,对象连接与嵌入),是一种面向对象的技术,利用这种技术可开发重复使用的软件组件(COM)。OLE是Windows的一组服务功能,提供了一种以源于不同应用软件的信息建立复合文档的强有力方法。在对象连接和嵌入系统中,对象可以是几乎所有的数据类型,例如文字、点阵图像和矢量图形,甚至于声音、注解和录像剪辑等均可。对象被赋予了只能属性,即参与连接和嵌入的对象本身带有计算机指令。目前,OLE有两种版本:OLE1.0和OLE2.0。

三、Docx(Open XML)

     Docx这种新的Word格式有三个主要的组成部分:部件、内容类型和关系。

     部件

     部件就是对应于office文档解压后的一个个文件。这些文件都是包中的文档部件。

     Word2007的文档部件大致有以下几种: 

在word中,使用单独的文件(xml)来表示文档中的每个部分以及附加的内容。他们需要依赖于各部件之间的正确关系保证文件的完整和有效性,如果可以准确保持部件之间的关系,那么文件结构可以任意更改。

以docx文档为例,说明openxml文档内容的结构。新建一个docx文档(需随便输些内容,不然没法儿解析),docx和docm文件实际上都是压缩文件,使用zip解压到文件夹中,它的目录结构如下:

事实上,在word2007及以上的版本当中,一个文档则是由一个文件夹(或者说容器),由内部的部件各自定义属性和数据,并相互依赖而产生的。一个文档可能会包含这些目录和组件:

[Content_Types].xml

这个文件描述的是整个文档内容的类型,把各个xml文件组合成一个整体。

docProps文件夹

这个文件夹中的xml记录了docx文档的主要属性信息,

app.xml:描述文档的其它属性,文档类型,版本,只读信息,共享,安全属性等特定的文件属性;

core.xml:描述文件的创建时间,标题,主题和作者等给与openxml约定文档格式的通用文件属性。

rels文件夹

这个文件夹存放了所有指定的rels文件。

rels文件

这些文件描述了文档结构中的其实关系,可以叫做关系部件。

item1.xml

包含了一些文档中出现的数据。例如自定义XML数据部件。

内容类型

每个文档部件都有一个特定的内容类型。一个部件的内容类型描述了这种文件类型的内容。例如,XML部件包含了WordXML格式定义的标记,而内容类型可以用来分析文档的组成。

典型的内容类型是以word application开头,然后是厂商的名称。在内容类型中,word verder被简写为vnd。所有内容类型都被指定为以application/vnd.ms-word开头。如果内容类型是一个XML文件,那么它的URL将以xml结尾。其它的非XML内容的类型,例如图片,则没有这种结尾。下面是一些典型的内容类型:

1.application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes + xml

它是一个描述Word文档中的尾注文档部件的内容类型。其中,+xml 表示它是一个XML文件。

2.application/vnd.openxmlformats-package.core-properties+xml

它是一个描述核心文档属性部件的内容类型。其中,+xml表示它是一个XML文件。

3.image/png

图片的内容类型。其中没有+xml部分,表示内容类型不是XML文件。

部件关系

部件关系文档记录了文档部件之间的逻辑连接,比如根文档部件拥有一个http://schemas.openxmlformats.org/package/2006/relationships/header类型到application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml

内容类型部件的关系。这表示部件之间的关系是,目标部件是源部件的页眉。而这个页眉部件可能也有自己的关系。在包中,可以通过rels目录中的.rels文件进行关系定位。

Doc文档结构

Word 97-03的后缀是doc,doc文件本身是一个OLE类型文件。OLE(Object Linking and Embedding)文件主要由storages(仓库)和streams(流)组成,而ole本身其实是一种面向对象的技术,该技术允许程序之间链接和嵌入对象数据,建立复合文档。

【知识扩充:仓库与流】

       复合文档的原理就像一个文件系统(文件系统:如FAT与NTFS)。复合文档将数据分成许多流(Streams),这些流又存储在不同的仓库(Storages)里。将复合文档想象成你的D盘,D盘用的是NTFS(NT File System)格式,流就相当于D盘里的文件,仓库就相当于D盘里的文件夹。

       流和仓库的命名规则与文件系统相似,同一个仓库下的流及仓库不能重名,不同仓库下可以有同名的流。每个复合文档都有一个根仓库(root stroge)。

rtf文档结构

富文本格式(Rtf,rich text tormat)是微软的文本和图像信息交换指定的格式。Rtf文件可以划分为文件头和文档区两个部分组成。文件头和文档区由文本、控制字和控制符组成,同时利用{…}来表明层级关系。

Rtf文件内容 控制字   解释

文件头          rtfN          版本号

                     fonttbl      字体表

                     filetbl        文件表

                     listtable     便目表

文档区          info            信息组

                     pict             图片

                     object         对象

                     sv               绘图对象值

                     sn               绘图对象名称

                     objupdate   自动更新机制

(objupdate很重要,攻击样本中经常使用,确保OLE对象自动加载、更新)

三、关于doc、docx、docm

准备

1.工具:offvis(如下) + 010editor

链接: https://pan.baidu.com/s/1ivh3VgkkIn3oUnpUP-7C8Q 提取码: e6u2

2.doc、docx、docm文档

【小菜提醒】如何建立这三种文档?

注:要在文档中输入些许内容,不然后边没法儿解析。

新建一个word文档:点击【文件】——>【另存为】——>保存类型中可以选择文档类型:

现在才知道原来文件是这样来的!!不过文档建成功的那一瞬间好开心 ,享受从0到无穷的过程吧 ^~^ ~~~ 

关于doc、docx、docm

1.doc是一种普通的OLE文件(复合文件),可以包含宏代码,而.docx和.docm文件,实际上都是压缩文件。二进制文件头数据截取如下

》》Office 2007之前的版本可以看作二进制文件。其中十六进制文件头为 D0 CF 11 E0 A1 B1 1A E1,这是固定的 OLESS 文档格式文件头。

.doc文件本身是一个OLE类型的文件,使用工具offvis打开doc文件,可以解析出OLE数据格式。

》》Office 2007之后的样本,文件头为PK,是zip算法的发明者Phil Katz名字的缩写。Office 2007之后的文档本质上是一个压缩包。由于文档中包含ooxml文件,因此不能用offvis进行解析,按下offvis的Parser按钮确实无法解析文件,这类文档可以通过解析出.xml和.rels来获取内容和逻辑关系。

 

四、开始解析OLE文件数据格式

用offivis打开doc文件,可以看到清晰的文件结构。

烦移步学习,OLE详细分析:https://blog.csdn.net/Cody_Ren/article/details/103886098

参考:

https://www.anquanke.com/post/id/175548

https://blog.csdn.net/Cody_Ren/article/details/103886098

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值