hashcat 暴力破解 RAR 压缩包密码
RAR被加密了不要扔,裹上鸡蛋液面包糠…
如何破解加密RAR文件?
尝试绕过或删除密码?不好意思,任何宣称此类方法的大概率为骗子
目前想要破解加密RAR只有暴力破解这一条路
关于暴力破解
密码从来都不是以明文方式储存的——储存并用来验证的是由明文密码生成的哈希值
通过特定算法可以将明文字符串转换为定长哈希值,该过程通常是不可逆的,因此无法通过哈希逆向计算出明文
举一个简单的例子,现在有几个明文密码如下:
1 | abcd |
通过SHA256加密后,他们分别为:
1 | 88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589 |
仅从加密后定长的密文来说,是无法分辨明文密码的复杂度的
想要破解这些定长哈希?只有暴力破解一条路可以走
强密码与弱密码
在尝试暴力破解之前,我们先来做一个简单的数学计算
每一位字符可能出现以下几种情况:
字符集 | 内容 | 数量 |
---|---|---|
小写字母 | a-z | 26 |
大写字母 | A-Z | 26 |
数字 | 0-9 | 10 |
符号 | «空格»!“#$%&’()*+,-。/:;<=>?@[\]^_`{|}〜 | 35 |
综上所述,一个密码的破解难度根据长度不同呈指数级上升。如果密码中还包括中文/日文/阿拉伯文等语言,可以直接放弃了,算到next big bang都算不出来
那么,方法呢?
社工
最有效的破解办法就是从设置密码的人下手
云破解
如果你想要尝试破解一个强密码,很不幸这是几乎不可能的
但你仍然可以去云解密网站(通常是收费的)碰碰运气,这些网站拥有比你本地更强大的算力和也许有用的逆解密库
本地破解
这是本文的重点,目前市面上破解RAR的软件非常多:
- BandZip
- PassFab for RAR
- TrueCrack
- …
然而这些不是收费就是年久失修,并且效果远远不如目前主流的开源破解工具hashcat
hashcat可以调用CUDA运算,是世界上最快最高级的密码破解工具,目前社区非常活跃,文档详细,更新维护及时。下面就简单介绍一下如何使用这套工具链破解加密RAR文件
CUDA
CUDA (Compute Unified Device Architecture) 是NVIDIA推出的基于GPU的并行计算平台,玩过机器学习的一定对CUDA不陌生,两个字“牛逼”就对了
由于我的电脑是2年前安装的CUDA,具体安装细节不记得了,请自行谷歌
john + hashcat
hashcat用于撞哈希,那么如何找到加密RAR的哈希值呢?
这里就要用到john中提供的一个小工具rar2john,它可以将RAR中的密码哈希提取出来
你可以在下面找到这两个工具
john: advanced offline password cracker
hashcat: World’s fastest and most advanced password recovery utility
rar2john
以下流程在Windows 10平台进行~
下载john的release,找到run\rar2john.exe
对加密RAR文件执行(密码:abcd):
1 | .\rar2john.exe "D:\Users\Desktop\1.rar" |
程序会提取出哈希值并输出下面的内容:
1 | D:\Users\Desktop\1.rar:$rar5$16$36fe9da24ec2f10020ba8a989370c697$15$7d2ce8243b92cc889393233fdba54896$8$72203c88592c67e4 |
hashcat
有了哈希值,我们便可以使用hashcat进行暴力破解了
先说几个常用参数的意义(更高级的玩法请参考hashcat wiki):
-a
选择攻击方式,一般使用参数
-a 3
即掩码攻击(有规则约束的暴力穷举)-m
选择攻击模式,针对不同的hash算法选择规定的值,参见Example hashes
对于RAR,我们选择:
- RAR3-hp: 12500
- RAR5: 13000
可以由rar2john提取出的hash值分辨出
字符集
?l
:abcdefghijklmnopqrstuvwxyz
?u
:ABCDEFGHIJKLMNOPQRSTUVWXYZ
?d
:0123456789
?h
:0123456789abcdef
?H
:0123456789ABCDEF
?s
:«space»!"#$%&'()*+,-./:;<=>?@[\]^_{|}~
?a
:?l?u?d?s
?b
:0x00 - 0xff
除此之外,还可以自定义字符集,参见Mask Attack
例:
?a?l?l?l?d?d?d?d
代表第一位为任意字符,第二到第四位为小写字母,后四位为数字--increment
自增遍历模式(不确定密码长度的情况)
--increment-min
规定自增模式密码最短的长度
--increment-max
规定自增模式密码最长的长度
Crack Start!
复制rar2john得到的哈希值,执行:
1 | .\hashcat.exe -m 13000 -a 3 '$rar5$16$36fe9da24ec2f10020ba8a989370c697$15$7d2ce8243b92cc889393233fdba54896$8$72203c88592c67e4' ?a?a?a?a |
即对应 RAR5 进行掩码攻击,寻找4位长度随机字符的密码
注意在 Bash 和 Powershell 中,$
的含义为变量,需要用单引号括起来才可以使用
查看输出:
1 | hashcat (v6.1.1) starting... |
注意第18行,设备 #1 没有skip,即使用了CUDA进行运算
我使用的17年款游戏本,配置为GTX1050Ti,使用CUDA进行运算约为11000个密码每秒
查看当前运行状态:
1 | Session..........: hashcat |
注意到4位长度密码暴力破解需要尝试 $81450625(95^4)$ 次,按照我这块显卡的性能需要破解2个小时
由此可得:
- 5位随机:8天
- 6位随机:25个月
- 7位随机:198年
- 8位随机:18.6个世纪
如果知道密码的线索来约束随机范围的话,耗费的时间会少很多
而且这是最坏的情况,万一运气好呢?
比如这个预计2小时的密码 abcd
,我用了14分钟就跑出来了…
关于如何加强密码强度
破解说完了,来说说反破解
目前流行的密码管理解决方案为随机生成强密码 + 密码管理软件(如 Bitwarden,1Password 等),基于此方案,我不知道我有账号的几百个网站任何一个的密码(就算绑架我也没用
一个简单的生成随机密码的方法:
1 | # 生成16位随机密码 |
除此之外:
- 一定要包含一个符号,这可以让解密难度提升NNNN倍
- 8位数以上,只有量子计算机可破
- 不同网站设置不同密码,防止某些网站泄露数据库
- 万物 over TLS
需要注意的是,某些本地加密软件(如WD Security)
如果忘记了密码真的是神仙也救不了…