从 PDF 文件中提取恶意代码

信息安全 恶意软件 javascript pdf
2021-08-15 07:02:49

我有一个包含一些恶意代码的 PDF 文件;打开时,处理器使用率达到最大值,风扇以全转速运行。产生以下pdfid.py输出:

PDF Header: %PDF-1.7
 obj                 8598
 endobj              8598
 stream              8001
 endstream           8001
 xref                   0
 trailer                0
 startxref              2
 /Page                594
 /Encrypt               0
 /ObjStm              981
 /JS                    1
 /JavaScript            0
 /AA                    2
 /OpenAction            1
 /AcroForm              0
 /JBIG2Decode           0
 /RichMedia             0
 /Launch                0
 /EmbeddedFile          0
 /XFA                   0
 /URI                   0
 /Colors > 2^24         0

/JS表示有一个 JavaScript 代码,/AA并且/OpenAction表示有将启动 JavaScript 代码的代码。

但是使用该pdf-parser.py工具,搜索关键字javascript不会产生匹配项:

python ./pdf-parser.py --search javascript ./document.pdf

但搜索关键字会OpenScript返回一个匹配项。

python ./pdf-parser.py --search openaction --raw ./document.pdf

结果:

obj 33412 0
 Type: /Catalog
 Referencing: 37640 0 R, 4364 0 R, 37641 0 R, 33413 0 R, 18188 0 R, 33259 0 R, 33264 0 R, 18275 0 R, 37642 0 R
<</MarkInfo 37640 0 R/Metadata 4364 0 R/Names 37641 0 R/OpenAction 33413 0 R/Outlines 18188 0 R/PageLabels 33259 0 R/PageLayout/SinglePage/PageMode/UseNone/Pages 33264 0 R/StructTreeRoot 18275 0 R/Type/Catalog/ViewerPreferences 37642 0 R>>

  <<
    /MarkInfo 37640 0 R
    /Metadata 4364 0 R
    /Names 37641 0 R
    /OpenAction 33413 0 R
    /Outlines 18188 0 R
    /PageLabels 33259 0 R
    /PageLayout /SinglePage
    /PageMode /UseNone
    /Pages 33264 0 R
    /StructTreeRoot 18275 0 R
    /Type /Catalog
    /ViewerPreferences 37642 0 R
  >>

执行:

python ./pdf-parser.py --reference 33412 --raw ../document.pdf

结果:

obj 37639 0
 Type: /XRef
 Referencing: 33410 0 R, 33412 0 R
 Contains stream

  <<
    /DecodeParms
      <<
        /Columns 5
        /Predictor 12
      >>
    /Filter /FlateDecode
    /ID [<0B1CC64D68284D90BD0A295FADB0972A><08CB936A1AF9EB42A906D26EC2F80EFA>]
    /Index [33411 15558]
    /Info 33410 0 R
    /Length 7901
    /Prev 15523287
    /Root 33412 0 R
    /Size 48969
    /Type /XRef
    /W [1 3 1]
  >>


obj 4368 0
 Type: /XRef
 Referencing: 33410 0 R, 33412 0 R
 Contains stream

  <<
    /DecodeParms
      <<
        /Columns 5
        /Predictor 12
      >>
    /Filter /FlateDecode
    /ID [<0B1CC64D68284D90BD0A295FADB0972A><08CB936A1AF9EB42A906D26EC2F80EFA>]
    /Info 33410 0 R
    /Length 8135
    /Root 33412 0 R
    /Size 33411
    /Type /XRef
    /W [1 3 1]
  >>

终于跑了

python ./pdf-parser.py --object 4368 --raw --filter ./document.pdf

产生我无法解压缩的二进制输出。

有人可以指出我的错误或告诉我如何提取 JavaScript 和 OpenAction 代码以供查看吗?

2个回答

使用任何十六进制编辑器,拆分打开 PDF 文件的内容(又名图像、文本、javascript 代码等)。以后您可以验证文件的内容并过滤 javascript 或可疑代码。

您还可以使用 pdfstreamdumper 并在 JavaScript 的顶部菜单中使用“Search_For”。

如果您通过 pdf-parser.py 找到所需的对象 ID,您也可以直接进入 pdfstreamdumper 左侧列中的对象 ID。