Dan*_*Frs 7 javascript pdf cmd pypdf python-2.7
如何使用命令行工具从PDF文件中提取JavaScript对象?
我正在尝试使用此功能使用Python制作GUI.
我发现这两个模块但无法运行它们:pyPdf2和pyPdf.
Kur*_*fle 13
当您在PDF中处理JavaScript时,您必须了解两种情况(在仔细调查相关文件之前,您无法提前区分这两种情况).
OP提供了一个链接到PlanetPDF的JavaScript加载PDF示例:
那一个很容易处理.只是使用pdfinfo -js
(但要确保你使用最新的,基于 Poppler的版本之一 - 基于XPDF的pdfinfo
不知道-js
!)
结果如下:
$ pdfinfo -js ppjslc_commonex_3.pdf
Title: Planet PDF JavaScript Learning Center Example #2
Author: Chris Dahl, ARTS PDF Global Services
Creator: PScript5.dll Version 5.2.2
Producer: Acrobat Distiller 6.0.1 (Windows)
CreationDate: Thu Oct 28 18:13:38 2004
ModDate: Thu Oct 28 18:17:46 2004
Tagged: no
UserProperties: no
Suspects: no
Form: AcroForm
JavaScript: yes
Pages: 1
Encrypted: no
Page size: 612 x 792 pts (letter)
Page rot: 0
File size: 84720 bytes
Optimized: no
PDF version: 1.5
Name Dictionary "docOpened":
// variable to store whether document has been opened already or not
var bAlreadyOpened;
function docOpened()
{
if(bAlreadyOpened != "true")
{
// document has just been opened
var d = new Date();
var sDate = util.printd("mm/dd/yyyy", d);
// set date now
app.alert("About to insert date into field now");
this.getField("todaysDate").value = sDate;
// now set bAlreadyOpened to true so it doesn’t
// run again
bAlreadyOpened = "true";
}
else
{
// document has already been opened
}
}
// call the docOpened() function
docOpened();
Run Code Online (Sandbox Code Playgroud)
如您所见,-js
尝试从PDF中自动提取所有JavaScript并将其打印到<stdout>
.
这个是一个无害的JavaScript,没有试图隐藏自己,没有混淆,在弹出一个关于它将要做什么的信息消息后,将当前日期插入到表单字段中.
在包含JavaScripts的荒野中有许多PDF文件的例子,它们不像上面那样无害,是由追随你的钱的恶意软件作者写的,或者只是在他们成功后给予他们的"乐趣"之后.
在这些情况下,JavaScripts经常被隐藏和混淆.
例如,为了隐藏甚至包含JavaScript的事实,它们不使用相应PDF对象字典中的"clear" /JavaScript
和/JS
名称.这些名称必须存在,以便PDF阅读器知道它们应该如何处理对象.
相反,他们使用另一种方法来表达相同的名称:
/#4Aava#53cript
/J#61vaScrip#74
/#4a#61#76#61#53#63#72#69#70#74
[...]
Run Code Online (Sandbox Code Playgroud)
不幸的是,这种方法甚至被官方的PDF规范文件"合法化".它允许通过各自的ASCII十六进制数替换PDF名称标记中某些甚至所有字符的选择(结合每个替换字符的前导哈希符号).
这可以欺骗一些更天真的尝试/JavaScript
在PDF中找到字符串(例如使用简单grep -a
).
有一些免费软件工具可用于剖析和分析此类案例:
迪迪埃·史蒂文斯的Python脚本pdfid.py
和pdf-parser.py
对于这些情况首先要看(甚至为一个完整的分析)是非常有用的.
Jose Miguel Esparza的Python框架peepdf更强大.它甚至可以对PDF中的任何混淆的JavaScript 内容进行去混淆,美化和再次可读.
Origami是基于Ruby的,也非常强大.还有一些......
但是,如果您已经拥有(至少一些基本的)PDF语法知识(当然还有JavaScript),那么所有这些工具都是有用的.
以下是pdfid.py
针对三种不同PDF的三个简短示例:
第一个不包含任何由pdfid.py
以下内容发现的JavaScript :
$ pdfid.py nojavascript.pdf
PDFiD 0.2.1 nojavascript.pdf
PDF Header: %PDF-1.5
obj 193
endobj 193
stream 54
endstream 54
xref 1
trailer 1
startxref 1
/Page 1
/Encrypt 0
/ObjStm 0
/JS 0
/JavaScript 0
/AA 12
/OpenAction 0
/AcroForm 1
/JBIG2Decode 0
/RichMedia 0
/Launch 0
/EmbeddedFile 0
/XFA 0
/Colors > 2^24 0
Run Code Online (Sandbox Code Playgroud)第二个包含JavaScript,名称/JavaScript
在PDF中以明文形式显示:
$ pdfid.py javascript1.pdf | grep -E '(/JS|/JavaScript)
/JS 30
/JavaScript 30
Run Code Online (Sandbox Code Playgroud)最后一个包含JavaScript,名称标记/JavaScript
和/JS
两者都被混淆:
$ pdfid.py javascript2.pdf | grep -E '(/JS|/JavaScript)
/JS 30(30)
/JavaScript 30(30)
Run Code Online (Sandbox Code Playgroud)
pdfid.py
在括号中列出第二个数字的事实表明它发现了混淆.30个/JavaScript
名称令牌中有30个被遮挡 - 这使得PDF文件高度可疑,这需要进一步调查.因为没有"普通"的PDF生成工具(我知道)使用这种混淆...
我的另一个答案中提供了不同方法(包括命令行工具)的列表:
目前最好的工具是peepdf.py,因为它甚至可以处理严重混淆的JavaScript.这是一个Python框架,用于探索(和更改)PDF文件的源代码,专门用于分析恶意PDF.
其作者最近添加了extract
子命令,该命令提取并打印PDF中包含的JavaScripts的源代码:
简短的使用信息:
git clone https://github.com/jesparza/peepdf.git git.peepdf
$PATH
在脚本中创建符号链接(在您的中):cd git.peepdf ;
ln -s $(pwd)/peepdf.py ${HOME}/bin/peepdf.py
echo 'extract js > all-javascripts-from-my.pdf' > xtract.txt
-l
和强制方式忽略错误,-f
等)执行非交互方式包含在新创建的脚本文件中的子命令行(多个), -s
:peepdf.py -l -f -s xtract.txt my.pdf
cat all-javascripts-from-my.pdf
归档时间: |
|
查看次数: |
9131 次 |
最近记录: |