如何解码PDF流?
我想分析PDF文件中的流对象,该文件使用如何解码PDF流?,pdf,adobe,reverse-engineering,malware,exploit,Pdf,Adobe,Reverse Engineering,Malware,Exploit,我想分析PDF文件中的流对象,该文件使用/flateCode编码 是否有任何工具允许对PDF中使用的此类编码(ASCII85decode、LZWDecode、RunlenghtDecode等)进行解码 流内容很可能是一个PE文件结构,PDF可能会在以后的攻击中使用 另外,PDF中有两个xref表,这是可以的,但在xref后面还有两个%%EOF 这些东西的存在对吗?(注意:第二个xref使用/prev名称指向第一个xref) 此xref指的是第二个xref: xref 5 6 000000061
/flateCode
编码
是否有任何工具允许对PDF中使用的此类编码(ASCII85decode、LZWDecode、RunlenghtDecode等)进行解码
流内容很可能是一个PE文件结构,PDF可能会在以后的攻击中使用
另外,PDF中有两个xref
表,这是可以的,但在xref
后面还有两个%%EOF
这些东西的存在对吗?(注意:第二个xref
使用/prev
名称指向第一个xref
)
此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
0 5
0000000000 65535 f
0000000010 00000 n
0000000067 00000 n
0000000136 00000 n
0000000373 00000 n
trailer
>
startxref
429
%%EOF
文件末尾应有一条
%%EOF
注释,任何其他注释(任何以%%
开头的行)可能出现在文件中的任何位置。因此,2%%EOF
注释是完全有效的。这在第112页的1.7 PDF参考手册中的示例3.11中有记录,以获取规范中的记录示例,该示例具有您描述的结构。这是一个已增量更新的PDF文件
请注意,较新版本的PDF可以有交叉引用流,这些流本身是压缩的
解码PDF文件最简单的方法是使用一个专门的工具,例如MuPDF可以使用“mutool clean-d
”将解压PDF文件中的所有压缩流(-d
),并将输出写入新的PDF文件
否则,你需要使用类似zlib的东西来进行Flate和LZW解压缩,我认为你需要编写自己的运行长度解压缩以及ASCIIHex85。如果你想对图像进行解码,更不用说JBIG、JPEG和JPEG2000了。你可以使用它来分析PDF并导出,或者只是查看已经解码的流。关于t他%%EOF您可以在PDF中添加多达数量的附件
xref
表和两个%%EOF
”?
这并不是恶意PDF文件的迹象。如果文件是通过“增量更新”功能生成的,则每个文件可能有两个或更多实例。(每个数字签名的PDF文件都是这样,在Acrobat中更改并使用“保存”按钮/菜单而不是“另存为…”按钮/菜单保存的每个文件也是这样。)pdf-parser.py -o 13 -f -d obj13.dump my.pdf
关于工具,如其他答案中所述,有许多工具可用于解压缩流(在命令行或其他方式上)。但是,也有许多工具可以让您轻松浏览对象树并查看压缩流中的内容,从而轻松检查PDF文件。我使用的两个工具是: 1) callas pdfToolbox Desktop(注意,我与这家公司有关联)。pdfToolbox有一个“浏览PDF”选项,允许您查看与页面关联的对象,包括实际的页面操作符 2) Enfocus浏览器。此工具将允许您打开PDF文件的对象树的根,然后以一种非常类似于Mac上Finder对文件系统的方式显示对象层次结构。浏览器甚至允许您通过编辑低级对象、创建新对象或更改流的内容来编辑PDF文件(在这种情况下,您应该真正知道自己在做什么)。真的很酷 有人向我指出Enfocus浏览器不再可用 正如我在上一个版本的答案中所说,但事实上确实如此。 您只需创建一个Enfocus帐户即可下载 从这里开始:
另一种情况是,您可以有两个%%EOF,文档不一定会以增量方式更新 根据,其中详细介绍了“Lineraized PDF”的内部结构:文件中有2%%EOF。第一个发生在刚开始时,就在线性化参数字典之后。该部分称为“第一页交叉引用预告” 引用此文件: 第一页尾部应包含有效的大小和根条目,以及显示文件所需的任何其他条目。尺寸值应为第一页交叉参考表和主交叉参考表中的条目总数。第一页预告片可以选择以startxref、整数和%%EOF结尾,就像在普通预告片中一样。此信息应被忽略
您可以使用在线服务复制粘贴PDF数据流并立即查看渲染。感谢您的回答Kensso一些相当愚蠢的家伙对OP问题投了反对票,也投票关闭了它。请向上投票,以平衡这一点…感谢保罗回答一些相当愚蠢的家伙否决了OP问题,并投票结束了它。请向上投票,以平衡这一点……“每个数字签名的PDF文件都是这样的”-不一定。只有在签名后添加更改而不破坏签名时,才严格需要增量更新。@mkl:您能给我举一个签名PDF的例子吗?您在签名后添加了更改,这些更改在哪里不会破坏签名?简单地说,以具有两个有效集成签名的PDF为例。在已经签名的文档中添加另一个签名显然是签名后的一种更改。例如,see.pdf-parser.py为我工作。类似,但在一些pdf文件上给了我错误。您可以使用zlib压缩流。