在 MacBook 上恢复遗忘的 DMG 密码
适用于用户拥有或明确授权恢复的加密 DMG。目标是根据密码线索进行本地验证,支持 GPU 加速、断点续跑与结果核验。
1 确定目标与搜索范围
开始前记录:
-
DMG 的绝对路径、大小、修改时间。
-
已知密码线索:前缀、后缀、长度、字符集、大小写、日期与符号位置。
-
已完成的搜索范围。
-
用户是否允许使用 GPU。
将自然语言转换成明确规则。例如:
前缀:example
后缀:4–6位数字
包含前导零:是
大小写:前缀保持小写
候选数:10^4 + 10^5 + 10^6 = 1,110,000
区分“密码总长少于6位”和“后缀少于6位”。“包含大小写”也需区分首字母大写、每段大写和任意字母大小写。
原始 DMG 保持不变。恢复数据存放在独立、权限受限的工作目录中。
2 检查工具与 GPU
使用支持 DMG 的 John the Ripper Jumbo。先检查实际安装版本和能力;不同发行包的格式、OpenCL 支持和参数可能不同。John Jumbo 支持 DMG 与 GPU 计算,但不能据此假设每台 Mac 都有可用的 GPU 后端。项目说明
"$JOHN" --list=build-info
"$JOHN" --list=formats
"$JOHN" --list=opencl-devices
完成条件:
-
CPU 格式列表包含
dmg。 -
使用 GPU 时包含
dmg-opencl。 -
OpenCL 枚举结果显示实际设备。
-
搜索启动日志确认使用了预期设备。
在受限执行环境中,设备不可见可能来自沙箱限制。按环境要求申请 GPU 访问权限,再重新枚举。
3 提取密码验证数据
umask 077
"$DMG2JOHN" "$IMAGE" > "$WORK/image.john"
验证提取是否成功,保留诊断信息。
提取文件包含测试候选密码所需的参数和加密数据片段,因此通常远小于原始 DMG。文件大小没有固定值;不能将某次得到的几十 KB 当作通用要求。
提取成功不等于验证链路正确。 某些 DMG 与提取器版本可能存在兼容问题。条件允许时,使用同类、已知密码的测试镜像检查 CPU 和 GPU 验证链路。上游曾报告提取成功但正确密码仍无法命中的问题。兼容问题记录
4 生成可审计的候选集
优先测试高概率、小范围候选,再逐步扩展。
生成阶段记录:
候选规则
准确数量
去重规则
字符编码
候选文件路径
生成脚本或掩码
数字组合必须保留前导零。片段拼接需要明确是否允许重复,以及最多拼接几段。
短候选集可以生成词表;大范围搜索可使用工具支持的掩码。使用掩码前,通过 --stdout 检查候选内容和数量,确认规则符合用户原意。参数说明
5 启动搜索并测量速度
词表模式示例:
"$JOHN" \
--format=dmg-opencl \
--wordlist="$WORK/candidates.txt" \
--session="$WORK/search-001" \
--pot="$WORK/found.pot" \
"$WORK/image.john" \
> "$WORK/search-001.console.log" 2>&1
每个会话使用独立名称。控制台日志与 John 自己生成的会话 .log 文件使用不同路径。
先测量真实目标的稳定速度,再估算:
预计剩余时间 = 剩余候选数 ÷ 实测速率
MacBook 型号、DMG 的密钥派生参数、候选批次和散热状态都会影响速度。GPU 不一定让很短的候选集更快。
若自动调优导致启动缓慢或批次过大,再调整工作组参数。在一次 Apple Silicon 实测中,--gws=8192 --lws=32 可稳定运行;其他设备应重新验证。
同一 GPU 优先运行一个搜索任务。
6 查询状态与报告结果
为每轮搜索维护以下状态之一:
prepared
running
paused
completed_without_match
matched_unverified
verified
failed
汇报内容包括当前规则、完成范围、实际速度和是否命中。
判断原则:
-
会话启动成功,只能报告“已启动”。
-
断点文件存在,不能证明任务仍在运行。
-
进程退出,不能证明候选已全部测试。
-
日志显示完成且无命中,才能报告该范围已排除。
-
异常退出归类为失败或中断。
读取日志时过滤候选明文和恢复出的密码。
7 暂停与继续
暂停顺序:
-
停止会自动启动下一任务的调度脚本。
-
向目标 John 进程发送一次
SIGINT。 -
等待进程退出并保存断点。
-
重新检查相关进程,确认 GPU 搜索已停止。
使用启动时记录的 PID、完整命令行或精确会话路径识别进程。macOS 的 ps 输出可能截断,必要时使用 -ww。避免仅凭进程名批量终止任务。
John 支持通过会话文件恢复;再次发送中断信号可能使它来不及保存状态。停止与恢复说明
"$JOHN" --restore="$WORK/search-001"
恢复前检查原会话是否已经完成。首次运行参数中的时间限制,也应纳入恢复行为检查。
8 验证命中密码
通过 John 的 --show 读取结果,避免自行假设 pot 文件的哈希表示与提取文件完全一致。
将密码写入权限为 0600 的本地文件。随后:
-
查询当前 macOS 的磁盘映像工具帮助。
-
使用密码标准输入接口。
-
对原 DMG 执行只读、禁止挂载文件系统的附加操作。
-
成功后,仅弹出本次操作返回的设备。
完成原文件验证后,状态才改为 verified。在工具输出和聊天记录中默认隐藏密码,向用户提供受限本地文件的位置。
9 结束与交接
最终报告应说明:
目标镜像
已完成的准确搜索范围
尚未完成的范围
当前是否存在运行进程
断点与结果文件位置
密码是否经过原 DMG 验证
没有命中只说明已测试候选不正确。保留搜索清单,供下一轮 agent 跳过已完成范围。