使用Hashcat破解ZIP压缩包密码探索记录
本文最后更新于 2025年8月6日 上午
Hashcat 被誉为世界上最快的密码破解工具,本文只是一个入门探索,通过一个破解 ZIP 压缩包密码的示例,展示如何使用Hashcat。
1 什么是密码哈希
Hashcat的输入不是什么压缩包,而是需要密码哈希
。简单来说,哈希是一种将任意长度的数据(如你的密码 “kuon.ilove”)通过一个数学算法转换成一个固定长度的、独一无二的字符串的过程。 你可以把它想象成一个数字指纹
生成器,它具备:
- 单向性: 从你的密码生成哈希很容易,但从哈希反推出原始密码在数学上是极其困难的,近乎不可能。
- 唯一性: 即使密码只有微小的改变(例如 “kuon123” 和 “kuoN123”),生成的哈希值也会截然不同。
- 固定长度: 无论你的密码是 “123” 还是 “111112222233333”,生成的哈希值长度都是固定的。
当你在 ZIP 文件上设置密码时,ZIP 程序并不是直接存储你的密码原文,而是存储其哈希值。当你尝试解压时,程序会把你输入的密码进行哈希运算,然后将结果与存储的哈希值进行比较。如果两个“数字指纹”匹配,文件就会被解开。
那为什么需要破解哈希,而不是直接破解ZIP?
因为直接对 ZIP 文件进行密码尝试效率极低。而将密码哈希提取出来后,我们可以利用 Hashcat 和强大的 GPU 资源,以惊人的速度进行数十亿次的“哈希比较”操作,这正是密码破解的核心所在。
2 从ZIP中提取哈希
Hashcat没办法从ZIP中获取哈希,得使用另一个工具:John the Ripper
,它其实也是个密码破解工具,只是速度没Hashcat快。所有这里只用它来获取哈希值。
在官网中下载对应系统的软件,我这里用的是john-1.9.0-jumbo-1-win64,这个就是软件主体,而我们需要的工具在john-1.9.0-jumbo-1-win64\run
下,名为zip2john.exe
。
现在,我们需要破解的ZIP文件为:E:\test1.zip
然后创建一个保存bash的文件:E:\zip.bash
执行zip2john.exe
:
1 |
|
如果你只想控制台打印,手动复制,就删除> E:\zip.hash
1 |
|
这串看起来复杂的字符就是我们需要的哈希。其中 $pkzip2$ 是一个重要的标识符,它告诉我们这是何种类型的哈希。最终字符串只能被$/pkzip2$
包裹,所有需要手动删除下抬头的test1.zip/1.srt:
和结尾的:1.srt:test1.zip::E:\test1.zip
john还有个GUI,johnny,需要额外下载和安装,就没用。
现在,我们已经准备好将它交给 Hashcat 处理了。
3 攻击模式
首先下载hashcat,解压后进入文件夹hashcat-7.0.0
,测试命令hashcat.exe -h
,命令表可以看hashcat的wiki
Hashcat命令的-a
参数用来控制攻击模式,可以理解为选择不同的战术,
- -a 0 | 字典攻击 (Straight Attack)
这是最基本也是最常用的模式。你提供一个包含大量潜在密码的文本文件(称为“字典”或“词典”),Hashcat 会逐一尝试其中的每一个词。- 适用场景: 猜测密码是常见的单词、短语、泄露过的密码等
- -a 1 | 组合攻击 (Combination Attack)
这个模式会取两个字典,然后将第一个字典中的每个词与第二个字典中的每个词进行组合。- 适用场景: 猜测密码是由两个单词组合而成,如 lovebird 或 dragonfly
- -a 3 | 掩码攻击 (Mask Attack)
这是后面即将使用的模式,也是最强大、最灵活的模式。它不是使用现成的词典,而是根据你定义的“掩码”(一个包含字符集和固定字符的模板)来动态生成密码候选- 适用场景: 当你能猜测出密码的部分结构时。
- -a 6 | 混合攻击 (Hybrid: Wordlist + Mask)
字典攻击和掩码攻击的结合。它会取字典中的每一个词,然后在词的末尾附加由掩码生成的字符。- 适用场景: 猜测密码是在一个常用词后面加了数字或符号,如 password123。
- -a 7 | 混合攻击 (Hybrid: Mask + Wordlist)
与 -a 6 相反,它会在字典词的前面附加掩码生成的字符。- 适用场景: 猜测密码是在一个常用词前面加了特殊字符或年份,如 @admin 或 2024admin。
这里懒得弄Wordlist
,于是使用掩码攻击模式。
如果想要使用字典模式,可以在网上找到些:pentest-everything、Passphrase wordlist
4 掩码攻击
在密码破解的世界里,效率就是一切。当面对一个未知的密码哈希时,我们如同在浩瀚的宇宙中寻找一颗特定的星星。暴力破解,即尝试所有可能的字符组合,虽然理论上可行,但在现实中往往因为耗时过长而变得不切实际。这时,一种更智能、更高效的攻击方式——掩码攻击(Mask Attack)便应运而生。
简而言之,掩码攻击就是我们提前预判密码可能的情况,在限定的情况下进行尝试,毕竟人类在创建密码时往往会遵循一些可预测的模式。
现在我猜测这个压缩包的密码是个域名,最大只有10位,现在来编写数据集和掩码。(如果传统暴力破解,轮询所有字符,估计得跑几年)
Hashcat 为我们提供了一系列方便的内置字符集:
- ?l = abcdefghijklmnopqrstuvwxyz
- ?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ
- ?d = 0123456789
- ?s = «空格»!”#$%&’()*+,-./:;<=>?@[]^_`{|}~
- ?a = ?l?u?d?s (即以上所有字符的组合)
- ?b = 0x00 - 0xff (所有可能的字节)
当内置字符集无法满足你精细化的需求时,可以使用自定义字符集。Hashcat 提供了四个参数 -1, -2, -3, -4来定义它们
例如,要定义一个只包含小写字母和数字的字符集,可以使用以下任意一种方式
1 |
|
现在我猜测的密码是域名,那么字符集是三个:
- 小写字符
- 数字0-9
- 点号
数据集则是:
1 |
|
猜测域名可能最长10字符,最短3字符,那么最后结果为:
1 |
|
这个参数的意思就是使用自定义数据集,自动尝试4到10位。
5 哈希类型
-m
参数用于告诉 Hashcat 你要破解的哈希属于哪种类型。世界上有成百上千种哈希算法(MD5, SHA-256, bcrypt, PKZIP…),每一种算法的计算方式都不同。
想象一下,每种哈希类型都是一把形状独特的锁。你必须告诉 Hashcat 你要开的是哪一把锁,它才能制造出正确形状的钥匙去尝试。如果你提供了一个 PKZIP 的哈希,却告诉 Hashcat 这是 MD5 哈希(-m 0),那么 Hashcat 生成的所有“钥匙”都将是错误形状的,无论它尝试多少次、速度有多快,结果永远是失败。
我们可以在hashcat wiki中找到支持的哈希类型。
比如ZIP相关:
模式号 | 含义 | 适用情况 |
---|---|---|
17200 | PKZIP (Compressed) | 最常用,绝大多数单文件/常规 ZIP |
17220 | PKZIP (Compressed Multi-File) | 多文件压缩包(含多个文件/目录) |
17225 | PKZIP (Mixed Multi-File) | 多种压缩方法混合的多文件 ZIP |
17230 | PKZIP (Mixed Multi-File Checksum-Only) | 混合多文件且仅校验和 |
17210 | PKZIP (Uncompressed) | 未压缩的 ZIP(极少见) |
20500 | PKZIP Master Key | 主密钥破解(极罕见场景) |
20510 | PKZIP Master Key (6 byte optimization) | 主密钥破解特殊优化 |
绝大多数情况下,直接用 -m 17200 就好了。
6 开始破解吧~
根据上面的结果,组合命令,在hashcat-7.0.0
目录下执行:
1 |
|
在运行中有一些功能:
[s]tatus
功能: 查看当前破解进度和状态。
用法: 直接按s
键。
说明: hashcat 会立即在终端输出当前的破解进度、速度、已尝试密码数量、剩余时间等详细信息。
[p]ause
功能: 暂停破解过程。
用法: 直接按p
键。
说明: 程序会暂停,进入挂起状态。你可以稍后按r
(resume)键恢复破解。
[b]ypass
功能: 跳过当前任务。
用法: 直接按b
键。
说明: 如果你设置了多个 hash 或任务,b
可以跳过当前的 hash 或任务,进入下一个。
[c]heckpoint
功能: 立即生成一个恢复点(checkpoint)。
用法: 直接按c
键。
说明: hashcat 会立刻保存当前破解进度到恢复文件(.restore),方便你以后中断后恢复进度。
[f]inish
功能: 完成当前任务后自动退出。
用法: 直接按f
键。
说明: hashcat 会在当前破解任务完成后自动退出,而不是等待所有任务都结束。
[q]uit
功能: 立即退出 hashcat。
用法: 直接按q
键。
说明: 程序会立刻终止,当前进度会被保存到恢复文件(.restore),下次可以恢复。
我设备是核显Graphics 750,独显3060-8G,I7-i1700@2.5GHz。8位以下用了一小时,第九位时预估时间是34个小时,呃- -|,之前只有小写字母测试十几分钟就跑完了,现在加上数字后,数量级就爆炸了。
最终跑完用了70分钟:

最终结果会被保存到hashcat.potfile
中,当然控制台也会打印
7结语
本文告诉大家,设置密码的时候尽量长一点,尽量使用不同类型的字符!