john全称John the Ripper是一款经典且功能强大的密码破解工具支持多平台Linux、Windows、macOS等主要用于破解各类哈希密码如Linux影子密码、Windows LM/NTLM哈希、数据库密码哈希、压缩文件密码哈希等。它提供多种破解模式单破解模式、字典模式、增量模式、掩码模式等支持自定义密码变形规则还配套大量“2john”辅助工具用于提取不同格式文件中的哈希值是渗透测试、安全审计和密码恢复领域的核心工具之一。核心命令格式命令格式说明john [OPTIONS] [PASSWORD-FILES]基础执行格式通过选项OPTIONS指定破解参数后接存储目标哈希的文件PASSWORD-FILES常用参数说明按功能分类1. 破解模式参数参数描述示例–single[SECTION[,..]]“单破解模式”基于用户名等信息生成密码变形默认或指定规则段john –single hashes.txt基于用户名生成候选密码–wordlist[FILE] –stdin字典模式从文件FILE或标准输入stdin读取密码john –wordlist/usr/share/wordlists/rockyou.txt hashes.txt–pipe类似–stdin批量读取密码支持规则适合管道传递字典cat dict.txt | john –pipe –rules hashes.txt–incremental[MODE]增量模式按字符集逐位暴力尝试默认或指定模式如alpha、digitsjohn –incrementaldigits hashes.txt仅尝试数字密码–mask[MASK]掩码模式按指定掩码规则生成候选密码需配合字符集john –mask?u?l?l?l?d?d hashes.txt1大写3小写2数字–markov[OPTIONS]马尔可夫模式基于概率生成密码需提前生成统计文件john –markov –mkv-statsstats.mkv hashes.txt–prince[FILE]PRINCE模式基于概率的密码生成从文件读取基础单词john –princebase_words.txt hashes.txt2. 规则与字符集参数参数描述示例–rules[SECTION[,..]]启用密码变形规则字典/PRINCE模式默认或指定规则段john –wordlistdict.txt –rulesbest64 hashes.txt–rules:rule[;..]使用“即时规则”直接定义规则无需规则文件john –wordlistdict.txt –rules:u hashes.txt全部大写–rules-stackSECTION[,..]堆叠规则在普通规则后追加应用或用于不支持规则的模式john –incremental –rules-stackappend1 hashes.txt–make-charsetFILE生成自定义字符集文件覆盖现有文件john –make-charsetmy_charset.chr基于统计生成字符集–min-lengthN指定候选密码最小长度字节john –wordlistdict.txt –min-length6 hashes.txt–max-lengthN指定候选密码最大长度字节john –incremental –max-length8 hashes.txt3. 结果与会话管理参数参数描述示例–show[left]显示已破解密码left时显示未破解哈希john –show hashes.txt显示已破解john –showleft hashes.txt显示未破解–sessionNAME为当前破解任务定义会话名用于恢复/状态查看john –sessionntlm_crack –wordlistdict.txt hashes.txt–restore[NAME]恢复中断的会话默认恢复最近会话指定NAME恢复对应会话john –restorentlm_crack–status[NAME]查看会话状态默认最近会话指定NAME查看对应会话john –statusntlm_crack–potNAME指定结果存储文件默认john.potjohn –potmy_results.pot –wordlistdict.txt hashes.txt–[no-]crack-status破解成功时是否输出状态行默认启用john –no-crack-status –wordlistdict.txt hashes.txt4. 哈希筛选与格式参数参数描述示例–format[NAME|CLASS][,..]强制指定哈希类型支持类型用–listformats查看john –formatNT hashes.txt强制按NTLM哈希破解–users[-]LOGIN|UID[,..]仅加载指定用户或排除指定用户的哈希john –usersroot,admin hashes.txt仅破解root和admin的哈希–salts[-]COUNT[:MAX]按盐值数量筛选哈希加载含COUNT个哈希的盐值john –salts1 hashes.txt仅加载单个哈希的盐值–costs[-]C[:M][,…]按成本值筛选哈希如bcrypt的工作因子john –costs10 hashes.txt仅加载成本值为10的哈希–showinvalid显示哈希文件中无效的行不匹配指定格式john –formatMD5 –showinvalid hashes.txt5. 性能与环境参数参数描述示例–forkN分叉N个进程并行破解利用多CPU核心john –fork4 –wordlistdict.txt hashes.txt4进程–nodeMIN[-MAX]/TOTAL分布式破解指定当前节点的编号范围共TOTAL个节点john –node1-2/4 –wordlistdict.txt hashes.txt4节点中的1-2号–save-memoryLEVEL内存节省模式1-3级级别越高内存占用越低john –save-memory2 –incremental hashes.txt–test[TIME]运行测试与基准测试每个测试运行TIME秒0为仅测试不基准john –test10 –formatNT测试NTLM哈希每个测试10秒–encodingNAME指定输入编码如UTF-8、ISO-8859-1john –encodingUTF-8 –wordlistdict_utf8.txt hashes.txt附常用掩码字符集掩码符号包含字符?l小写字母a-z?u大写字母A-Z?d数字0-9?s特殊字符!#$%^*等?a所有可打印字符?l?u?d?s?h十六进制小写0-9, a-f?H十六进制大写0-9, A-F?_空格字符附常用“2john”辅助工具哈希提取工具名称功能示例unshadow合并Linux /etc/passwd和/etc/shadow为john可识别的哈希文件unshadow /etc/passwd /etc/shadow linux_hashes.txtzip2john提取ZIP压缩文件的密码哈希zip2john protected.zip zip_hash.txtrar2john提取RAR压缩文件的密码哈希rar2john protected.rar rar_hash.txtpdf2john提取PDF文件的密码哈希pdf2john protected.pdf pdf_hash.txtoffice2john提取Office文件doc/xls/ppt等的密码哈希office2john protected.docx office_hash.txtssh2john提取SSH私钥文件的密码哈希ssh2john id_rsa ssh_hash.txthccap2john/hccapx2john提取WiFi WPA/WPA2握手包hccap/hccapx的哈希hccapx2john wifi_handshake.hccapx wpa_hash.txtjohn 完整使用教程1. 破解Linux系统哈希合并passwd与shadow场景获取目标Linux系统的/etc/passwd和/etc/shadow文件合并后破解用户密码。# 步骤1合并passwd和shadow生成john可识别的哈希文件 unshadow /path/to/passwd /path/to/shadow linux_hashes.txt # 步骤2使用字典模式破解优先尝试常见密码 john --wordlist/usr/share/wordlists/rockyou.txt --rulesbest64 linux_hashes.txt --sessionlinux_crack # 步骤3查看已破解结果 john --show linux_hashes.txt # 步骤4若字典未破解启用增量模式暴力尝试字母数字密码 john --incrementalalpha --sessionlinux_incremental linux_hashes.txt # 参数说明 # unshadow合并passwd用户信息和shadow哈希密码 # --rulesbest64应用best64规则密码变形提升破解率 # --sessionlinux_crack定义会话名方便后续恢复 # --incrementalalpha增量模式尝试字母数字组合默认包含大小写字母和数字2. 破解ZIP压缩文件密码用zip2john提取哈希场景破解受密码保护的ZIP文件protected.zip先提取哈希再破解。# 步骤1提取ZIP文件的密码哈希 zip2john protected.zip zip_hash.txt # 步骤2查看哈希文件确认提取成功 cat zip_hash.txt # 输出应包含ZIP文件名和对应的哈希 # 步骤3使用字典模式破解带规则 john --wordlist/usr/share/wordlists/rockyou.txt --rules --formatZIP zip_hash.txt --potzip_results.pot # 步骤4查看破解结果 john --show --formatZIP zip_hash.txt # 步骤5若字典失败使用掩码模式尝试6-8位数字密码 john --mask?d?d?d?d?d?d --min-length6 --max-length8 --formatZIP zip_hash.txt # 参数说明 # zip2johnjohn配套工具提取ZIP文件的密码哈希 # --formatZIP强制指定哈希类型为ZIP避免自动识别错误 # --mask?d?d?d?d?d?d初始掩码为6位数字配合min/max-length实现6-8位数字尝试3. 破解PDF文件密码用pdf2john提取哈希场景破解加密PDF文件secure.pdf先提取哈希再用字典规则破解。# 步骤1提取PDF文件的密码哈希 pdf2john secure.pdf pdf_hash.txt # 步骤2清理哈希文件部分情况下pdf2john输出含多余注释需保留有效哈希行 grep -v ^# pdf_hash.txt clean_pdf_hash.txt # 步骤3使用字典模式规则破解 john --wordlist/usr/share/wordlists/rockyou.txt --rulesall --formatPDF clean_pdf_hash.txt --sessionpdf_crack # 步骤4查看破解结果 john --show --formatPDF clean_pdf_hash.txt # 步骤5若密码复杂启用增量模式尝试混合字符 john --incrementalall --formatPDF clean_pdf_hash.txt --max-length10 # 参数说明 # pdf2john提取PDF密码哈希部分旧版PDF可能需指定格式如--formatPDF1.7 # --rulesall应用所有内置规则最大化密码变形覆盖范围 # --incrementalall增量模式尝试所有可打印字符?a适合复杂密码4. 单破解模式基于用户名生成候选密码场景已知目标用户名为“admin”“testuser”基于用户名变形生成密码如admin123、TestUser适合简单密码场景。# 步骤1准备含用户名的哈希文件格式用户名:哈希 echo admin:5f4dcc3b5aa765d61d8327deb882cf99 user_hashes.txt # admin的MD5哈希密码password echo testuser:d41d8cd98f00b204e9800998ecf8427e user_hashes.txt # testuser的MD5哈希空密码 # 步骤2启用单破解模式基于用户名生成变形密码 john --single --formatMD5 user_hashes.txt --sessionsingle_crack # 步骤3查看破解结果 john --show --formatMD5 user_hashes.txt # 参数说明 # --single单破解模式自动基于用户名、主机名等信息生成密码如用户名后加数字、特殊字符 # 适合破解“用户名简单后缀”类密码如admin2024、testuser!5. 掩码模式破解已知密码格式场景已知密码格式为“1位大写字母4位小写字母2位数字”如Atest12用掩码模式精准尝试。# 步骤1准备目标MD5哈希文件 echo Atest12的MD5哈希:7e240de74fb1ed08fa08d38063f6a6a9 mask_hashes.txt # 步骤2使用掩码模式破解匹配已知格式 john --mask?u?l?l?l?l?d?d --formatMD5 mask_hashes.txt --sessionmask_crack -v # 步骤3若需调整字符集自定义掩码如特殊字符结尾 john --mask?u?l?l?l?l?d?d?s --formatMD5 mask_hashes.txt # 参数说明 # --mask?u?l?l?l?l?d?d掩码规则?u大写?l小写?d数字对应“1大写4小写2数字” # -v详细输出查看当前尝试的候选密码6. 会话管理暂停与恢复破解场景破解大型哈希文件时需中途暂停后续恢复进度避免重复计算。# 步骤1启动带会话名的破解任务字典规则模式 john --wordlist/usr/share/wordlists/rockyou.txt --rules --formatNT large_ntlm_hashes.txt --sessionntlm_large # 步骤2中途暂停破解直接按CtrlCjohn自动保存会话 # 或在另一个终端发送暂停信号pkill -STOP john # 步骤3查看会话状态确认暂停成功 john --statusntlm_large # 步骤4恢复会话继续破解 john --restorentlm_large # 步骤5强制终止会话如需放弃 john --restorentlm_large --max-run-time0 # 参数说明 # --sessionntlm_large会话名唯一标识任务会话文件默认保存在~/.john/sessions/ # --statusntlm_large查看会话进度已尝试密码数、破解成功率等 # --max-run-time0恢复后立即终止用于强制结束任务7. 分布式破解多节点协同场景多台Kali主机协同破解同一批哈希如4台主机避免重复尝试提升效率。# 前提所有节点需使用相同的字典、规则和哈希文件建议通过NFS共享 # 节点1编号1-1共4个节点 john --wordlist/shared/dict.txt --rules --formatMD5 hashes.txt --node1-1/4 --sessiondistributed_crack # 节点2编号2-2共4个节点 john --wordlist/shared/dict.txt --rules --formatMD5 hashes.txt --node2-2/4 --sessiondistributed_crack # 节点3编号3-3共4个节点 john --wordlist/shared/dict.txt --rules --formatMD5 hashes.txt --node3-3/4 --sessiondistributed_crack # 节点4编号4-4共4个节点 john --wordlist/shared/dict.txt --rules --formatMD5 hashes.txt --node4-4/4 --sessiondistributed_crack # 查看总破解结果任意节点执行 john --show --formatMD5 hashes.txt # 参数说明 # --nodeMIN-MAX/TOTAL指定节点负责的密码范围TOTAL为总节点数 # 需确保所有节点的pot文件可共享或破解后合并pot文件cat node1.pot node2.pot total.pot8. 结果导出与筛选提取已破解/未破解哈希场景破解完成后筛选已破解密码并导出为表格格式或提取未破解哈希进行二次破解。# 步骤1显示所有已破解哈希格式用户名:密码 john --show --formatNT ntlm_hashes.txt cracked_ntlm.txt # 步骤2提取未破解哈希用于后续增量破解 john --showleft --formatNT ntlm_hashes.txt uncracked_ntlm.txt # 步骤3按用户名筛选已破解结果仅显示admin用户 grep admin: cracked_ntlm.txt admin_password.txt # 步骤4导出为CSV格式方便后续分析 sed s/:/,/g cracked_ntlm.txt cracked_ntlm.csv # 参数说明 # --showleft仅输出未破解的哈希无密码部分 # sed s/:/,/g将“用户名:密码”替换为“用户名,密码”生成CSV文件9. 基准测试测试破解性能场景测试当前主机对不同哈希类型的破解速度选择最优破解模式如字典vs增量。# 步骤1测试MD5哈希的破解性能每个测试运行5秒 john --test5 --formatMD5 -v # 步骤2测试NTLM哈希的多进程性能4进程 john --test5 --formatNT --fork4 # 步骤3测试增量模式数字字符集的性能 john --test5 --incrementaldigits --formatMD5 # 步骤4查看支持的所有哈希格式选择需测试的格式 john --listformats # 参数说明 # --test5每个测试运行5秒输出“每秒尝试密码数c/s” # --fork4启用4进程并行测试反映多核心性能 # 性能指标参考NTLM哈希在GPU加速下可达数百万c/sMD5可达千万级c/s常见问题与注意事项哈希格式识别错误若john无法识别哈希类型需用--format强制指定如--formatMD5、--formatNT可先用hashid工具识别哈希类型。字典文件准备Kali默认字典路径为/usr/share/wordlists/使用前需解压常用字典如gunzip /usr/share/wordlists/rockyou.txt.gz复杂场景建议使用专用字典如SecLists。规则使用技巧简单密码用--rulesbest64复杂密码用--rulesall自定义规则可编写规则文件参考/etc/john/john.conf中的规则段。内存占用控制处理大型字典时用--save-memory2或--save-memory3降低内存占用代价是轻微降低速度。法律合规性仅可对授权的系统/文件进行密码破解未经授权的破解可能违反《网络安全法》《刑法》等法律法规需提前获得书面授权。