如何使用静态工具检查PDF是否受密码保护

时间:2016-02-24 05:48:02

标签: pdf passwords

我已经看到有关此主题的多个问题。在答案中,用户必须加载pdf与一些pdf lib或内置支持,然后基于库函数,用户可以确定pdf是否加密。我有兴趣知道是否可以使用一些静态分析工具检测PDF是否加密,即YARA,我们只是将文件内容读取为二进制/字符串数据而不是文件的完整结构?

1 个答案:

答案 0 :(得分:5)

根据Adobe PDF(v.1.7)参考手册(表3.13)的3.4.4节,PDF加密在文件预告片词典中以加密条目表示。

因此,要检测PDF加密,请转到文件末尾并向上搜索包含单词'预告片'的第一行,然后再次向下搜索字符串' / Encrypt&# 39 ;.如果它在那里,则文件被加密,否则不加密。

现在,检测PDF是否受密码保护,这意味着您无法在不提供密码的情况下打开它,这将变得更加困难。你基本上需要在/ Encrypt键之后读取Object引用(例如' 14 0 R'),跳转到文件的开头并搜索该对象(例如' 14 0 obj< <')并查找该词典中的/ Filter,/ R和/ U键。

如果/ Filter值是/ Standard,那么 根据算法3.6和#39;认证用户密码'的序言。 (第127页),算法3.6可用于确定用户密码是否为空字符串,因此是否禁止提示输入密码。

基本上,如果/ R值为2,您将查找/ U值为特定字符串,如果/ R值为3或4,则可以查找/ U值为另一个特定字符串,如果它们都不是这些值,那么打开文档需要用户密码,文档受密码保护。

您可以通过遵循PDF参考中的算法来计算这些/ U值,或者您可以从不需要打开密码的现有加密PDF中挖掘它们。