我可以对 pdf 文件进行逆向工程以识别创建者的姓名吗?

逆向工程 数字取证 pdf
2021-06-27 12:31:56

这是一个简单的问题。有人告诉我,我可以对 pdf 文件进行逆向工程,提取并分析底层的 XML 文件,并找出这个 pdf 的创建者名称。

但是,我用谷歌搜索了一段时间,并没有找到可行的解决方案。任何人都可以阐明这一点..?先感谢您!

1个回答

PDF 格式不是基于 XML,而是使用受 PostScript 启发的字典格式作为其“对象”和其他数据(如图像)的流。文档元数据的存储位置如下:

  • /Info包含“Author”、“Producer”、“Title”等键字典。
  • /Metadata可能包含带有附加信息的 XML 流字典。

以下是使用Didier Stevens 的低级 PDF 解析工具检索此信息的示例

首先,显示“预告片”(类似于 PDF 的目录):

pdf-parser.py -et Excite_Project_ZN.pdf

trailer
  <<
    /Size 3373
    /Root 1 0 R
    /Info 219 0 R
    /ID [<3572219E83326040B0789EBEAE24A285><3572219E83326040B0789EBEAE24A285>]
  >>

trailer
  <<
    /Size 3373
    /Root 1 0 R
    /Info 219 0 R
    /ID [<3572219E83326040B0789EBEAE24A285><3572219E83326040B0789EBEAE24A285>]
    /Prev 2126182
    /XRefStm 2119246
  >>

现在让我们检查/Info对象(编号 219):

pdf-parser.py -o 219 Excite_Project_ZN.pdf

obj 219 0
 Type:
 Referencing:

  <<
    /Title ()
    /Author (Alex Matrosov)
    /Keywords (CTPClassification=CTP_PUBLIC:VisualMarkings=)
    /CreationDate "(D:20161121224130-08'00')"
    /ModDate "(D:20161121224130-08'00')"
    /Producer '(\xfe\xff\x00M\x00i\x00c\x00r\x00o\x00s\x00o\x00f\x00t\x00\xae\x00 \x00P\x00o\x00w\x00e\x00r\x00P\x00o\x00i\x00n\x00t\x00\xae\x00 \x002\x000\x001\x006)'
    /Creator '(\xfe\xff\x00M\x00i\x00c\x00r\x00o\x00s\x00o\x00f\x00t\x00\xae\x00\x00P\x00o\x00w\x00e\x00r\x00P\x00o\x00i\x00n\x00t\x00\xae\x00 \x002\x000\x001\x006)'
  >>

所以这里我们有磁贴和作者。但还有更多。如果我们检查 Root 对象(编号 1):

>pdf-parser.py -o 1 Excite_Project_ZN.pdf

obj 1 0
 Type: /Catalog
 Referencing: 2 0 R, 220 0 R, 3370 0 R, 3371 0 R

  <<
    /Type /Catalog
    /Pages 2 0 R
    /Lang (en-US)
    /StructTreeRoot 220 0 R
    /MarkInfo
      <<
        /Marked true
      >>
    /Metadata 3370 0 R
    /ViewerPreferences 3371 0 R
  >>

我们可以看到对 的引用/Metadata让我们检查一下:

>pdf-parser.py -o 3370 Excite_Project_ZN.pdf

obj 3370 0
 Type: /Metadata
 Referencing:
 Contains stream

  <<
    /Type /Metadata
    /Subtype /XML
    /Length 3230
  >>

这是一个需要提取的流:

>pdf-parser.py -o 3370 -x metadata.xml Excite_Project_ZN.pdf 

输出是这个 XML:

<?xml version="1.0"?>
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta x:xmptk="3.1-701" xmlns:x="adobe:ns:meta/">
<?xpacket end="w"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description xmlns:pdf="http://ns.adobe.com/pdf/1.3/" rdf:about="">
<pdf:Producer>Microsoft® PowerPoint® 2016</pdf:Producer>
<pdf:Keywords>CTPClassification=CTP_PUBLIC:VisualMarkings=</pdf:Keywords>
</rdf:Description>
<rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:title>
<rdf:Alt>
<rdf:li xml:lang="x-default"/>
</rdf:Alt>
</dc:title>
<dc:creator>
<rdf:Seq>
<rdf:li>Alex Matrosov</rdf:li>
</rdf:Seq>
</dc:creator>
</rdf:Description>
<rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/">
<xmp:CreatorTool>Microsoft® PowerPoint® 2016</xmp:CreatorTool>
<xmp:CreateDate>2016-11-21T22:41:30-08:00</xmp:CreateDate>
<xmp:ModifyDate>2016-11-21T22:41:30-08:00</xmp:ModifyDate>
</rdf:Description>    

<rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">    
<xmpMM:DocumentID>uuid:9E217235-3283-4060-B078-9EBEAE24A285</xmpMM:DocumentID>    
<xmpMM:InstanceID>uuid:9E217235-3283-4060-B078-9EBEAE24A285</xmpMM:InstanceID>    
</rdf:Description>    
</rdf:RDF>

</x:xmpmeta>