
看到你对“macOS下安装John the Ripper并配置zip2john破解加密zip文件”感兴趣先说句实在话这可能是你恢复被忘密码的ZIP终端的最后一条技术路径。John the Ripper是安全圈几乎人人都知道的老牌密码破解工具而zip2john是它附带的一个脚本负责从ZIP包里提取加密后的密码哈希交给John去枚举。我前阵子也遇到一个客户加密的合同包密码记不起来了折腾了一圈最后就是靠这套组合在macOS上重建了访问。这篇文章我就按自己的实操顺序把安装、配置、破解和踩坑点全部写出来希望能帮你少走弯路。我必须先把丑话说在前面这套工具是用在你自己拥有合法访问权限的文件上或者你拿到授权的渗透测试里。拿它去解别人的加密包、入侵系统属于违法行为文章只为技术交流请务必分清楚边界。1. 项目背景与应用场景解析1.1 为什么会用到John the Ripper先说说这个工具的实际定位。你的ZIP文件被加密后解压时要求输入密码。密码忘了系统没有一个“找回密码”的按钮因为ZIP的加密设计里密码只被保存在你脑子里文件头里存的只是密码的派生哈希值。所以唯一的办法就是暴力穷举把一个一个可能的密码试过去直到某个密码产生的哈希值和ZIP头里的哈希一致。John the Ripper干的就是这件事。它比你自己写循环快得多支持多种哈希算法能自动处理Wordlist、规则变形、掩码攻击还能调用CPU多核甚至显卡加速。更关键的是它针对ZIP文件专门提供了zip2john这个辅助脚本能自动识别ZIP包是ZipCrypto还是AES加密提取出正确的哈希格式。这一步看起来简单但直接决定了后面John能不能读得懂、跑得动。1.2 合法边界你的密码恢复场景是什么我在社区里见过太多人一上来就问“帮我破个朋友发给我的加密包”这种请求我们是不会接的。合法的使用场景主要就三种自己的ZIP文件密码是很多年前设置的早就忘了单位内部档案交接前任同事加密了文件但没留下密码安全测试工作中客户授权后对包含加密样本的ZIP做格式分析。只要你属于其中一种那往下看是安全的。如果你是想解开别人发来但故意加密的文件请停下先走合法沟通渠道。技术工具本身没有罪用在哪就有区别了。2. 环境准备与依赖安装2.1 确认macOS环境与命令行工具在macOS上安装John the Ripper之前建议先把基础环境搞定。我以macOS 13/14为例无论你是Intel芯片还是M1/M2/M3芯片过程基本一致。但有几个前置条件必须满足Xcode Command Line Tools编译和运行很多命令行工具都依赖它。还没装的话打开终端执行xcode-select --install系统会弹窗让你确认接着等它自动下载安装完成。HomebrewmacOS上最主流的包管理器。没有它后面会很痛苦。如果你已经装了先跑一下brew update把索引更新到最新。注意Apple SiliconM系列上某些老版本工具会因为缺少Rosetta或者路径问题编译失败但John the Ripper本身对新架构支持很好直接用原生终端跑就行不用特意装Rosetta。2.2 安装Homebrew并配置国内源如果卡顿如果你的网络访问国外源很慢安装Homebrew时可以换用国内镜像。我没有专门做特别复杂的配置只用了中科大镜像源简单有效# 安装Homebrew官方脚本 /bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh) # 如果慢先设置环境变量再用国内镜像 export HOMEBREW_BREW_GIT_REMOTEhttps://mirrors.ustc.edu.cn/brew.git export HOMEBREW_CORE_GIT_REMOTEhttps://mirrors.ustc.edu.cn/homebrew-core.git export HOMEBREW_BOTTLE_DOMAINhttps://mirrors.ustc.edu.cn/homebrew-bottles/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)这个命令我实测在最慢的时候也能完成只是可能要等十几分钟。装完后执行brew -v确认版本。2.3 安装John the Ripper Jumbo版关键点来了Homebrew里有两个John相关的包一个是john一个是john-jumbo。很多教程没讲清楚直接让你brew install john结果发现根本没有zip2john因为那是简化版。必须安装Jumbo版它整合了社区所有补丁和扩展包含几百个哈希类型的解析脚本zip2john就在其中。brew install john-jumbo执行后Homebrew会自动拉取依赖比如OpenSSL、gmp这些。等它跑完就装好了。如果遇到权限问题多半是Homebrew目录归属不对可以执行sudo chown -R $(whoami) /opt/homebrewM系列或/usr/local/homebrewIntel再重新安装。装完后实际可执行文件一般带-jumbo后缀比如john会软链到john-jumbo。你可以执行john --version看到类似John the Ripper 1.9.0-jumbo-1的输出就对了。2.4 验证安装安装完成后我习惯跑一遍自带的自检脚本john --test这会测试所有格式的破解速度跑完会列出CPU和OpenCL的速度。看到输出里有ZIP相关的行就说明Zip格式支持没问题。如果只看到空白或者报错大概率是依赖没装全回头重新执行brew install john-jumbo就行。3. zip2john的配置与实战3.1 zip2john是什么它做了什么zip2john是一个用脚本语言写成的工具它并不会真的“解压”ZIP文件而是把ZIP头部和加密元数据提取出来计算成一个John能识别的哈希字符串通常存成.txt文件。这个哈希字符串里面包含了加密算法类型、盐值、校验和等等是John破解时的核心输入。你可能会问为什么要多这一步因为John直接读不了ZIP二进制文件而zip2john做的是“翻译”工作。它就像把一段加密对话里的暗号抄下来转成了John能听懂的暗号。3.2 快速生成Wordlist在破解前最好准备一个密码字典。虽然John自带了一些字典但很多时候自己整理一个针对性字典效率更高。我用的是网上公开的常用密码集合比如rockyou.txt不过macOS上默认没有需要自己下载或生成。如果你知道自己密码的常见套路比如“名字生日符号”可以手工写一个小字典mkdir -p ~/wordlists cat ~/wordlists/my.txt EOF 123456 password 123456789 qwerty abc123 test123 admin letmein 2024 2025 myname123 EOF别小看这个小文件在忘记密码但还记得大概模式的时候能直接命中。更专业的做法是从GitHub下载rockyou.txt解压后放到~/wordlists下后面破解命令里指定这个路径就行。3.3 提取ZIP哈希zip2john命令详解在终端里切到ZIP文件所在目录执行zip2john encrypted.zip hash.txt注意zip2john在Jumbo版安装后一般会直接进入PATH。如果你找不到可以先看which zip2john如果没有就在John的安装目录里找例如/opt/homebrew/Cellar/john-jumbo/1.9.0_1/share/john/zip2john。可以把该目录临时加入PATHexport PATH/opt/homebrew/Cellar/john-jumbo/1.9.0_1/share/john:$PATH执行成功后hash.txt里会有类似这样的内容encrypted.zip:$pkzip2$2*1*1*0*8e24*0*3c4e*6b0b*0*1*0*2a6c*...*$/pkzip2$这一行就看出来是ZipCrypto加密格式。如果ZIP是AES加密格式会类似$zip2$...。不管哪种John都能识别。3.4 理解哈希文件内容很多人拿到hash.txt后不知道里面那些数字是什么意思。其实不用完全看懂约翰会解析但你可以通过几个关键标识判断加密强度$pkzip2$表示ZipCrypto传统加密破解速度快几百万次/秒都没问题$zip2$表示WinZip的AES-128或AES-256加密破解速度会慢很多因为迭代次数更多算法更复杂。这一步的实操意义是如果你看到$zip2$说明后面的字典选择要更谨慎不能盲目跑大字典。拿我自己踩过的坑来说第一次遇到AES加密我直接跑rockyou跑了两个小时都没结果后来才反应过来是AES开销大得多赶紧换了掩码模式才跑出来。4. 密码破解从wordlist到增量攻击4.1 john命令的基本用法有了hash.txt就可以开始破解了。最简单的命令john --wordlist~/wordlists/rockyou.txt hash.txt这条命令会让John把rockyou.txt里的每一行都当作候选密码依次尝试。如果你前面用的是自定义小字典也一样指定。命令结束后John会直接打印出找到的密码。如果你希望把进度和结果写到文件里可以加--potname.pot参数。这个文件是John的“密码储藏罐”里面存已经破解出来的密码。以后再次跑同一个hashjohn会先检查pot文件不再重复破解。有时候换个规则继续跑记得不要删除这个文件否则还要重新跑一遍。4.2 指定破解模式与规则Wordlist只是最基础的模式。实际情况下用户密码并不会老老实实躺在字典里所以John支持对字典里的词进行“变形”比如把123456变成123456!把admin变成admin2024。常用参数是--rules。比如john --wordlist~/wordlists/rockyou.txt --rulesAll hash.txt这里的All是一整套规则集它会尝试大小写、前缀、后缀、字母替换、L33t变形等等。效果比单跑字典好很多但速度也会慢不少。如果你有GPU或者多核CPU开着还行如果只是本机跑建议先跑一遍不带规则的再用规则。另一种高效方式是掩码Mask攻击适合你知道密码的某一部分特征。例如你知道密码是8位全部小写字母那可以直接指定john --mask?l?l?l?l?l?l?l?l hash.txt?l代表小写字母?u大写?d数字?s符号。这种模式能把搜索空间控制得非常精准比遍历所有可能快得多。我知道不少资深使用者遇到实名数字组合的密码直接--mask?l?l?l?l?l?d?d?d两三分钟就能出来。4.3 增量模式incremental的使用技巧如果你的密码毫无规律Wordlist和掩码都失效那就轮到Incremental模式出场。它本质上是基于字符集顺序和频率的智能穷举先是1位字符、2位字符慢慢增加不会错过任何组合只要给足时间它一定能找到。用法john --incrementalDigits hash.txtDigits是内置的字符集纯数字还有Alnum字母数字、LowerNum、UpperNum等。你也可以自定义字符集文件在John配置里加入Incremental段落。但说句实话Incremental模式极其吃CPU如果密码超过8位且是混合字符很可能要跑几天。建议只在前面几种方式失败后并且你对密码长度有预估时才尝试。我个人的经验是先想想自己设置密码的习惯。如果是办公文件大概率是姓名缩写年份符号如果是个人资料可能是常用短语加数字。把这类猜测直接做成字典往往几分钟就能搞定比任何模式都有效率。4.4 性能优化与多核CPU利用John默认会使用所有可用的CPU核心所以你不需要手动设置多线程。不过你可以通过--fork参数明确指定进程数在某些场景下能避免资源竞争john --wordlist~/wordlists/rockyou.txt --fork4 hash.txt--fork4表示生成4个进程每个处理一部分字典。对CPU密集型的ZIP破解能明显提升吞吐量。在M1/M2这种大小核架构上我建议你观察活动监视器看看John有没有跑满效率核。有时候系统会把它调度到能效核上导致性能打折可以尝试在终端里用taskset或者干脆把其他大程序关掉。GPU加速是另一个方向。John Jumbo版支持OpenCL但macOS上的OpenCL支持并不算太好尤其M系列芯片官方支持有限。我试过几次配置起来很折腾最终性能还不如CPU多核跑得稳。除非你的是Intel Mac配了独立显卡否则不太建议折腾OpenCL。5. 常见问题与排查实录5.1 找不到zip2john命令这是我在论坛里看到最多的问题。解决方案在3.3节已经提过这里再补充一个快速定位方法find /opt/homebrew -name zip2john 2/dev/null如果找到就把它软链到/usr/local/bin下ln -s /opt/homebrew/share/john/zip2john /usr/local/bin/zip2john另外提醒一下某些版本的Homebrew安装路径可能是/usr/local/share/johnIntel Mac上常见。你可以用brew --prefix查看Homebrew根路径再去对应目录找。5.2 破解速度太慢怎么办破解速度由CPU性能、加密算法和密码复杂度共同决定。ZipCrypto传统加密在M2上能跑几千万次/秒但AES加密可能就只有几十万次/秒。如果你遇到了$zip2$格式还想去跑一个12位混合密码基本等于不可能的。这时候的策略是先把字典缩小到和用户相关的词公司名、姓名、年份启用规则做有限变形如果还不行就尝试掩码攻击精准锁定后几位实在不行只能承认这个密码强到需要超算级别放弃它。放弃不丢人我碰到过很多次与其耗电不如走正规的“重新打包”路线见下一节。5.3 遇到AES加密的ZIP包ZIP的标准加密叫ZipCrypto但不少压缩软件比如7-Zip、WinZip支持更安全的AES加密。这时候zip2john生成的哈希是$zip2$开头。破解AES比破解ZipCrypto慢得多而且John的适用性也有限。如果你确定是AES-256并且密码长度不低于8位且无规律说实话用John去破解的性价比很低。有一个相对实用的思路是如果这个ZIP包是7-Zip创建的还可以试试用7z的字典攻击工具比如7z2john提取出正确的hash再交给John。7z2john同样在john-jumbo包里。但效果只能说看运气。5.4 其他常见坑命令找不到john可能你之前装过别的版本卸载干净后重新装john-jumbo。破解过程中断只要pot文件存在重新执行相同命令John会从上次进度继续但注意不要随意改hash.txt文件否则可能会从头再来。字符编码问题如果你存在Windows上创建的字典可能有CRLF换行符导致密码后面带了个看不见的\r。可以用dos2unix或者sed -i s/\r$// dictionary.txt清理。内存峰值高某些增量模式会占用大量内存尤其在M系列上可能引起系统卡顿。建议减少--fork数量或者不要开太多应用。6. 安全与道德提醒6.1 什么情况下允许使用我觉得这篇文章最有价值的部分可能不是命令怎么敲而是“什么时候该用”这个判断。破解密码本质上是绕过访问控制。法律上只有你拥有文件的完全访问权或者得到系统所有者明确的书面测试授权这一类操作才被允许。比如你自己很久以前加密的备份盘密码忘了工具帮你恢复数据这是正当的。但同事发你一个加密包你想偷看内容这不叫恢复叫攻击。所以我建议你在操作前先确认三件事这个ZIP文件是本人创建的或者拥有合法所有权你尝试的密码恢复不会侵犯任何人的隐私你不在办公环境的非授权设备上操作以免触发安全合规问题。6.2 密码恢复的替代方案有时候John并不是最好用的那条路。如果你只是想拿回ZIP里的内容不妨先试试其他替代方案重新下载原文件看看发件人是否能重新发一份未加密版本联系原作者直接问密码最省事检查压缩软件有些ZIP文件是“假加密”用特定解压软件能直接绕过系统钥匙串如果你以前在Mac上解压过这个文件密码可能保存在“钥匙串访问”里去搜一下试试。这些方法在操作上肯定比跑破解工具合规得多也快得多。要是全都没用再回来让John帮你硬碰硬。我在实际项目里也遇到过客户坚持要求用暴力破解来证明“系统弱密码风险”那是在他授权的渗透测试范围内。这种合法授权场景正是John的用武之地。你自己个人的加密文件恢复操作得当也是完全可以接受的。最后分享一个在实际操作中很管用的技巧破解之前先在终端里跑一下zipinfo -v encrypted.zip看看ZIP头里的注释或者文件名本身有没有线索。有时候密码就藏在文件名里或者ZIP包的修改时间能帮你缩小年份范围。别上来就暴力工具只是辅助你的观察力才是第一生产力。