Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解码PDF流?_Pdf_Adobe_Reverse Engineering_Malware_Exploit - Fatal编程技术网

如何解码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

我想分析PDF文件中的流对象,该文件使用
/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流”

    查看Python脚本。使用此命令行工具,可以将任何PDF对象的解码流转储到文件中。转储编号为13的PDF对象流的命令示例:

    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压缩流。