0x1 PDF是什么

PDF(便携式文件格式,Portable Document Format)是由Adobe Systems在1993年用於文件交换所发展出的文件格式。

因为PDF的文件格式性质广泛用于商业办公,引起众多攻击者对其开展技术研究,在一些APT(Advanced Persistent Threat)攻击中。针对特定目标投递含有恶意代码的PDF文档,安全意识薄弱的用户只要打开PDF文档就会中招。

0x2 PDF解析工具

PdfStreamDumper : 这是一款可以对恶意的PDF文档进行分析的免费工具

以下是利用漏洞【CVE-2010-0188】的恶意PDF文档样本,文档中的Payload为异或加密。



图1

pdfid.py : 这个工具不是PDF解析器,但是它会扫描一个文件来寻找特定的PDF关键字,让我们识别包含JavaScript的PDF文件。

pdfid.py xxx.pdf



图2

0x3 PDF格式解析

使用pdfid.py解析之后会列出PDF当前的格式字段。

C:\>python pdfid.py xx.pdf

PDFiD 0.2.1 93c803.pdf

 PDF Header: %PDF-1.7
obj 60
endobj 60
stream 30
endstream 30
xref 1
trailer 1
startxref 1
/Page 3
/Encrypt 0
/ObjStm 0
/JS 0
/JavaScript 0
/AA 0
/OpenAction 0
/AcroForm 0
/JBIG2Decode 3
/RichMedia 0
/Launch 0
/EmbeddedFile 0
/XFA 0
/Colors > 2^24 0

每一个PDF文件都包含有前7个字段,也有可能不包含strea和endstream。据说有一些ODF文件没有xref或则trailer,但是这种情况比较少见。如果一个PDF文件没有xref或者trailer关键字段,那么可以确定它不是恶意的PDF文件。

/xref 交叉引用表,描述每个间接对象的编号、版本和绝对的文件位置。PDF文档中的第一个索引必须从版本65535的0号对象开始,标识符/xref后面的第一个数字是第一个间接对象(即0号对象)的编号,第二个数字是/xref(交叉引用表)的大小。

/Page指明PDF文件的页数,大多数恶意PDF文件仅仅只有一页

/Encrypt指明PDF文件有数字水印或者是被加密过的。

/ObjStm是object streams的数量。object streams是一个可以包含其他Object对象的数据流对象。

/JS与/JavaScript指明PDF文件中含嵌有JavaScript代码。通常恶意的PDF文件都嵌套有JavaScript代码,这里一般都是利用JavaScript的解析漏洞或者使用JavaScript来实现堆喷射(heap spray),也有很多正常的PDF文件里会含有JavaScript代码

/AA、/OpenAction和/AcroForm指明当查看PDF文件或者PDF的某页时会有动作随其执行,几乎所有嵌有JavaScript代码的恶意PDF文件都有自动执行JavaScript代码的动作(action)。如果一个PDF文件包含有/AA或/OpenAction自动执行动作的关键字段,而且含有JavaScript代码,那么这个PDF文件就极有可能是恶意的PDF文件

/URI 如果你要在PDF文件中执行打开网页的动作就需要这个关键字段

/Filter 一般为FlateDecode则是使用了Zlib压缩解压缩算法。

/JBIG2Decode指明PDF文件使用了JBIG2压缩。虽然JBIG2压缩本身可能会有漏洞(CVE-2010-1297)。但/JBIG2Decode关键字段并不能说明PDF文件是否可疑

/RichMedia Flash文件

/Launch执行动作(action)数量

0x4 参考

PDF格式详解

http://blog.csdn.net/bobob/article/details/751381

PDF Tools

https://blog.didierstevens.com/programs/pdf-tools/

恶意PDF文件解析思路

https://wenku.baidu.com/view/0c05dd996529647d27285224.html

恶意PDF文档分析记录的更多相关文章

  1. Java实现office文档与pdf文档的在线预览功能

    最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完 ...

  2. 将w3cplus网站中的文章页面提取并导出为pdf文档

    最近在看一些关于CSS3方面的知识,主要是平时看到网页中有很多用CSS3实现的很炫的效果,所以就打算系统的学习一下.在网上找到很多的文章,但都没有一个好的整理性,比较凌乱.昨天看到w3cplus网站中 ...

  3. 常用PDF文档开发库

    C++库: 1,PDF类库 PoDoFo   http://podofo.sourceforge.net/  PoDoFo 是一个用来操作 PDF 文件格式的 C++ 类库.它还包含一些小工具用来解析 ...

  4. 怎么用ABBYY打开PDF文档

    我们日常工作中接触的文档大多都是PDF格式的,这种格式的文件需要借助工具才能打开,大家最熟悉的无非就是Adobe了,但你知道吗?除了Adobe,OCR文字识别软件也可以打开PDF文档,比如ABBYY ...

  5. 如何教你在NIPS会议上批量下载历年的pdf文档(另附04~14年NIPS论文下载链接)

    如何获得NIPS会议上批量下载的链接? NIPS会议下载网址:http://papers.nips.cc/ a.点击打开上述网站,进入某一年的所有会议,例如2014年,如下图 b.然后对着当前网页点击 ...

  6. C#(MVC) Word 替换,填充表格,导出并下载PDF文档

    近期做一个关于C# 操作 Word 模板 文档的功能模块,查阅资料,最终完美完成任务,记录下来,以便后面还会用到.

  7. 构建微服务(Building Microservices)-PDF 文档

    闲时翻译了几篇基于Spring Cloud.Netflix OSS 构建微服务的英文文章,为方便分享交流,整理为PDF文档. PDF 文档目录: 目录 一.微服务操作模型... 3 1.     前提 ...

  8. 根据传入的文件名称动态从moglifs图片服务器拿到pdf文档并在线浏览

    1.通过百度编辑器上传pdf文档等附件时,在上传方法中将返回的url进行设定,以达到后期点击后可进行浏览的效果: public static final State save(HttpServletR ...

  9. java操作office和pdf文件java读取word,excel和pdf文档内容

    在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...

随机推荐

  1. MT【44】抛物线不常见性质3

    注:S为抛物线的焦点

  2. 算法学习——决策单调性优化DP

    update in 2019.1.21 优化了一下文中年代久远的代码 的格式…… 什么是决策单调性? 在满足决策单调性的情况下,通常决策点会形如1111112222224444445555588888 ...

  3. 自学Python1.4-Centos内vim中文乱码问题

    自学Python之路 自学Python1.4-Centos内vim中文乱码问题 1. 登陆的系统---区域语言设置 1.1查看安装中文包: 查看系统是否安装中文语言包 (列出所有可用的公共语言环境的名 ...

  4. 【洛谷P1273】有线电视网

    题目大意:给定一棵 N 个节点的有根树,1 号节点为根节点,叶子节点有点权,每条边有边权,每经过一条边都减去该边权,每经过一个节点都加上该点权,求在保证权值和为非负数的前提下最多能经过多少个叶子节点. ...

  5. 【模板】K短路 A-star

    引理:当一个状态对应的节点第K次从堆中取出时,该状态对应的当前代价是从起点到该点的第K优解. 代码如下 /* POJ2449 */ #include <cstdio> #include & ...

  6. (转)git中关于fetch的使用

    将远程仓库的分支及分支最新版本代码拉取到本地: 命令:git fetch 该命令执行后,不会将拉取的分支的最新代码合并到当前分支,仅仅是拉取/下载下来到本地仓库中. 首先,我们使用git branch ...

  7. max,min,Zip函数(十一)

    zip函数,拉链,传两个有序的参数,将他们一一对应为元祖形式 max,min比较默认比较一个元素,处理的是可迭代对象,相当于for循环取出每个元素进行比较,注意:不同类型之间不可比较 #!/usr/b ...

  8. Nginx配置项优化详解【转】

    (1)nginx运行工作进程个数,一般设置cpu的核心或者核心数x2 如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor / ...

  9. My thoughts after NOIP 2018(1)

    联赛就这样结束了. 感觉真是奇怪啊.以前看重的东西,像是忽然扔下的包袱,一下子轻了. 而我一直在逃避的,不愿直面的东西,果然终于还是要再次面对了啊. 文化课百废待兴,\(noip\)的最终结果依然未知 ...

  10. CentOS6.7下Ansible部署

    Ansible是一种集成IT系统的配置管理, 应用部署, 执行特定任务的开源平台. 它基于Python语言实现, 部署只需在主控端部署Ansible环境, 被控端无需安装代理工具, 只需打开SSH, ...