恶意Office文档解析——1. Office文档格式解析
写在前面:这是我最近在做的一个小课题,按照研究进度不定期更新。主要是学习前人的研究思路,自己开发的内容会比较少。
- 复合文档的概念
复合文档不仅包含文本,而且包括图形、电子数据表格、声音、视频等其他信息。使用面向对象技术,将非标准信息(如图像、声音)作为独立的、自包含式对象包含在文档中。
符合文档将数据分成许多流(Steams),流存储在不同的Storages里。符合文档采用NTFS(NT File System)格式。
流又分成更小的数据扇区(sectors)。数据扇区可能包含控制数据或用户数据。整个文件由一个头结构(Header)结构以及Sectors组成,头结构确定了Sectors的大小,每个Sector的大小相同。 - Office文档格式
Office文档官方说明
Office文档主要基于三种格式:ole、xml、ooxml。ooxml以xml为基础,可以理解为zip文件。
doc、xls、ppt三种扩展名文档属于97-2003版Office,可解析出ole格式文件。
docm、xlsm、pptm是启用宏的Office文档,存储Visual Basic Applications(VBA)宏代码,可解析出xml文件。
docx、xlsx、pptx三种扩展名文档可解析出xml文件。 - Office文档解析
Office文档解析可用Microsoft官方解析可视化工具Offvis来进行。下载Offvis并安装。Offvis下载
可以看到Office被解析成二进制格式。
导航窗格显示原始文件内容,每行均显示当前偏移量、一个十六进制数字链,及其文本表示形式(如果有)。结果窗格显示包含当前数据结构的名称、值、偏移位置、大小和类型的分析结果。下面的屏幕截图显示可视化工具中包含"Hello, world"文本的 .doc 文件的一部分。其中选择了字母"w"。这会导致可视化工具突出显示相应的十六进制数字和数据结构。
将解析后的代码段另存为.zip格式,可以得到一个压缩文件夹,打开文件夹,可以看到文档的内容被存储在不同的文件里。
这里涉及到一个新名词:OPC-Open Package Convention开放打包协定,是一种基于zip+xml定义的文件存储格式。
docm文件进行如上操作后得到的压缩文件夹如下图:
这里面要理解三个概念:Part、Relationship、ContentTypes。
zip中的每个文件都是一个part,可以是任何格式,比如图片、xml等。
Relationship是一种特殊的Part,它描述了各个Part之间的依赖关系,存储在_rels文件夹中,存储为rels文件。
ContentTypes在zip压缩包的根目录下,文件名为Content_Types.xml,它记录了OPC文件中除了他自己以外的所有文件的类型。
word文件夹存储文档的主体部分,打开word文件下可看到以下文件:
Office文档2007前后的版本格式不同。Office 2007之前的版本格式为OLE文件,在此基础上Office 2007之后的版本加入了XML文件格式。这种新的文件格式称为Office Open XML,文档结构更为清晰。
Office
2007之前的版本可以看作二进制文件。用Microsoft的Offvis十六进制编辑器可以打开示例文件,清楚地观察到OLE文档结构。其中十六进制文件头为D0 CF 11 E0 A1 B1 1A E1,这是固定的OLESS文档格式文件头。
Office
2007之后的样本,用Offvis十六进制编辑器打开后,可以发现文件头为PK。这代表着ZIP算法的发明者Phil Katz。Office
2007之后的文档本质上是一个压缩包。由于文档中包含ooxml文件,因此不能用offvis进行解析。这类文档可以通过解析出.xml和.rels来获取内容和逻辑关系。
以pptx文件为例。.pptx文件是包含许多“部件”(通常为UTF-8或UTF-16编码)或XML文件的zip文件(包)。该包还可能包含其他媒体文件,如图像。该结构根据OOXML标准ECMA-376第2部分中概述的开放式包装惯例进行组织。位于Microsoft Powerpoint文件的ppt文件夹中,内部的文件数量和类型将根据演示文稿中的内容而有所不同,但总会有[Content_Types]
.xml,一个或多个关系(.rels)部件和ppt演示部件(presentation.xml)。通常,还将存在至少一页幻灯片文件,以及幻灯片主页文件和做幻灯片的幻灯片格式文件。
每个PK包都必须有一个[Content_Types] .xml,在包的根目录中找到。此文件包含包中所有部件的内容类型的列表,每个部分及其类型必须列在[Content_Types] .xml中。
每个PK包都包含一个关系文件rels,用于定义其他部分与包外部资源之间的关系。这将文件之间的关系与内容分开,使得在不更改引用目标的源的情况下更改关系变得容易。对于OOXML包,_rels文件夹中始终存在关系部分(.rels),用于标识包的起始部分或包关系。例如,以下定义了演示文稿内容的起始部分的标识:
<Relationship Id=“rId1”Type =“http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument”Target =“ppt / presentation.xml”/>。
对于app.xml和core.xml,.rels中通常也存在关系。除了PK包的关系部分之外,作为一个或多个关系的源的每个部分将具有其自己的关系部分。每个这样的关系部分都在零件的_rels子文件夹中找到,并通过将“.rels”附加到零件的名称来命名。通常,主要内容部分(presentation.xml)具有自己的关系部分(presentation.xml.rels)。它将包含与内容其他部分的关系,例如slideMaster1.xml,notesMaster1.xml,handoutMaster1.xml,slide1.xml,presProps.xml,tableStyles.xml,theme1.xml,以及外部链接的URL。
PPTX文件的基本解析依据以下流程:
1)
读取 /[Content_Types].xml 文件,获取到所有文件的类型;需要了解
OPC 中关于 ContentTypes 的内容。
2)
读取 /_rels/.rels Package Relationship 文件,获取 presentation.xml 文件的位置,比如 /ppt/presentation.xml;需要了解
OPC 中关于 Relationship 的内容以及 PML 的基本内容。
3)
读取 /ppt/presentation.xml 文件以及其关联的
Relationship 文件 /ppt/_rels/presentation.xml.rels,得到该PPT所有页面文件的存储位置,比如 /ppt/slides/slide1.xml,以及
slideMaster(母版)文件的存储位置,比如 /ppt/slideMasters/slideMaster1.xml,以及
slideLayout(板式)等相关文件的存储位置;需要了解 PML 中关于
Presentation 的定义,也就是 PML 的 XSD 中定义的 CT_Presentation 类型。
4)
读取 /ppt/slides/slide1.xml 文件内容以及其关联的
Relationship/ppt/slides/_rels/slide1.xml.rels,可以得到该页面的所有元素信息;
恶意Office文档解析——1. Office文档格式解析相关推荐
- Office 2003 打开RMS权限保护文档时出错
公司内装了RMS服务器,12月11日突然出现问题,Office 2003 打开RMS权限保护文档时出错,截屏如下图. 网上找不到相关文献,开始以为是RMS服务问题,重装RMS服务器问题依旧,百思不得其 ...
- java计算机毕业设计计算机office课程平台MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计计算机office课程平台MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计计算机office课程平台MyBatis+系统+LW文档+源码+调试部署 本源码技 ...
- 文档管理服务器 office,文档管理控件WebOffice的产品架构原理——一张图就能解释...
WebOffice是流行于国内市场的文档管理控件.20多年来,经华尔太科技研发团队不断迭代升级,WebOffice已更新至2019版本,最新版永久突破谷歌Chrome.火狐FireFox.EDGE等浏 ...
- Office Online Server 在线编辑Office文档,安装部署
一.Office Online Server介绍 Office Online Server是 Office Web Apps Server 的升级版本,安装环境必须为两台Windows Server ...
- 电脑安装了WPS之后,文档无法用原来的office打开,右键新建的文档是wps类型的而不是office类型的解决方案
前言:因为我身边很多小伙伴都遇到自己的电脑已经安装了office,之后又安装了WPS,安装了WPS之后,每次打开文档都是默认用WPS打开,有时想右键新建一个office的文档,但是建立的都是WPS文档 ...
- Python 技术篇-利用Office VBA实现word文档转化为pdf文档实例演示
# -*- coding: UTF8 -*- from win32com.client import *def switch_pdf(path, name):'''作用:将word文档转化为pdf文档 ...
- freemarker生成word文档无法用office打开问题
错误原因: 利用freemarker生成的word文档利用notepad打开是xml格式.而正常的文档格式利用notepad打开是乱码,需要转换. 代码案例: import com.aspose.wo ...
- freemarker导出word文档——WordXML格式解析
前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...
- php解析word,获得文档中的图片
背景 前段时间在写一个功能:用原生php将获得word中的内容并导入到网站系统中.因为文档中存在公式,图片,表格等,因此写的比较麻烦. 思路 大体思路是先将word中格式为doc的文档转化为docx, ...
最新文章
- 如何通过代码连接SQL Server数据库
- 实现两个pawn的切换
- 使用maxwell实时同步mysql数据到kafka
- 使用find命令查找文件
- 全网史上最全IT,人工智能,网页开发资料免费送;新时代人人都需要的资料,不看后悔
- python跟谁学_学 Python 都用来干嘛的?
- arp 原理及查杀方式
- 【洛谷习题】又是毕业季II
- SOCKET编程详解
- (首个填坑)联想拯救者Y7000(自带win10 home) 安装Ubuntu16.04.6 + NVIDIA GTX1650驱动
- 最全的Windows进程详解!
- 2020年日历电子版(打印版)_2020年日历全年表黄历-2020年日历打印版下载 A4横版带农历--pc6下载站...
- react-native系列(24)API篇:屏幕宽高和屏幕像素密度
- Tracup|拒绝低效办公,8个Tips让你芜湖起飞,工作效率MAX
- 2020-03-10
- JS实现文档下载兼容谷歌、火狐、IE
- [681]小米手机安装charles证书,提示“没有可安装的证书”
- C#模仿腾讯QQ源码下载(附效果图)_张童瑶的博客
- C语言谁是凶手-思路详解
- win8(四)实例讲解win8(XAML+C#)开发--------课程表:Snapped模式和动态磁贴,徽章(badge)
热门文章
- webpack 打包(初学打包运行)
- 张平安:加快云上数字创新,共建产业智慧生态
- 本周热榜 · 《计算机自学指南》
- 电脑常识:中文模式和英文模式下的符号有何区别?有何应用?
- html左加右减按钮,左加右减自变量,上加下减常数项,大部分学生并没有真正理解!...
- tar.gz文件怎么解压缩_如何解压缩tar.gz文件
- 绥化学院2021聋人高考成绩查询,2020聋人高考形势分析
- arcgis 合并名字相同的要素_ArcGIS中各种合并要素异同
- DB2读取CLOB字段-was报错:操作无效:已关闭 Lob。 ERRORCODE=-4470, SQLSTATE=null
- 黑马超级远程桌面5.6(可以批量管理1000台VPS或微软mstsc连接的实用工具)