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

Red*_*vil 2 pdf passwords

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

Pat*_*lot 6

PDF加密在File Trailer字典中以加密条目表示,根据Adobe PDF(v.1.7)参考手册(表3.13)的3.4.4节.

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

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

如果/ Filter值为/ Standard,则根据算法3.6'验证用户密码'(第127页)的前导码,算法3.6可用于确定用户密码是否为空字符串,因此是否禁止提示密码.

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

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