简介:资源包内含hydra网络登录爆破工具的Windows便携版及一批常用密码字典,面向安全测试、渗透学习与账户口令强度验证场景。压缩包共99个文件,包括hydra.exe和pw-inspector.exe两个可执行程序、32个cyg系列动态库依赖,以及37个txt格式密码字典,字典来源覆盖xato-net、darkweb2017、probable-v2及部分外语词表,另有README、git配置和示例数据,整体120.9MB。目前已有2141人学习下载。借助Windows可直接运行的hydra,用户免去在Linux折腾编译或安装依赖的环节,解压后即可对多种网络服务开展授权口令尝试;内置字典从数百条到千万级不等,支持按场景选用,便于靶场练习、弱口令排查和字典策略研究。对刚接触口令爆破的初学者,可据此熟悉hydra参数与常见服务模块;对进阶测试者,则可用作字典扩充与口令规律分析的素材。
1. 拿到 Windows 版 hydra 和 txt 字典:先别急着双击
能搜到这篇的朋友,多半是手里刚下了一个压缩包,解压出来有hydra.exe,旁边扔着几个.txt字典文件,双击一跑要么闪退、要么报个 0xc000007b、要么跑半天一个密码都没试出来。这跟 Linux 上 apt 装完就能跑完全是两回事。hydra 的 Windows 版是个特殊形态,它依赖 OpenSSL 和一堆运行库,而 txt 字典的编码、换行符、排序方式直接影响破解效率和结果质量。这篇博文就把 Windows 版 hydra 从安装、验证、准备字典到跑通一次完整测试的全流程拆给你,新手照着做能出结果,熟手也能在参数和字典预处理上看到平时容易忽略的坑。
2. Windows 版 hydra 的安装与运行验证:先把环境立住
2.1 预编译包和自编译,选哪个
Windows 上跑 hydra 有两条路:一是用 Cygwin 或 MSYS2 自己编译源码,二是直接下载别人已经编译好的 release 包。自编译要装 Cygwin、拉源码、配 OpenSSL 头文件,折腾半天最后可能挂在某个依赖版本上,对大多数场景不值当。我一般会选预编译包,但下之前先看两个东西:包里有没有 OpenSSL 的 DLL(通常叫libssl-3-x64.dll或类似名字),以及有没有cygwin1.dll。缺了任何一个,hydra 都会在启动时报错或者根本起不来。
下载好之后不要直接丢到系统盘根目录,更不要放在带空格和中文的路径下,C:\Users\你的用户名\Desktop\hydra这种路径在调用时容易出怪问题。我习惯建一个干净的目录,比如D:\tools\hydra,把 exe 和 dll 全部放平,后面所有命令行操作都在这个目录下进行。
2.2 验证安装是不是真的可用
装完先别急着跑密码,先验证一下程序本身能不能正常工作。打开 cmd,切到 hydra 目录:
cd /d D:\tools\hydra hydra.exe -h如果能看到一长串帮助信息,列出-L、-P、-t、-w这些参数,说明运行环境基本没问题。如果报错The application was unable to start correctly (0xc000007b),那 99% 是缺 DLL 或者 DLL 位数不对,把 64 位和 32 位的依赖混着放了。如果报The code execution cannot proceed because libssl-3-x64.dll was not found,那就是 OpenSSL 没放进去,去预编译包发布页把对应版本的完整依赖一起下载。
有朋友一上来就对着内网某台服务器跑,跑之前先确认 hydra 支持你想测的那个服务。hydra.exe -h输出末尾会列出所有支持的服务模块,比如ssh、rdp、http-get、smb、ftp等。如果列表里没有你要用的服务,换工具或者换版本,别硬跑。我见过有人拿不支持 RDP 的版本去测 Windows 远程桌面,结果跑了一整晚全部是invalid,纯属白费电。
验证通过之后,建议顺手建一个run.bat放常用命令模板,以后每次改参数字典就行,少打一半字:
@echo off cd /d D:\tools\hydra hydra.exe -L users.txt -P pass.txt 192.168.1.100 ssh -vV -o hydra.log pause这里把日志输出到文件里,省得终端刷屏看不清。注意-o hydra.log是输出结果文件,不是运行日志,如果你想看完整尝试过程,需要配合-vV,也就是 verbose 模式,把每个尝试的用户名和密码都打到屏幕上。
3. txt 字典的门道:换行符、编码和排序都能让结果翻车
3.1 每一行一个词,但行尾不能随便
hydra 的字典文件要求每行一个候选词,行与行之间用换行符分隔。Windows 自带的记事本保存文本默认是 CRLF(回车+换行),Linux 下准备的字幕文件往往是 LF(只有换行)。hydra 的 Windows 版对 CRLF 一般能容忍,但有些编译版本在读取最后一行时会带上\r字符,导致实际尝试的密码变成password\r这种脏数据,服务端收到的字符串带了个隐形尾巴,永远匹配不上。保险做法是拿到字典后先统一转成 LF,用 Visual Studio Code 打开,右下角点一下行尾序列,选 LF 保存,或者直接用命令转换:
# 在 cmd 下用 PowerShell 转换 powershell -Command "Get-Content pass.txt | Set-Content -Encoding utf8 pass_lf.txt"3.2 UTF-8 编码和 BOM:第一个单词永远多一个不可见字符
这个问题特别隐蔽。如果你的字典文件用 UTF-8 带 BOM 保存,hydra 读第一行时会把 BOM 标记\xef\xbb\xbf一起读进去,然后它尝试的第一个密码就变成了\xef\xbb\xbfpassword,服务端当然是拒绝的。现象是跑别的词都能正常提示密码错误,唯独第一个词的结果完全对不上。
解决的办法是保存成 UTF-8 无 BOM,或者在跑之前把字典文件重存一遍。在 Windows 上我一般用 Python 统一处理:
# 用 Python 把所有字典转为 UTF-8 无 BOM 的 LF 格式 with open('pass_raw.txt', 'rb') as f: data = f.read() # 去掉开头的 BOM if data.startswith(b'\xef\xbb\xbf'): data = data[3:] # 把 CRLF 换成 LF data = data.replace(b'\r\n', b'\n') with open('pass_clean.txt', 'wb') as f: f.write(data)这段脚本做两件事:第一步读原始二进制内容,第二步判断开头是不是 BOM 标记并剥离,第三步把 Windows 的 CRLF 全部替换成 LF,最后写回新文件。整个过程不经过文本编码转换,避免把中文注释或特殊字符搞乱。如果你手头字典量很大,几十万行的文件,这段脚本跑完也就几秒钟。
3.3 去重和排序:别让同一个词跑十遍
很多人忽略字典去重。一个字典文件里如果某个词重复出现十次,hydra 不会自动跳过,它会实打实试十次。在大字典加多线程的场景下,重复词会拖慢整体进度,更麻烦的是会放大服务端发现暴力破解的概率,被防火墙禁用 IP。拿到字典先看一眼pass.txt的行数和去重后的行数:
# 统计原始行数和去重后的行数 powershell -Command "(Get-Content pass.txt).Count" powershell -Command "(Get-Content pass.txt | Sort-Object -Unique).Count"如果两个数字差距大,直接生成去重版。另外字典里的排序也有讲究:常见弱口令按频率排前面收益最高,比如先试123456、password、admin,再试公司名加年份的组合。很多网上流传的字典是按字母排序的,跑到admin可能已经过了几万行。我一般会准备一个按频率排好的小字典先跑一轮,再上大字典兜底。
4. 用 hydra 跑通一次完整测试:命令拆解和参数边界
4.1 一次完整的 SSH 弱口令测试
假设你在某授权测试环境,有一台 Linux 服务器10.0.0.100开着 SSH,端口是标准的 22,用户名名单放在users.txt,密码字典是前面处理过的pass_clean.txt。完整命令如下:
cd /d D:\tools\hydra hydra.exe -L users.txt -P pass_clean.txt 10.0.0.100 ssh -t 4 -w 5 -f -o result.log -vV这条命令拆开看:-L指定用户名列表,大写字母开头的-L和-P表示从文件读取,小写的-l和-p表示直接指定单个用户名或密码。10.0.0.100是目标 IP,ssh是服务模块名,放在 IP 后面告诉 hydra 用 SSH 协议去连接。-t 4是同时建立 4 个连接线程,对 SSH 服务来说 4 到 8 比较稳妥。-w 5是每次尝试的超时时间 5 秒,这个数值后面讲调优。-f是找到第一个有效口令后立即停止,不要继续跑。-o result.log把结果写进文件。-vV是打开详细输出。
4.2 成功命中和失败输出怎么看
跑起来之后屏幕会不断滚动尝试记录,格式大致是[SSH] host: 10.0.0.100 login: admin password: 123456。如果哪一行后面跟着[SUCCESS]之类的标记,说明命中了一对。真实输出会因为编译版本和 verbosity 级别的差异略有不同,但关键信息不变:登录名、密码、目标地址和状态。命中之后因为加了-f参数,hydra 会在做完当前这一批连接后停止,不会有额外的继续尝试。
打开result.log,里面保存的是最终结果汇总,会列出所有尝试时已知的会话信息和命中记录。注意这个日志默认是覆盖写入的,如果同一台机器跑多轮测试,每轮都要换-o文件名,否则前一轮的结果直接没了。这个坑很常见,特别是挂后台跑了几小时,回头才发现日志被第二轮覆盖了,心态直接崩。
4.3 针对不同服务的参数差异
ssh、rdp、smb、http这几个模块对参数的反应差别很大。RDP 和 SMB 因为服务本身会做连接管理,线程开高了反而容易把服务搞崩或者被连接数限制拒掉,我一般-t 1到-t 2慢慢跑。HTTP 表单登录就需要额外指定 POST 数据格式,不是单纯靠-P字典就行。
HTTP 模块典型形态长这样,用http-post-form告诉 hydra 请求方式是 POST,然后按页面实际情况填提交地址、表单参数和错误关键字:
hydra.exe -L users.txt -P pass_clean.txt 10.0.0.200 http-post-form "/login.php:user=^USER^&pass=^PASS^:F=incorrect" -t 2 -f这里^USER^和^PASS^是占位符,hydra 会把字典里的当前用户名和密码替换进去。冒号分隔三段:第一段是表单提交路径,第二段是 POST 数据体,第三段是登录失败的识别特征。这个F=incorrect非常关键,incorrect要从页面源码里找一个登录失败才会出现的关键字,找错了会导致 hydra 以为所有密码都是对的。
5. 避坑:Windows 版 hydra 的五个经典翻车现场
5.1 现象:跑了几分钟全部超时,count 一直不涨
某个新手朋友在自己的实验室机器上跑了两个小时,进度条基本没动,每条记录都是超时。原因是他-w设成了 60 秒,意思是一次连接等 60 秒才算超时,而内网 SSH 服务实际上两三秒就能响应,大部分时间都在干等。解决:把超时设成-w 5,如果目标是同一个局域网内的机器,-w 3也足够。外网目标可以适当放宽到 10 秒,但路由质量差时放宽到 30 秒也是合理的,看 ping 值决定。
5.2 现象:账号被锁了
用同一个字典跑了几个小时后,目标服务器上的多个账号陆续被锁定。原因是线程数开太高,比如-t 16,对同一个账号在极短时间内发起十几个并发登录尝试,触发了服务端的安全策略。解决:把-t降到 1 或 2,同时加大每次尝试的间隔,用-w控制每个连接的超时时间,超时越短间隔越小,所以这里反过来要适当调大超时来拉长节奏。那以后我跑任何需要保账号的场景,一律-t 1,慢是慢一点,但不至于把目标环境搞到见不得人。
5.3 现象:提示找不到字典文件,但文件明明就在旁边
Windows 版 hydra 对路径中的空格很敏感。如果你把字典文件放在D:\My Files\pass.txt这种带空格的路径下,又没有用引号包起来,hydra 会截断路径只读到空格之前的部分,然后直接报文件不存在。解决:字典文件放和 hydra 同目录,或者在命令里给路径加双引号,hydra.exe -L "D:\My Files\users.txt"。我现在的习惯是建一个dict文件夹专门放字典,路径里不带空格不带中文,省得以后再踩。
5.4 现象:第一个密码永远不对,后面的全正常
之前我们提过 UTF-8 BOM 会导致第一个词携带隐形字符,但这里有个更隐蔽的变体:字典文件是用 UTF-16 编码保存的,hydra 根本读不出正常的 ASCII 字符,屏幕上显示的内容全是乱码夹杂着空字节。解决:用file命令诊断,Windows 上没有file的话可以用 Python 看一眼文件头,然后统一转成 UTF-8 无 BOM。注意转换时encoding='utf-16'解码、encoding='utf-8'写入,别搞反了。
# 把 UTF-16 字典转成 UTF-8 with open('pass_utf16.txt', 'r', encoding='utf-16') as f: content = f.read() with open('pass_utf8.txt', 'w', encoding='utf-8') as f: f.write(content)5.5 现象:显示[ERROR] invalid address或者 module 不支持
有次我给某台 Linux 机器测 SSH 服务,命令格式写错了,把服务模块名放到了 IP 前面,hydra 直接报invalid address。另外目标服务是 RDP 你却写了ssh,hydra 会提示连接被拒但不会明确告诉你模块选错了。解决:先把服务模块名放在目标地址后面确认格式,再用一个确定存在的账号手动连接验证服务是不是真的开着,比如用 SSH 客户端连一下目标,确认能正常走登录流程。筛选模块是否可用,看hydra.exe -h输出末尾的模块列表,一个萝卜一个坑。
6. 进阶步骤:把字典和 hydra 配合得更聪明
hydra自带一个-e参数,会尝试对每个密码做额外变形,具体形式是-e nsr,n 代表尝试空密码,s 代表尝试把密码设成和用户名一样,r 代表尝试密码反转形式。这个功能对某些场景很实用,比如账号是admin,密码是nimda的反转写法,单纯靠字典覆盖不到。但要注意-e会和-f有奇怪的配合,如果第一个用户正好用反转密码命中,hydra 可能不会立刻停。
进阶一点,可以在跑之前生成一组从现有字典衍生出来的组合词。用 Python 写个小脚本,把常见年份、特殊符号和基础词拼接起来:
# 生成加年份和特殊符号的组合字典 base_words = ['passw0rd', 'admin', 'test', 'welcome'] year_suffix = ['2018', '2019', '2020', '2021', '2022', '2023', '2024'] symbols = ['!', '@', '#', '$'] with open('combo_dict.txt', 'w') as f: for w in base_words: for y in year_suffix: f.write(w + y + '\n') f.write(w + y + symbols[0] + '\n') f.write(y + w + '\n')这段脚本把基础词、年份和符号做了三层排列组合,生成的字典不会特别大,几十万条封顶,但覆盖了大量常见的“默认密码加年份”模式。实际执行时,相比直接跑完整的大字典,这种组合字典在速度和命中率上往往都有惊喜,尤其是针对管理员账号定期改密码的公司场景。
还有一个被低估的参数是-M,它允许你把目标 IP 列表放到文件里去批量跑,格式每行一个 IP。配合-t分流,一次性对多个同类目标跑同一个字典,摊薄了单台机器的压力,也适合研发需要验证多台机器是否有相同弱口令的环境。注意目标之间的网络连通性差异,某一台主机 ping 不通时,hydra 会把它标记为超时然后继续下一台,不会阻塞整体任务。
跑完一轮以后,看一眼result.log里命中记录的时间分布。如果某个密码在好几台机器上同时命中,说明这是一条通用的弱口令,很可能来自统一的初始化密码,值得记录到本地字典靠前的位置。我自己会把这些高频命中的词单独攒一个文件,配合crunch或者类似思路的生成器做下一步扩展。
从那次-t 16把测试服务器账号全部锁掉之后,我每次拿到新字典和新的目标范围,都会强制先走一遍整套流程:先检查编码和换行符、统计去重率、小线程试点跑一轮确认服务识别和超时正常、再放大规模开跑。这套习惯在 Windows 版 hydra 上帮我避开了上面五个大坑,尤其是 BOM 那个隐形问题,不处理字典根本没法用。希望这篇笔记也能帮你绕开这些弯路,把手上这份 Windows 版 hydra 和 txt 字典真正跑起来。
本文还有配套的精品资源,点击获取