PDFUnlock 是一个命令行工具,用于处理受保护的 PDF 文件。它既能去除「所有者密码」带来的打印/复制限制,也能通过多种模式破解「用户密码」(打开文件所需的密码),支持单密码验证、字典攻击、暴力破解和掩码模式。
免责声明: 本项目仅供代码学习和研究使用,禁止用于非法用途。请仅对你拥有合法权限的文件使用本工具。使用本工具造成的任何后果由使用者自行承担。
姊妹项目: 需要处理 Excel 密码?请看 ExcelUnlock —— 同系列的 Excel 密码破解工具。
- 所有者密码(Owner Password):文件可以直接打开,但限制了打印、复制、编辑等操作。无需破解,本工具可直接去除限制。
- 用户密码(User Password):打开文件就需要输入密码。需要通过破解模式找回。
- 一键去除所有者密码的打印/复制限制
- 四种密码破解模式(单密码 / 字典 / 暴力 / 掩码)
- 支持标准 PDF 加密(RC4、AES-128、AES-256)
- 多进程并行处理,充分利用多核
- 实时进度显示(已尝试数量、速率)
- 支持断点续传
- 自动保存解密后的文件
- Python 3.10 或更高版本
- 支持的操作系统:Windows、macOS、Linux
- 克隆仓库:
git clone https://github.com/houyongsheng/PDFUnlock.git
cd PDFUnlock- 安装依赖:
pip install -r requirements.txt依赖
pikepdf(底层为 qpdf),其官方 wheel 已内置 qpdf,无需单独安装。
文件能打开但禁止打印/复制时使用,无需提供密码:
python3 -m pdfunlock -f "文件.pdf" -m RemoveRestrictions验证单个密码:
python3 -m pdfunlock -f "文件.pdf" -m SinglePassword -p "1234"使用密码字典文件进行破解:
python3 -m pdfunlock -f "文件.pdf" -m Dictionary -d "passwords.txt"尝试指定长度区间内的所有组合:
python3 -m pdfunlock -f "文件.pdf" -m BruteForce --min 4 --max 6 --charset "0123456789"参数说明:
--min:最小密码长度(默认 1)--max:最大密码长度(默认 8)--charset:使用的字符集(默认0123456789)
使用特定模式破解密码:
python3 -m pdfunlock -f "文件.pdf" -m Mask --mask "?d?d?d?d"掩码规则:
?d= 数字 (0-9)?l= 小写字母 (a-z)?u= 大写字母 (A-Z)?s= 特殊字符- 其他字符按字面量处理(例如
pwd?d?d匹配pwd00~pwd99)
--save-state:保存破解进度到状态文件--resume:从上次中断处继续--state-file:进度状态文件路径(默认crack_state.json)
破解成功后,解密文件会保存为 原名_已解密.pdf(若已存在则追加序号 原名_已解密_1.pdf)。
- 文件格式
- 仅支持 PDF 文件,且为标准加密方式(RC4 / AES)。
- 性能考虑
- 暴力破解模式可能需要较长时间,建议先尝试单密码或字典模式。
- 可用
--save-state保存进度,配合--resume续传。
- 安全提示
- 仅用于合法用途,请确保你有权限访问要处理的文件。
Q: 提示"文件未加密"? A: 文件没有设置密码保护,无需破解。
Q: RemoveRestrictions 报错"无法去除限制"? A: 该文件可能是用户密码加密(打开就需要密码),请改用破解模式。
Q: 程序运行很慢怎么办? A: 建议先用字典模式,没有结果再用暴力破解,并尽量缩小密码长度范围和字符集。
- pikepdf(底层 qpdf)
- pytest(测试)
pdfunlock/cli.py:命令行入口与流程编排pdfunlock/pdf_crypto.py:PDF 打开/验证/去限制/保存pdfunlock/modes.py:四种模式的候选密码生成pdfunlock/cracker.py:并行调度、进度、断点续传pdfunlock/state.py:破解状态的保存/加载
python3 -m pytest本项目采用 MIT 许可证。查看 LICENSE 文件了解更多信息。