
你有没有遇到过这种情况手头一个加密的ZIP压缩包密码死活想不起来试了十几次直接触发解压软件的防爆破锁定或者工作中接到授权范围内的安全审计任务上百个hash摆在面前靠手工一个个试密码试到天亮都跑不完。只要进入密码恢复这个领域Hashcat就是一个绕不开的名字。Hashcat号称世界上最快的密码恢复工具支持GPU加速能调用NVIDIA、AMD、Intel的显卡甚至CPU进行并行计算支持的哈希算法超过300种从常见MD5、SHA系列到WPA/WPA2握手包、ZIP压缩包、PDF文档、Windows NTLM几乎全覆盖。这篇文章不是照搬官方文档而是我按照自己实际使用的路径整理出来的一份完整指南从hashcat怎么用这类最基础的问题开始逐步深入到攻击模式选型、性能调优、ZIP密码恢复实战、常见报错排查。无论你是刚下载好工具还在摸索命令行的新手还是已经跑过几次字典但效率上不去的老手这篇都值得花点时间看完。1. Hashcat到底是什么为什么密码恢复话题绕不开它1.1 它解决的是一类暴力试错问题先说个基本认知Hashcat不是那种输入文件名点击恢复密码的图形化工具而是一个命令行工具。第一次打开它的人面对黑漆漆的终端和一长串参数可能第一反应就是劝退。但恰恰是这种命令行工具才把性能和灵活性做到了极致。密码恢复的本质是什么其实就是猜。把你猜的每个候选密码做一次哈希运算然后和目标哈希比对一样就说明猜中了。Hashcat干的事情就是把这个猜的过程加速到极致利用现代GPU动辄几千个计算核心的并行能力一秒可以尝试几十亿次甚至更多。你手动在网站上试密码一分钟顶多试几次Hashcat可能一秒钟就把你一年的手工尝试量跑完了。我见过不少人的误区以为Hashcat是万能解密软件丢进去一个加密文件就能直接输出明文密码。不是这样的。它负责的是穷举这部分核心工作前提是你得先拿到目标哈希值再选对哈希类型还得有合理的攻击策略。如果密码本身足够长、足够随机又用了高迭代次数的算法Hashcat也可能跑很久。所以它解决的是暴力试错的效率问题而不是绕过加密本身。1.2 核心原理哈希算法和GPU并行计算理解Hashcat的运行逻辑需要搞明白两件事哈希是怎么回事GPU为什么快。哈希函数例如MD5、SHA-256、bcrypt是一种单向函数它接受任意长度的输入输出固定长度的指纹。比如123456经过MD5运算后得到固定的32位十六进制字符串。困难在于这个过程不可逆你不能从哈希反推出原始值。所以唯一的办法就是把可能的原始值一个个算一遍看哪个算出来的哈希和手里的值一致。问题来了CPU虽然单核逻辑强但核心数量有限比如常见的8核16线程一次只能同时算16个候选值。而一块中端的NVIDIA显卡可能有3000多个CUDA核心相当于一次能并行算3000多个候选值。再加上GPU的运算单元针对高吞吐量做了优化所以同样的候选量GPU跑出来的速度可以比CPU快几十倍。Hashcat把这种并行能力发挥到了极致这也是它被称为最快密码恢复工具的根本原因。另外一个重要概念是哈希类型。不同的系统和文件使用了不同的哈希算法你要告诉Hashcat该用哪个算法编号。比如MD5是0SHA1是100NTLM是1000ZIP压缩包常见的是17220或17225。这个编号必须选对选错了就是Decrypting... 完全是乱码或者直接跑不出来这也是新手最常见的翻车点。1.3 关于合法使用一次必须说清楚的边界既然聊密码恢复就要把使用边界说在前面。Hashcat本身是中性的技术工具但技术工具用在哪里差别就大了。合法场景至少包含这几类一是恢复自己拥有的账号、文件、设备的密码比如自己有台老电脑的登录密码忘了自己压缩包里存着重要资料但密码想不起来二是拿到书面授权的安全测试比如评估公司内部系统弱口令比例或者在CTF比赛中完成密码类题目三是在实验室环境中研究密码学强度。所有动作都应该限定在你有权访问和测试的范围内。反过来说拿它去破解别人的账号、窃取他人加密文件内容这违反了法律底线。安装使用Hashcat时目标对象的授权和合法性永远排在第一位。我不可能也不应该在文章里教你绕过授权去使用这既是对你负责也是让这个工具保持正当技术身份的前提。后续所有示例请默认都是在自己的文件、自己的设备或者合法授权的环境下操作。2. 环境准备安装、驱动和hash类型识别2.1 下载安装先搞清楚中文版这个概念很多人搜索hashcat中文版下载这里先澄清一个冷知识Hashcat官方从来没有出过中文版它是一个纯英文界面的命令行工具主程序本身也不带图形界面。那网上流传的中文版是什么来路通常有三种可能一是在官方程序外面套了一层汉化界面脚本本质还是调用官方程序二是有些第三方打包者把文档和说明汉化了程序本身还是英文三是最需要警惕的某些非官方渠道下载的版本可能被植入了后门或木马。密码恢复工具本身权限就高如果你下载了一个被二次打包的可疑版本等于把整个系统的密码和账号信息拱手让人。所以我的建议非常明确到GitHub官方仓库下载原版或者通过操作系统官方包管理器安装运行库统统用官方渠道。看不懂英文界面没关系核心参数就那么几个配合翻译工具和本文档足够用。各平台的安装方式Windows到Hashcat官网或GitHub release页面下载对应压缩包解压后即可使用主程序是hashcat.exe依赖最小。LinuxDebian/Ubuntu系sudo apt install hashcat或到GitHub下载Linux版本。macOSbrew install hashcat安装过程会自动处理依赖。需要自编译的话官方仓库里有CMake和Makefile两种方式日常使用用预编译版即可。2.2 驱动、OpenCL/CUDA环境翻车重灾区装好主程序只是第一步真正决定Hashcat能不能调用GPU的是显卡驱动和OpenCL/CUDA运行时。我见过太多人程序装好了一跑命令就是各种CL_PLATFORM_NOT_FOUND_KHR或者cuInit failed十有八九都是这层环境的问题。NVIDIA显卡安装新版NVIDIA驱动同时确保CUDA Toolkit里包含OpenCL支持。Hashcat在Windows和Linux上会通过NVIDIA的OpenCL实现调用GPU所以驱动版本不能太旧。AMD显卡需要安装Adrenalin驱动它自带OpenCL运行时。Intel核显一般安装主板芯片组驱动即可但性能远不如独显。macOS从High Sierra开始用Metal APIHashcat通过Apple的Metal运行时调动GPU通常不需要额外装驱动但老版本macOS可能不支持某些GPU特性。判断环境是否就绪最直接的方法是跑一次基准测试。命令是hashcat -b如果执行后能看到列出了OpenCL或CUDA设备并且跑出了速度数据说明环境OK。如果报错优先排查驱动。另外要提醒一句不要同时装一堆版本的显卡驱动。我之前在Windows上因为驱动升级残留了一套旧驱动文件花了两个小时排查最后用DDU工具清理干净重装驱动才解决。2.3 先学会认hash再谈破解Hashcat打开的是纯文本或十六进制的哈希值不是直接丢文件给它分析密码。你需要先把目标文件比如ZIP、PDF、Word文档、WiFi握手包转换成对应格式的hash或者从数据库里直接导出哈希值然后才能让Hashcat干活。认hash是基本功。常见类型对应关系哈希/文件类型Hashcat模式编号说明MD50老网站数据库常见SHA-1100Git、老版本TLSSHA-2561400现代系统常见NTLM1000Windows系统密码哈希WPA-PBKDF2-PMKID/EAPOL22000WiFi密码握手包ZIP (ZipCrypto Store)17220传统ZIP加密方式ZIP (ZipCrypto AES)17225部分压缩软件生成的AES加密ZIPMS Office 20139600带文档加密的Office文件PDF 1.4 - 1.610500部分PDF加密怎么看一个hash是什么算法最朴素的办法是看长度和特征MD5是32位十六进制SHA-1是40位bcrypt开头是$2a$或$2b$NTLM也是32位但通常是大写ZIP类型用工具提取后会有特殊标识。辅助判断可以用Hashcat自带的hashcat --example-hashes命令它会输出每种模式的示例hash对照着看就能猜个八九不离十。2.4 命令行基础结构先搞清楚参数在说什么新手不要被Hashcat一长串参数吓到它的核心结构其实很简单hashcat -m 模式编号 -a 攻击模式 目标hash文件 字典或其他攻击参数-m指定哈希类型-a指定攻击模式后面是目标hash文件和攻击资源。攻击模式一共就那么几种最常用的0是字典攻击3是掩码攻击6和7是混合攻击。后面会逐个展开。建议第一次使用先把--help输出从头到尾浏览一遍不用背有个印象就行。真正的学习方式是边用边查遇到具体的需求再回来看参数含义。3. 第一次实战跑通一个完整的字典攻击3.1 准备一个测试hash为了不走弯路第一次练习建议拿一个绝对有把握的目标来试。比如自己创建一个用户密码设为password123然后把对应的MD5值算出来存成文件。用命令行生成MD5非常方便echo -n password123 | md5sum输出类似482c811da5d5b4bc6d497ffa98491e38把这串值保存到一个文本文件里比如target.txt每行一个哈希。再说一次这只是测试用的千万不要拿它去处理没有授权的目标。3.2 基础命令逐段拆解准备好hash文件后执行hashcat -m 0 -a 0 target.txt rockyou.txt逐段看-m 0告诉Hashcat目标是MD5。-a 0使用字典攻击模式。target.txt存放目标hash的文件。rockyou.txt字典文件就是候选密码列表。如果一切正常终端会显示当前速度、进度、已运行时间、以及破解出的结果。如果密码在字典里你会看到类似这样的输出482c811da5d5b4bc6d497ffa98491e38:password123冒号左边是hash右边就是恢复出来的明文说明破解成功。看到这个结果后Hashcat默认会把结果保存到potfile文件里这是一个战果记录下次跑到同样的hash它会自动标记为已破解不会重复计算。想看历史战绩用hashcat -m 0 --show target.txt3.3 速度和状态怎么看跑的时候屏幕上会出现几个关键指标Time.Estimated是预计剩余时间Speed.Dev.#是每个设备的计算速度单位kH/s是每秒千次MH/s是每秒百万次GH/s是每秒十亿次Recovered是已破解数量。如果你用的是GPU但速度看起来很低比如只有几百H/s别急着说Hashcat不行。先检查驱动是否生效再检查hash类型是否选对还有可能目标算法本身就慢——比如bcrypt这类设计就是专门抗GPU暴力的速度天然就低这时候用Hashcat反而可能不如一个针对性更强的方案。3.4 字典从哪来字典就是候选密码集合。rockyou.txt是最经典的一个从当年一个被泄露的社交网站数据库中提取而来包含1400万条真实密码覆盖面非常大。GitHub上有很多仓库提供下载也可以从hashcat官方相关资源库找到。需要说明的是使用这类语料库时要关注其来源和授权情况避免用于违法用途。中文密码的话建议在通用大字典基础上自己扩展数字、拼音、常见名称组合。实际工作里我最常用的组合方式是rockyou.txt打底叠加中文常用密码列表再配合规则引擎做变体效果比单纯用哪个单一字典都好。4. 攻击模式全解析从字典到掩码到规则4.1 字典攻击效率与覆盖率的平衡字典攻击-a 0是把字典里的每个词直接作为候选密码去尝试。它的优势是速度快一个几百万条的字典在中高端GPU上可能几分钟就跑完劣势是它只能跑出字典里恰好存在的密码。实际效果取决于字典质量。通用大字典适合碰运气但面对特定的目标往往需要定制字典。比如目标是一个公司环境你可以把公司简称、员工姓名、常见年份、部门英文名等组合生成一份专属字典再配合规则扩展攻击效果会比任何通用字典强得多。4.2 掩码攻击当你了解密码结构时效率极高掩码攻击-a 3本质上是精准暴力破解。它不是让你列出所有候选词而是指定每个位置允许出现的字符类型比如8位纯数字6位小写字母等等。常用占位符?d数字0-9?l小写字母a-z?u大写字母A-Z?s特殊符号?a上述所有可打印字符举个例子如果你知道目标密码是8位纯数字命令是hashcat -m 0 -a 3 target.txt ?d?d?d?d?d?d?d?d8位纯数字一共1亿种组合10⁸在现代GPU上几秒钟就能跑完。如果是8位小写字母就是26⁸≈2088亿种组合看起来很大但GPU每秒几十亿次的速度下最多也就几分钟到几小时。掩码攻击最重要的一点是聪明地猜结构。比如中国用户常用手机号后六位、生日八位19900101、姓名首字母加数字这些结构信息能极大缩小搜索空间。反过来如果你对密码结构一无所知又把掩码设置成?a?a?a?a?a?a?a?a?d这种空间会爆炸到几乎不可能跑完。4.3 规则引擎用一条规则生成千万级变体规则引擎是Hashcat最强大的功能之一也是新手到进阶的分水岭。规则的本质是对字典中的每个基础词做变换生成变体后再去尝试。比如把单词末尾加上123把字母o替换成0首字母大写这些都可以用规则做到。一个最简单的规则文件内容可能长这样$1 $2 $3 $0 c so0这几行的含义分别是在末尾追加数字1/2/3追加0首字母大写把字母o替换为0。每一条规则都会对字典里的每个词生成一个新变体。使用规则攻击的命令hashcat -m 0 -a 0 target.txt rockyou.txt -r rules/best64.ruleHashcat官方带了不少规则文件最常用的是best64.rule和rockyou-30000.rule。前者只有64条规则效果却覆盖了绝大多数常规变体后者是30000条规则的超集适合字典量小但目标密码复杂的情况但运行时间会大幅增加。规则引擎的好处是它把你对密码规律的直觉显式化。比如我审计一个公司时发现所有密码都是大写首字母姓氏两位数字结构就可以写一条规则首字母大写然后直接加两位数字。这种定向规则往往比盲目跑全量攻击快几个数量级。4.4 组合攻击和混合攻击组合攻击-a 1是把两个字典做笛卡尔积拼接。比如dict1.txt放常见姓氏dict2.txt放生日数字组合成姓氏生日形式。攻击命令hashcat -m 0 -a 1 target.txt dict1.txt dict2.txt混合攻击-a 6和-a 7是字典与掩码的前后拼接。-a 6是字典词掩码适合单词数字后缀这种结构-a 7是掩码字典词适合数字前缀单词。# 单词 4位数字 hashcat -m 0 -a 6 target.txt rockyou.txt ?d?d?d?d # 4位数字 单词 hashcat -m 0 -a 7 target.txt ?d?d?d?d rockyou.txt这种攻击方式特别符合现实中用户的密码习惯很多人喜欢用熟悉单词/姓名好记的数字所以混合攻击在真实场景中出效率往往比纯掩码或纯字典都高。4.5 攻击模式选择速查表攻击模式命令参数适用场景优势字典攻击-a 0知道密码可能是常见词速度快执行简单组合攻击-a 1两个字典片段拼接可覆盖词词结构掩码攻击-a 3知道密码长度和字符组成空间可控精准爆破混合攻击-a 6 / -a 7词数字数字词结构贴合真实习惯规则攻击-a 0 -r基础词表扩展覆盖面指数级扩大实际工作中我通常不会只用一种攻击模式而是组合使用先跑几份高质量字典再跑高频规则变体最后针对已知信息做掩码。每一轮跑完看一眼结果动态调整策略。5. 实战案例ZIP压缩包密码恢复完整链路5.1 为什么拿ZIP当案例zip密码恢复是这个话题下搜索量最高的场景之一原因很现实很多人会把资料打成加密ZIP备份若干年后密码忘得一干二净里面还存着重要文档。第三方收费的ZIP密码破解软件动辄几十上百元效果还不一定好。用Hashcat自己做免费、可控、还可以根据自己的记忆碎片定制攻击策略。先说清楚一件事不是所有ZIP加密都一样。老式ZIP加密ZipCrypto安全性较弱破解速度快AES加密的ZIP安全性高得多破解速度慢。压缩软件在创建加密ZIP时通常会让你选加密方式如果你的密码设得足够长AES版本可能需要极长时间才能恢复。这也是为什么要尽量回忆密码片段用掩码和规则把空间缩小。5.2 第一步提取ZIP的hashHashcat本身不能直接解析ZIP文件需要先用外部工具把ZIP文件转成hash格式。最常用的是John the Ripper自带的zip2john工具。假设文件是backup.zip执行zip2john backup.zip backup_hash.txt生成的文本包含类似这样的内容backup.zip:$zip2$*0*3*0*...中间以$zip2$开头的部分就是Hashcat需要的hash。有人会直接把这个整个文本丢给Hashcat这是新手常犯的错误。正确做法是把$zip2$...这段单独提取出来存进新的hash文件。5.3 第二步判断ZIP加密类型选定hash模式ZIP加密方式不同Hashcat模式编号也不同ZipCrypto传统加密对应模式17220ZipCrypto Store和17225ZipCrypto AES需要具体判断是哪种可以看zip2john输出里的标记或者用7z l -slt查看ZIP的加密方法字段。执行攻击时先验证一下模式是否正确hashcat -m 17220 -a 0 backup_hash.txt dict.txt hashcat -m 17225 -a 0 backup_hash.txt dict.txt如果模式选错通常表现为进度条走得很诡异速度异常慢或者立即结束这时可以换另一个模式试一下。5.4 第三步根据记忆碎片设计攻击策略到了这一步工具本身的命令已经很简单真正的挑战在于策略设计。我一般会问目标用户几个问题密码大概多长里面有没有特殊符号是英文单词、拼音还是纯数字跟姓名/生日有没有关系有没有可能是个固定短语加几个数字假设密码可能是名字拼音8位数字这个信息可以用规则攻击或组合攻击来覆盖方案一组合攻击dict_name.txt放姓和名的拼音dict_num.txt放常见8位年份/生日数字然后hashcat -m 17220 -a 1 backup_hash.txt dict_name.txt dict_num.txt方案二混合攻击直接用-a 6字典词后面跟8位数字掩码但8位数字全跑量比较大。如果更精准地判断是1990-2005年的生日那么前四位就能限定hashcat -m 17220 -a 6 backup_hash.txt dict_name.txt 199?d?d?d?d这种先用信息把搜索空间砍掉一个量级的思路才是密码恢复的核心方法论。5.5 第四步确认结果解压验证跑出结果后Hashcat会显示类似$zip2$*0*3*0*...:mypassword2024冒号后面就是恢复的ZIP密码。用这个密码去解压验证即可。需要说明的是ZIP密码破解速度受“校验方式”影响很大ZipCrypto的破解速度可以到上百万次每秒而AES版本可能只有几千次每秒。如果你的ZIP是AES加密密码又是20位随机字符那还是老实想想密码是啥或者找备份更实际。5.6 扩展其他常见格式的提取方式ZIP是例子思路可以复制到其他文件类型PDF用pdf2john.pl脚本提取hash对应Hashcat模式10500或10700。Office文档用office2john.py提取模式根据Office版本选9600、9700等。WPA/WiFi握手包用hcxpcapngtool把pcap转为Hashcat专用格式模式22000。压缩包7z用7z2john.pl提取模式11600。核心思路是一样的提取hash - 识别类型 - 选择模式 - 设计攻击策略。6. 性能调优与踩坑经验实测中容易翻车的地方6.1 设备选择先用基准测试说话一块好的GPU决定了破解速度的下限和上限。跑任何实战之前建议先做基准测试hashcat -b -m 0 hashcat -b -m 17220-b是全设备基准测试会分别跑所有设备的速度。通过基准测试你可以清楚看到自己手里硬件的实际能力从而预估一次攻击要多久。比如显卡跑MD5有50GH/s跑ZIP ZipCrypto有1000kH/s那8位纯数字ZIP10⁸组合理论上也就100秒左右——这种预估能力在实战里非常有用。如果只有CPU也没有显卡Hashcat同样支持CPU计算只是速度慢不少。应急场景也能用但长期搞密码审计的话一块NVIDIA独立显卡几乎是必选项。6.2 工作负载与性能参数别让显卡吃满还指望电脑流畅Hashcat默认会以固定负载工作你也可以通过-w参数调整工作负载级别-w 1到-w 4。日常使用时-w 2或-w 3比较合适如果开-w 4显卡基本满载电脑鼠标都会卡顿。跑长时间任务时我习惯用-w 3同时配合--status每10秒刷新一次状态。另一个常用优化参数是-O启用优化内核。它对某些哈希类型能明显提速但对另一些类型无效甚至可能报错。遇到Combinator类攻击报错时先试试去掉-O。还有-n和-u这两个参数用于调整GPU并行数量和负载分配。普通用户不需要手动改除非你是用老显卡遇到显存不足的问题。实际使用中我发现默认参数在中高端卡上通常已经接近最优花时间调参的收益远不如选一个更好的攻击策略。6.3 常见报错与排查链路这里列几个我实际遇到频率最高的报错每条都附排查思路。CL_PLATFORM_NOT_FOUND_KHR或No devices found显卡驱动没有正确安装或者OpenCL运行时缺失。Windows下用GPU-Z确认显卡驱动状态Linux下跑clinfo看OpenCL平台是否存在。问题基本都在驱动层。cuInit failedNVIDIA CUDA初始化失败一般是驱动和CUDA版本不匹配。NVIDIA驱动本身带了运行库不要另装一套与驱动版本不一致的CUDA Toolkit。重装驱动时用DDU彻底清理旧驱动后再装。Separate src is not possible某些攻击模式配合-O或者特定哈希类型时出现的错误。通常去掉-O就能解决如果还不行检查掩码是否指定了非法字符集。Out of memory显存不足字典过大或者规则过多导致GPU显存爆了。解决办法一是换用更小的字典二是减少并行数量-n 32这种调低三是在规则攻击时用--rule-to-skip等参数分段执行。Exhausted跑完了但没结果这不是报错而是告诉你当前攻击策略在这个搜索空间下没有命中。这时候应当调整攻击策略而不是加大力度重跑同一个任务。先想想有没有信息没用上生日手机号片段公司缩写想清楚再动手。6.4 几个容易被忽略的好习惯第一potfile是你的朋友。Hashcat默认把所有破解结果存在~/.hashcat/hashcat.potfile里。很多人跑完一次不记录结果下次换了环境又从零开始。我建议每做完一个项目把potfile单独备份一份命名成项目名。这个习惯救过我很多次。第二跑长时间任务时用--restore恢复任务。Hashcat允许你在任务进行中按s键保存进度之后用hashcat --restore接着跑。注意有些哈希类型不支持中途恢复大规模任务最好先用小数据集验证支持情况。第三以日志形式留痕。大规模审计时我习惯用--logfile-disable关闭日志改用--status --status-timer 10配合重定向输出存文件。这样既能实时监控又不会产生巨大的日志文件。第四注意温度和供电。GPU满负载跑一整天温度很容易飙到80度以上。长时间任务建议用nvidia-smi -lgc 频率锁定核心频率同时改善机箱散热。我自己的显卡跑过两天两夜的规则攻击温度稳定在75度以内靠的就是锁频加开放式机箱。第五进行长任务前先拿极小的样本验证链路的可行性。比如先跑一个你知道密码的测试hash确认模式、参数、命令全部正确再投入大部队。这个习惯能把跑了几小时发现模式选错了的惨剧扼杀在摇篮里。用了几年Hashcat我最深的体会是这个工具上手并不难难的是学会思考。思考目标密码可能长什么样子思考哪些信息能帮你缩小搜索空间思考该用字典、掩码还是规则。每次接到一个密码恢复任务我都把它当成一次情报分析题先搜集一切可用的线索再选择攻击策略最后才交给GPU这把锤子去砸。GPU只是执行者真正的破解思路永远在人脑里。希望这份从入门到实战的整理能让你少走一些我当年走过的弯路。