Kali Linux下使用Hashcat与Rockyou字典破解ZIP密码实战指南

📅 2026/7/14 5:23:19 👁️ 阅读次数 📝 编程学习
Kali Linux下使用Hashcat与Rockyou字典破解ZIP密码实战指南

1. 项目概述与核心价值

手头有个加密的ZIP压缩包,密码却怎么也想不起来,这种场景估计不少人都遇到过。无论是多年前备份的老照片,还是同事交接工作时留下的加密文档,一个被遗忘的密码就能让重要文件瞬间变成“数字砖头”。作为一名长期在安全领域摸爬滚打的从业者,我处理过太多类似的求助。今天,我就来分享一个在Kali Linux环境下,利用hashcat这款“密码恢复瑞士军刀”和著名的rockyou.txt字典,来尝试破解ZIP密码的完整流程。这个方法并非万能钥匙,它的成功率高度依赖于密码的复杂度和字典的质量,但对于常见的弱密码、常用单词组合,往往有奇效。整个过程就像是用一把精心打造的“撞匙”去尝试打开一把锁,核心在于将ZIP文件的加密哈希提取出来,然后用海量的密码候选词去碰撞匹配。如果你对Linux命令行有基本了解,并且手头有一个合法的、属于自己的加密ZIP文件需要恢复访问,那么这篇手把手的指南将为你提供一个清晰、可操作的路径。记住,技术工具的使用必须严格遵守法律法规,仅用于测试自己拥有所有权的资产或获得明确授权的测试。

2. 环境准备与核心工具解析

2.1 Kali Linux:为何是首选平台

Kali Linux并非破解密码的必需品,任何能安装hashcat的Linux系统甚至Windows都可以。但选择Kali作为演示环境,原因在于其“开箱即用”的便利性。它是一个为渗透测试和安全研究量身定制的Linux发行版,预装了海量的安全工具,包括我们今天要用到的hashcatrockyou.txt字典。这省去了我们四处寻找、安装和配置的麻烦,可以让我们把精力完全集中在破解流程本身。对于新手来说,在虚拟机(如VMware或VirtualBox)中安装一个Kali Linux是最快上手的方案,它能提供一个干净、隔离的测试环境。

注意:请务必在你自己完全控制的虚拟机或物理机上操作。未经授权对他人的加密文件进行密码破解是非法行为。

2.2 Hashcat:原理与工作模式剖析

hashcat是目前世界上最快的密码恢复工具之一,支持多种哈希算法(MD5, SHA家族, NTLM等)和加密格式(包括ZIP, RAR, PDF等)。它之所以强大,核心在于其利用GPU(显卡)进行并行计算的暴力破解能力,速度远超单纯依靠CPU的工具。

它的工作原理可以概括为“提取-碰撞”:

  1. 提取哈希:加密的ZIP文件本身不直接存储密码,而是用密码通过特定算法(如AES-256或传统的ZipCrypto)生成一个密钥,并用这个密钥加密文件。我们需要先用工具(如zip2johnzip2hashcat)从这个ZIP文件中提取出代表其加密状态的“哈希值”。这个哈希值就像是这把锁唯一的“指纹”。
  2. 碰撞匹配hashcat读取我们提供的密码字典(如rockyou.txt),将字典中的每一个候选密码,用同样的加密算法进行计算,生成一个临时哈希,然后与第一步提取出的目标哈希进行比对。如果两者一致,就说明找到了正确的密码。

hashcat支持多种攻击模式,对于我们这个场景最相关的是:

  • 字典攻击(-a 0):直接使用给定的密码字典文件进行尝试。这是我们本次主要使用的方法,前提是密码可能存在于字典中。
  • 组合攻击(-a 1):将两个字典中的词进行组合。
  • 掩码攻击(-a 3):当我们对密码格式有大概了解时(例如知道是8位数字,或“单词+两位数字”),可以用掩码来大幅缩小尝试范围,提高效率。

2.3 Rockyou.txt:传奇密码字典的来历与使用

rockyou.txt可能是网络安全领域最著名的密码字典之一。它源于2009年社交应用平台RockYou的一次数据泄露,其中包含超过3200万个用户的明文密码。正因为这些是真实用户使用过的密码,它成为了一个反映普通人密码设置习惯的“黄金标准”测试集。在Kali Linux中,它通常以压缩形式存放在/usr/share/wordlists/目录下。这个字典包含了从“123456”、“password”这类极其简单的密码,到一些常见的单词、名字、简单变体等,对于破解弱密码效果显著。

然而,必须清醒认识到它的局限性:对于复杂的、随机生成的、长度足够的密码(例如Tr0ub4dor&3correct horse battery staple这类由多个单词组成的密码),仅靠rockyou.txt是几乎不可能破解的。它的价值在于快速覆盖那些最常用的、最薄弱的密码设置。

3. 完整实操流程分步详解

下面,我们假设你已经在虚拟机中启动了一个Kali Linux,并且拥有一个待破解的、名为secret_files.zip的加密ZIP文件。

3.1 第一步:提取ZIP文件的哈希值

hashcat不能直接处理ZIP文件,它需要的是从ZIP文件中提取出的特定格式的哈希字符串。我们需要借助一个辅助工具。在Kali中,通常使用zip2john(来自John the Ripper工具套件)来完成这一步。

  1. 打开终端:在Kali Linux中,打开一个终端窗口。
  2. 定位文件:使用cd命令切换到你的ZIP文件所在的目录。例如,如果文件在桌面,可以输入:
    cd ~/Desktop
  3. 提取哈希:运行以下命令:
    zip2john secret_files.zip > zip_hash.txt
    • zip2john:是提取哈希的工具。
    • secret_files.zip:是你的加密ZIP文件名,请替换为实际文件名。
    • >:是重定向符,将命令的输出结果保存到文件。
    • zip_hash.txt:是保存提取出的哈希值的文本文件,名字可以自定。

执行后,如果ZIP文件加密方式受支持,你会在当前目录下得到一个zip_hash.txt文件。用cat命令查看一下:

cat zip_hash.txt

你会看到一串类似secret_files.zip:$pkzip2$1*2*2*0*10*8*a4f8c6fe*0*45*0*10*a4f8c6fe*5f7b*$/pkzip2$的字符串。$pkzip2$开头到结尾的这一长串,就是hashcat能够识别的哈希值。我们需要复制这一整行(从secret_files.zip:开始到行尾)。

3.2 第二步:准备Rockyou密码字典

在Kali中,rockyou.txt.gz通常已经存在,但我们需要解压它。

  1. 进入字典目录
    cd /usr/share/wordlists
  2. 解压字典rockyou.txt通常以gzip压缩格式存放。解压命令如下:
    sudo gzip -d rockyou.txt.gz
    • 需要sudo权限,因为/usr/share是系统目录。
    • -d参数代表解压(decompress)。
    • 解压后,你会得到一个约130MB的rockyou.txt文件,里面一行一个密码。
  3. (可选)查看字典:你可以用headwc命令简单查看一下:
    head -20 rockyou.txt # 查看前20行 wc -l rockyou.txt # 统计总行数(超过1400万行)

3.3 第三步:使用Hashcat执行字典攻击

现在,核心材料(目标哈希和密码字典)都已就位,可以开始“碰撞”了。

  1. 回到工作目录:假设你的zip_hash.txt在桌面。

    cd ~/Desktop
  2. 构造并执行Hashcat命令:这是最关键的一步。基本命令格式如下:

    hashcat -m 13600 -a 0 -o found_password.txt zip_hash.txt /usr/share/wordlists/rockyou.txt

    让我们拆解这个命令的每一个部分:

    • hashcat:调用主程序。
    • -m 13600:指定哈希类型(hash-mode)。13600对应的是 PKZIP (Zip Crypto)。这是传统ZIP加密(ZipCrypto)的模式号。如果你的ZIP使用的是更新的AES-256加密,模式号是1721017220(分别对应不同密钥长度)。你可以先用zip2john提取,如果哈希串以$pkzip2$开头,通常用13600;如果以$zip2$开头,可能需要尝试17200系列。这是最容易出错的地方之一。
    • -a 0:指定攻击模式为字典攻击(Straight)。
    • -o found_password.txt:指定一个输出文件。如果破解成功,找到的密码会保存在这个文件里。
    • zip_hash.txt:包含目标哈希的文件。注意,这里不是ZIP文件本身,而是上一步生成的文本文件。但更常见的做法是直接粘贴哈希值,我们稍后说明。
    • /usr/share/wordlists/rockyou.txt:密码字典的完整路径。

    然而,更高效、更常见的做法是直接将哈希值作为参数,而不是通过文件。首先,从zip_hash.txt中复制出完整的哈希字符串(例如$pkzip2$1*2*2*0*10*8*a4f8c6fe*0*45*0*10*a4f8c6fe*5f7b*$/pkzip2$)。然后使用如下命令格式:

    hashcat -m 13600 -a 0 -o found_password.txt '$pkzip2$1*2*2*0*10*8*a4f8c6fe*0*45*0*10*a4f8c6fe*5f7b*$/pkzip2$' /usr/share/wordlists/rockyou.txt

    务必用单引号将哈希值包裹起来,因为其中的$符号在Bash shell中有特殊含义(表示变量),引号可以防止其被解析。

  3. 命令执行与监控:按下回车后,hashcat会开始工作。如果你的系统有性能较强的独立显卡(NVIDIA或AMD),并且安装了正确的驱动(在Kali中通常已集成或可通过nvidia-detect等工具安装),hashcat会自动调用GPU进行运算,速度会非常快。你会在终端看到滚动的状态信息,包括当前速度(H/s,每秒尝试多少次哈希)、进度、预计剩余时间等。

    • Status:显示为Running
    • Speed:根据你的硬件,可能从几千到几十亿H/s不等。GPU破解速度远超CPU。
    • Recovered:如果找到密码,这里会从0/1变为1/1。
  4. 破解成功:当hashcat在字典中找到了匹配的密码,它会停止运行,并在终端用绿色高亮显示Status: Cracked。同时,密码会按照-o参数指定,写入found_password.txt文件。你可以用cat found_password.txt查看结果,格式通常是哈希值:密码

  5. 破解失败:如果rockyou.txt字典跑完都没有匹配,Status会显示为Exhausted,表示字典耗尽,攻击失败。这时就需要考虑其他更大的字典、组合攻击、掩码攻击或者基于规则的变形攻击了。

4. 高级技巧与疑难问题排查

4.1 模式(-m)选择:ZipCrypto vs AES-256

这是新手最常卡住的地方。如何判断ZIP文件用的是哪种加密?

  • 简单方法:在Windows或macOS上,用右键查看ZIP文件属性,在加密方式一栏可能会注明“AES-256”或“传统加密”(即ZipCrypto)。
  • 技术方法:用zip2john提取哈希后观察。
    • 哈希值以$pkzip2$开头:这是传统的ZipCrypto,使用-m 13600
    • 哈希值以$zip2$开头:这通常是WinZip的AES加密,模式可能是-m 17200(WinZip, AES-128),-m 17210(WinZip, AES-192),-m 17220(WinZip, AES-256)。但更常见的是PKZIP的AES加密。
    • 对于现代软件(如7-Zip, macOS归档工具)创建的AES-256加密ZIP,zip2john提取的哈希可能以$zip2$开头,并需要尝试-m 17225-m 17230等模式。一个更稳妥的方法是使用hashcat的示例哈希功能来识别。你可以去hashcat的官方Wiki页面查找“example hashes”,那里有所有模式对应的示例哈希,对比一下就能确定。

实操心得:如果不确定模式,一个笨办法但有效的方法是,先用最常见的-m 13600(ZipCrypto)尝试。如果hashcat报错“Token length exception”或“Line-length exception”,说明哈希格式不对。这时再去研究哈希串的特征,或者用hashcat --example-hashes | grep -A5 -B5 zip命令在本地查看示例,对比确定正确的-m值。

4.2 提升破解效率的策略

如果rockyou.txt失败了,不要轻易放弃。除了换用更大的字典(如crackstation.txt),还可以尝试以下策略:

  1. 规则攻击(-a 0 with -r):这是字典攻击的威力增强版。规则文件可以定义对字典中的每个单词进行一系列变换,如首字母大写、尾部添加数字(123)、符号替换(a->@, s->$)等。Kali自带了大量规则文件在/usr/share/hashcat/rules/目录下。例如:

    hashcat -m 13600 -a 0 -o found_password.txt zip_hash.txt /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule

    这条命令会用best64.rule规则对rockyou.txt里的每个密码进行64种常见变形后再尝试,极大增加了命中率。

  2. 掩码攻击(-a 3)的针对性尝试:如果你对密码有一些模糊的记忆(比如“好像是名字加出生年份”),掩码攻击能极大缩小范围。例如,假设密码是8位纯数字:

    hashcat -m 13600 -a 3 -o found_password.txt zip_hash.txt ?d?d?d?d?d?d?d?d

    ?d代表一位数字。?l代表小写字母,?u代表大写字母,?s代表特殊符号。掩码攻击在已知部分密码结构时效率极高。

  3. 组合攻击(-a 1):如果你有两个相关的单词列表,可以尝试组合。例如,一个常见姓氏列表和一个常见数字列表组合。

4.3 常见错误与解决方案速查表

错误现象或问题可能原因解决方案
hashcat (n) is not an NVIDIA GPU未正确识别或使用NVIDIA GPU。1. 运行nvidia-smi检查驱动和GPU状态。
2. 安装NVIDIA驱动:sudo apt install nvidia-driver
3. 使用-D 2强制使用CPU(慢):hashcat -D 2 ...
Token length exception哈希模式 (-m) 选择错误,或者哈希字符串格式不对、不完整。1. 确认ZIP加密类型,选择正确的-m值。
2. 检查复制的哈希字符串是否完整,特别是开头和结尾的$符号。
3. 确保哈希值用单引号包裹。
No hashes loadedhashcat无法从提供的文件或参数中解析出有效哈希。1. 如果从文件加载,检查文件路径和内容。
2. 如果直接粘贴哈希,检查格式,并用单引号包裹。
3. 使用hashcat --example-hashes对比正确格式。
Exhausted字典攻击完成,未找到匹配密码。1. 尝试更大的密码字典。
2. 结合规则攻击 (-r)。
3. 如果对密码有印象,尝试掩码攻击 (-a 3)。
4. 考虑密码可能不在常用字典内,需要其他线索。
破解速度极慢(仅几百H/s)hashcat可能运行在CPU模式,或者GPU未发挥性能。1. 运行hashcat -I查看可用的硬件设备。
2. 确保使用了正确的GPU驱动。
3. 尝试在命令中添加-w 3-w 4以提高工作负载,但会增加系统负荷。
zip2john执行报错或提取的哈希为空ZIP文件可能使用了不受支持的强加密(如某些AES-256变体),或者文件已损坏。1. 尝试使用其他工具,如fcrackzip(仅限ZipCrypto)先做简单测试。
2. 确认ZIP文件没有损坏。
3. 搜索针对特定加密软件(如7-Zip特定版本)的哈希提取工具。

4.4 资源管理与优化建议

  • 字典管理rockyou.txt只是起点。可以收集或生成针对特定目标(如公司名、产品名、本地常见词汇)的定制字典,这比盲目使用超大通用字典更有效。
  • 利用硬件:密码破解是计算密集型任务。一块好的显卡(尤其是NVIDIA RTX系列)能带来数量级的速度提升。确保你的Kali虚拟机有足够的CPU核心数和内存分配给主机GPU。
  • 会话恢复hashcat支持会话恢复。如果破解过程被中断,可以使用--session参数命名一个会话,之后用--restore恢复。例如:
    hashcat -m 13600 -a 0 --session myzipcrack -o found.txt hash.txt rockyou.txt # 中断后... hashcat --session myzipcrack --restore
  • 基准测试:在开始真正的破解前,可以用hashcat -b对你的硬件(CPU/GPU)进行基准测试,了解其大致性能。

整个流程走下来,你会发现技术本身并不神秘,核心在于对工具原理的理解、对细节的把握(尤其是哈希模式的选择),以及耐心和策略。对于自己设置的简单密码,这个方法很可能在几分钟甚至几秒钟内就帮你找回访问权限。但对于真正复杂的密码,它更像是一个提醒:重要的文件,要么用强密码并妥善保管,要么就考虑使用无需密码的加密方式(如通过加密容器Veracrypt),并将密码提示或备份密钥存放在安全的地方。技术是解决问题的钥匙,但良好的安全习惯才是避免问题的根本。