0.序言
在官网上,Hashcat 对自己的描述是一款世界最快的密码破解软件。除了免费之外,还支持超过350种类型的密码破解,例如 MS Office,RAR,PDF 等。当然我们今天并不是要探究 Hashcat 到底是不是最快的密码破解软件,毕竟单就免费和支持 GPU 加速这两点就已经足够好了。
不过 Hashcat 官方并没有提供图形界面,也不支持直接读取加密文件进行解密,上手存在一定门槛。所以本文的主要目的是快速带大家过一遍 Hashcat 的基础用法,如果还想要更深入的了解一些高级用法可以移步官方在线文档。
1.下载
Hashcat 发文时的最新版本为6.2.6,更新于2022年9月。由于是一款绿色软件,下载后解压至任意目录即可。本文中将使用 D:hashcat-6.2.6
这一地址作为范例。
下载地址:https://hashcat.net/hashcat/#download
2.运行
打开开始菜单并键入 CMD 回车,新建一个命令提示符窗口。在命令提示符窗口中依次执行以下命令来运行 Hashcat 。(#号及其后的内容为注释)
代码语言:javascript复制D: #切换到D盘
cd hashcat-6.2.6 #进入 hashcat 所在文件夹
hashcat.exe -h #输出帮助信息
当然我们运行 Hashcat 肯定不止是为了查看帮助信息,下面是一个典型的用于密码破解的命令。先不要实际运行它,我们会逐一的了解各部分的作用和写法。
代码语言:javascript复制hashcat.exe -m 13000 -a 3 hash.txt ?d?d?d?d?d?d --increment --increment-min=1 --increment-max=6
- -m 设定加密类型
- -a 设定密码破解模式
- hash.txt 待破解的 hash
- ?d?d?d?d?d?d 密码掩码
- –increment 使用自增模式
3.加密类型
由于 Hashcat 支持的加密类型非常多,在使用时我们必须手动指定待破解的加密类型。常用的有:13000(rar5),9600(office 2013) 等,完整的加密类型代号在下面链接中可以查到:
https://hashcat.net/wiki/doku.php?id=hashcat
在使用时通过 -m
传入即可,如 -m 6600
。部分文件格式可能存在有多个加密类型的情况,如 rar 就可能为 rar3 或 rar5 。这种情况需要通过 Hash 值来确定,参考第5小节。
4.破解模式
Hashcat 提供了字典模式,暴力模式及组合模式等多种破解模式可供选择,不过最常用的还是暴力模式。我们直接指定 -a 3
就好,如有需要了解其他破解模式的使用方法可以查阅官网相关文档。
5.Hash
与一般的密码破解软件不同,Hashcat 并不支持直接读取加密文件进行破解,而采用的是加密文件 Hash 值。在前一篇文章中,我们已经介绍了计算加密文件 Hash 值的方法,这里只需要在 hashcat 文件夹中新建一个空白 txt 文件,并将 Hash 值填入即可。如果有多个文件需要破解,每行填写一个 Hash 。
对于同一个文件后缀存在多种密码类型的情况,我们也需要通过 Hash 来判断。例如 Office 文档,如果计算后得到的 Hash 为:
代码语言:javascript复制$office$*2013*100000*256*16*35e293890e1e9fef1f724ea0cedbe146*291acb5a6e6d10e8131d06a6cf5da61b*f84c89440cef4efe15b99cf69a9dd91e35f6903a2eaf1d99d1b819c6928467d7
说明该文件的加密类型为 Office 2013 ,对应的命令为:-m 9600
。
6.密码掩码
如果使用暴力破解模式,我们需要为 Hashcat 指定密码掩码,这样程序才能跑起来。简单的说,密码掩码就是告诉程序猜解密码时,使用纯数字、数字 字符还是字符 特殊符号。
Hashcat 中内置了一些掩码字符集可以直接使用,如:
- ?l = abcdefghijklmnopqrstuvwxyz
- ?d = 0123456789
- ?h = 0123456789abcdef
举例来说,如果需要猜解所有6位数的纯数字密码,使用 ?d?d?d?d?d?d
即可。如果已知前六位为 reizhi
,后三位为小写字符,使用 reizhi?l?l?l
即可。
限于篇幅,更多有关密码掩码的信息可以前往官方文档查看:https://hashcat.net/wiki/doku.php?id=mask_attack
7.自增模式
在上一小节中,我们已经介绍了密码掩码的使用方法,但同时也引出了一个问题:如果密码可能是1~6位的纯数字,是否我们需要运行六次才能将所有的可能猜解一遍?
答案当然是否定的,如果不确定密码的长度,只需要使用自增模式即可:
代码语言:javascript复制--increment --increment-min=1 --increment-max=6
其中 --increment
代表启用自增模式,--increment-min=1
代表密码的最小长度为1位,--increment-max=6
代表密码的最大长度为6位。