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



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

PDF 加密在

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

因此,要检测PDF加密,请转到文件末尾并向上搜索仅包含单词"trailer"的第一行,然后再次向下搜索字符串"/Encrypt"。 如果存在,则文件已加密,否则不会加密。

现在,检测PDF是否受密码保护,这意味着您在不提供密码的情况下无法打开它,将更加困难。您基本上需要在/Encrypt 密钥之后读取对象引用(例如 '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 中挖掘它们。

最新更新