如何解码PDF流?

时间:2015-01-17 09:11:35

标签: pdf adobe reverse-engineering malware exploit

我想分析PDF文件中的流对象,该文件使用/FlateDecode进行编码。

是否有任何工具可以解码PDF中使用的此类编码(ASCII85decode,LZWDecode,RunlenghtDecode等)?

流内容很可能是PE文件结构,PDF可能稍后会在漏洞利用中使用。

此外,PDF中有两个xref表,可以使用xref两个%% EOF。

这些存在是否正常? (注意:第二个xref使用xref名称指向第一个/prev

xref指的是第二个xref

xref 
5 6
0000000618 00000 n
0000000658 00000 n
0000000701 00000 n
0000000798 00000 n
0000045112 00000 n
0000045219 00000 n
1 1
0000045753 00000 n
3 1
0000045838 00000 n
trailer
>
startxref
46090
%%EOF

第二个xref

xref
0 5
0000000000 65535 f
0000000010 00000 n
0000000067 00000 n
0000000136 00000 n
0000000373 00000 n
trailer
>
startxref
429
%%EOF

6 个答案:

答案 0 :(得分:15)

  1. “两个xref表格和两个%%EOF”?

    仅此一项并不表示存在恶意PDF文件。如果文件是通过“增量更新”功能生成的,则每个实例可以有两个甚至更多实例。 (每个经过数字签名的PDF文件都是这样的,每个文件在Acrobat中更改并使用'保存'按钮/菜单而不是'另存为...'进行保存/ em>按钮/菜单也是这样。)

  2. “如何解码来自特定对象的压缩PDF流”?

    查看Didier Stevens' Python脚本 pdf-parser.py 。使用此命令行工具,您可以将任何PDF对象的已解码流转储到文件中。转储PDF对象编号13的流的示例命令:

    pdf-parser.py -o 13 -f -d obj13.dump my.pdf
    

答案 1 :(得分:11)

%%EOF评论应出现在文件的末尾,任何其他评论(任何以%开头的行)都可能出现在文件的任何位置。是的,2 %%EOF条评论完全有效。这在PDF Reference中有记录。有关具有您描述的结构的规范中的文档示例,请参阅第112页的1.7 PDF参考手册中的示例3.11。这是一个已逐步更新的PDF文件。

请注意,更新版本的PDF可以包含交叉引用流,这些流本身已经过压缩。

解码PDF文件的最简单方法是使用一个用来执行此操作的工具,例如MuPDF可以通过“mutool clean -d <input pdf file> <output PDF file>”解压缩(-d)所有压缩流PDF文件并将输出写入新的PDF文件。

否则你需要使用像zlib这样的Flate和LZW解压缩,你需要编写自己的RunLength解压缩以及我认为的ASCIIHex85。如果你想要解码图像,更不用说JBIG,JPEG和JPEG2000了。

答案 2 :(得分:4)

您可以使用RUPS分析PDF并导出或只查看已解码的流。关于%% EOF,您可以拥有与PDF附加的数量相同的数量。

答案 3 :(得分:2)

关于工具,如其他答案所述,有许多工具可用于解压缩流(在命令行或其他方面)。但是,还有一些工具可以让您轻松地检查PDF文件,方法是遍历对象树并轻松查看压缩内部的内容。我用过的两个是:

1)callas pdfToolbox Desktop(谨慎,我与该公司有关)。 pdfToolbox有一个“浏览PDF”选项,允许您查看与页面关联的对象,包括实际的页面操作符。

2)Enfocus浏览器。此工具将允许您打开PDF文件的对象树的根,然后以非常类似于Mac上的Finder与文件系统的方式呈现对象层次结构。浏览器甚至允许您编辑PDF文件(您应该知道在这种情况下您正在做什么),方法是编辑低级对象,创建新对象或更改流的内容。真的很酷。

  

有人指出Enfocus浏览器不再可用   正如我在上一个版本的答案中所说,但实际上是。   您只需创建一个Enfocus帐户即可下载   从这里:   https://www.enfocus.com/en/support/downloads/old-product-installers

答案 4 :(得分:0)

在另一种情况下,您可以具有两个%% EOF,其中文档可能不必进行增量更新。

根据Annex F of the official ISO 32000-1:2008 PDF (1.7) standard,其中详细介绍了“线性化PDF”的内部:文件中有2 %% EOF。第一次出现在开始处,紧随线性化参数字典之后。该部分称为“首页交叉引用预告片”。

引用此文件:

首页预告片应包含有效的“大小”和“根”条目,以及显示文档所需的任何其他条目。 Size值应是第一页交叉引用表和主交叉引用表中条目的总和。与普通预告片一样,首页预告片可以选择以startxref,整数和%% EOF结尾。此信息将被忽略

答案 5 :(得分:0)

您可以使用 this 在线服务复制粘贴 PDF 数据流并立即查看渲染。