本文目的:理清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

office文档格式简要介绍相关推荐

  1. 前端实现pdf,word,doc等Office文档格式在线预览

    在做一些后台管理或者h5页面的时候 通常会遇到Office文档格式的在线预览功能.虽然看似简单,里面却隐藏着很大的坑.简单是因为现在有各种插件可以下载实现,坑是因为涉及到一些兼容性和安全性等各种千奇百 ...

  2. 恶意Office文档解析——1. Office文档格式解析

    写在前面:这是我最近在做的一个小课题,按照研究进度不定期更新.主要是学习前人的研究思路,自己开发的内容会比较少. 复合文档的概念 复合文档不仅包含文本,而且包括图形.电子数据表格.声音.视频等其他信息 ...

  3. Android实现在线预览office文档(Word,Pdf,excel,PPT.txt等格式)

    1.概述 我们都知道,Android原生并没有提供浏览office文档格式的相关Api,在安卓端想要实现在线预览office文档的功能显然很是复杂,我们手机安装QQ浏览器时,在手机打开office文档 ...

  4. Office 文档解析 文档格式和协议

    本文讨论的 Office 文档指的是 Office 2007 及以后的 PPTX 和 xlsx 等格式的文件.在 Office 2007 之前使用的不公开标准的二进制格式定义.在 Office 200 ...

  5. NTKO OFFICE文档控件

    目录 前言 什么是ntko 准备工作 实战演练 总结 一.前言 Web开发中经常需要用到在线处理office文档的功能,现在市面上有一些常用的Web页面调用显示Office的控件技术,用起来很方便. ...

  6. html document怎么转换成word,Doxillion Document Converter – 将 DOC、DOCX、PDF、WPS、Word、HTML文档格式互相转换...

    在办公领域经常会遇到各种各样的文件格式,因此常常有DOC.DOCX.PDF.WPS.Word.HTML 等各种不同格式的文档互相转换的需求.虽然网上有很多在线转换网站或 文档格式转换软件,不过今天推荐 ...

  7. Office Open XML 文档格式

    Office Open XML文档格式的详细说明以及规格是在2006年欧洲计算机制造商协会批准的一项标准, 编号是Ecma376, 到发稿时为止已经通过了ISO国际标准化组织的评审成为了一项国际标准I ...

  8. office 里的链接如何显示成图片_微软Office文档 | Office小程序介绍(一)

    微软中国Office 365 for WeChat团队开发了四款好用方便的小程序--「微软Office文档」「微软听听文档」「微软AI识图」「微软海报」.它们的受众已经十分庞大,但相信仍旧有不少人与其 ...

  9. [Office 2010 易宝典]怎样直接将Office文档保存为PDF格式?

    大致内容 如何将Office文档保存问PDF格式: 通过菜单点击的方式把Microsoft Word文档另存为PDF文档. 操作步骤 1.点击"文件"菜单. 2.点击"另 ...

最新文章

  1. 2020年财富金字塔出炉,你距离高净值还有多远?
  2. CG CTF WEB /x00
  3. C语言两班平均成绩,用C语言编程平均分数
  4. MainActivity向子Fragment传值
  5. DotNetCore跨平台~配置文件与配置代码如何共存
  6. golang 读取本机唯一码_UDI医疗器械唯一标识系统,您身边的UDI专家
  7. PLSQL_案例优化系列_明白索引是如何让SQL运行飞快(案例5)
  8. hdu5354 Bipartite Graph
  9. 华信mysql数据恢复_华信Mysql数据库修复工具1.0
  10. Oracle 学习之RMAN(四)增量备份
  11. ios移动端 FullScreen
  12. c语言的二维数组的指针访问,用指针访问二维数组
  13. mysql mpm_部署zabbix监控mysql (三) MPM插件介绍和部署
  14. 幼儿园调查过程怎么写_幼儿园家长的调查问卷话术
  15. Centos6.3 安装rhythmbox播放器
  16. 一文看完计算机基础知识总结
  17. Cisco IPCC概述
  18. JavaScript进阶(二)
  19. 文件改日期 电梯卡dump_小区的电梯卡,PM3把卡信息读取出来了,看了下。不知道怎么修改。请教大神。如何修改时间。谢谢...
  20. mysql 鼠标右键无法使用_笔记本电脑鼠标右键无反应怎么办

热门文章

  1. 知识:遥远的月球,怎么会引起地球上得潮汐呢
  2. 《交互媒体专题设计》之疫情模拟 设计文档
  3. 中国大学MOOC第六周作业孔融分梨
  4. saltstack高级状态的使用、top file的使用、数据系统grains和pillar的使用
  5. Unity Shader 阴影系列(2)--内置阴影源码解析
  6. 获取拼多多流量?商家必看
  7. 亚伟计算机速录测试软件,亚伟中文速录软件
  8. 协众技术移动端UI设计分这四种
  9. valueOf()方法详解
  10. 【产品】可视化大屏设计思路