macOS 平台下使用 John the Ripper 恢复 7z 压缩包密码
记录了在 macOS (Apple Silicon / Intel) 系统中,借助 Homebrew、John the Ripper 及其内置的 7z2john.pl 工具对加密 7z 压缩文件进行密码恢复及解压的全流程。
准备工作
确认系统已安装 Homebrew 包管理器。
步骤 1:安装 John the Ripper
使用 Homebrew 安装包含额外脚本和格式支持的社区增强版 john-jumbo:
Bash
brew install john-jumbo1
配置环境变量(可选)
为方便直接调用 7z2john.pl 等提取工具,需将工具路径加入 Shell 配置文件:
- 确认当前使用的 Shell:
bash
echo $SHELL1
- 将工具目录追加至环境变量(以 Apple Silicon M1/M2/M3 芯片默认路径 /opt/homebrew 为例):
如果使用 Zsh(~/.zshrc):
Bashecho 'export PATH=$PATH:/opt/homebrew/Cellar/john-jumbo/1.9.0\_1/share/john' >> ~/.zshrc source ~/.zshrc1
2如果使用 Bash(~/.bash_profile):
Bashecho 'export PATH=$PATH:/usr/local/Cellar/john-jumbo/1.9.0\_1/share/john' >> ~/.bash_profile source ~/.bash_profile1
2
步骤 2:提取 7z 哈希值(及依赖报错处理)
使用 7z2john.pl 脚本从加密压缩包中提取密码哈希,并存入文件:
Bash
7z2john.pl /Users/sky/Downloads/01.7z > hash.txt1
常见报错与排查:缺失 Compress::Raw::Lzma 模块
若执行时出现如下报错:
Plaintext
Can't locate Compress/Raw/Lzma.pm in @INC ...1
2
2
原因分析
7z2john.pl 是 Perl 脚本,解析 7z 文件结构需要 Perl 的 Compress::Raw::Lzma 库支持,该库依赖系统底层的 xz (lzma) C 语言头文件。
解决方案
安装 C 库依赖:
Bashbrew install xz1安装 Perl 包管理器 cpanm 并尝试编译安装:
Bash# 安装 cpanm curl -L https://cpanmin.us | sudo perl - --sudo App::cpanminus # 设置编译器的头文件与库路径(解决路径搜寻不到 lzma.h 的问题) export CPATH=/opt/homebrew/include export LIBRARY_PATH=/opt/homebrew/lib # 保留环境变量并强制编译安装 sudo -E cpanm Compress::Raw::Lzma1
2
3
4
5
6
7
8
9重新提取哈希:
Bash7z2john.pl /Users/sky/Downloads/01.7z > hash.txt1
验证:若生成了非空的 hash.txt,说明哈希提取成功。
步骤 3:使用 John 破解密码
根据已知密码的线索,选择最适合的破解策略:
模式 A:字典攻击(Dictionary Attack)
使用外部弱口令字典(如 RockYou 字典):
Bash
john --wordlist=/path/to/rockyou.txt hash.txt1
提示:如果不指定 --wordlist,John 将使用其内置的默认弱口令列表进行快速匹配:
Bash
john hash.txt1
模式 B:掩码攻击(Mask Attack,推荐已知格式时使用)
当对密码的长度或格式有大致了解时,使用 --mask 参数配合占位符可大幅缩减破译时间:
| 占位符 | 含义 |
|---|---|
| ?d | 数字 (0-9) |
| ?l | 小写字母 (a-z) |
| ?u | 大写字母 (A-Z) |
| ?s | 特殊符号 |
| ?a | 所有可打印字符 |
常用掩码示例:
Bash
# 示例 1:6 位纯数字
john --format=7z --mask='?d?d?d?d?d?d' hash.txt
# 示例 2:8 位小写字母
john --format=7z --mask='?l?l?l?l?l?l?l?l' hash.txt
# 示例 3:生日格式(YYYYMMDD,如 19980101)
john --format=7z --mask='19?d?d0?d?d' hash.txt
# 示例 4:已知密码前缀 + 4 位数字
john --format=7z --mask='mypassword?d?d?d?d' hash.txt1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
步骤 4:查看破解结果与解压文件
1. 查看已破解成功密码
破解完成后,可以通过--show参数直接调出保存的历史破译记录:
Bash
john --show hash.txt1
输出示例:01.7z🔢... (其中 1234 即为解出的明文密码)
2. 解压 7z 文件
macOS 自带的 unzip 工具不支持 7z 格式,需安装 p7zip:
Bash
# 安装 7z 命令行工具
brew install p7zip
# 使用解出的密码解压文件(假设密码为 1024)
7z x -p"1024" /Users/sky/Downloads/01.7z -o/Users/sky/Downloads/output_dir1
2
3
4
5
2
3
4
5
命令参数说明:
- x:解压文件并保持原有的目录层级结构。
- -p:后接明文密码(建议用双引号包裹)。
- -o:(可选)指定解压出来的文件存放路径。