如何解码PDF流?

问题描述 投票:22回答:4

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

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

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

此外,PDF中有两个xref表,这是正常的,但也有两个%% EOF跟随xref

这些存在是否正常? (注意:第二个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
pdf adobe reverse-engineering malware exploit
4个回答
15
投票
  1. “两张xref桌子和两张%%EOF”? 仅此一项并不表示存在恶意PDF文件。如果文件是通过“增量更新”功能生成的,则每个实例可以有两个甚至更多实例。 (每个经过数字签名的PDF文件都是这样的,每个在Acrobat中更改并使用“保存”按钮/菜单而不是“另存为...”按钮/菜单保存的文件也是这样。)
  2. “如何解码来自特定对象的压缩PDF流”? 看看Didier Stevens' Python脚本pdf-parser.py。使用此命令行工具,您可以将任何PDF对象的已解码流转储到文件中。转储PDF对象编号13的流的示例命令: pdf-parser.py -o 13 -f -d obj13.dump my.pdf

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。


4
投票

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


4
投票

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

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

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

有人向我指出,Enfocus Browser不再像我在上一版的答案中所说的那样可用,但实际上它是。您只需创建一个Enfocus帐户即可从此处下载:https://www.enfocus.com/en/support/downloads/old-product-installers

© www.soinside.com 2019 - 2024. All rights reserved.