拿到了一个被加密的Excel,要求输入密码才能打开,于是尝试了下密码破解方法。
AROP破解
AROP(ADVANCED OFFICEPASSWORD RECOVERY)好像是比较主流的Office的破解工具,有收费版和免费版,区别在于密码长度是否超过4字节。
用了一个虚拟机跑了一下,字典查询没有,于是暴力破解,嗯,破解速度比较令人绝望,毕竟是CPU在跑。
将该Excel文件解压之后,可以发现里面包含DataSpace
、EncryptedPackage
以及EncryptionInfo
等文件,打开EncryptionInfo
文件,可以看到里面加密的一些信息:
其中,采用的是AES算法,有盐(salt,指随机的数据,加入到哈希的过程中,加大破解难度),hash算法是SHA512,spinCount=100000
经过了100000次的迭代操作,想直接逆向破解,实在太难。字典尝试无效,只能暴力破解,但是随着密码长度增加,以及字母数字、特殊字符的引入,破解难度指数增长。对于纯小写字母的6位密码,复杂度为$26^6 = 308915776$次,七位则超过了80亿次,指望这个靠CPU计算的软件,实际希望不大,跑了半天后放弃了。
Hashcat破解
Hashcat号称世界上最快的密码破解,世界上第一个和唯一的基于GPGPU规则引擎,免费多GPU(高达128个GPU),多哈希,多操作系统(Linux和Windows本地二进制文件),多平台(OpenCL和CUDA支持),多算法,资源利用率低,基于字典攻击,支持分布式破解等等。
嗯,暴力破解的话,只能考虑使用GPU跑,这时,开源的hashcat就是一个不错的选择。
获取文件hash值
使用hashcat破解office,先需要获取文件的hash值,网上有现成的工具office2join.py
,然后用python运行,参数加上该office文件即可。
可以看到,加密方式为office2013,将第一个冒号后面的字串复制到一个新文件中保存即可。
hashcat破解
知道加密方式后,需要找到对应的破解模式,首先使用--help
看一下帮助:
可以看到office的加密模式有以下几种:
所以,office2013选择-m 9600
,然后开始破解:
其中,-a
表示破解模式,3
是暴力破解,--session test
是将该次破解进程命名,可有可无,但之后如果要中断再恢复,则可以使用进程名恢复。-o found.txt
是将找到的结果输出到指定文件中,hash.txt
是之前保存hash码的文件,最后是一串正则表达式,有?l?u?d?s
,分别表示小写字母、大写字母、数字、和特殊字符。该例子表示暴力破解七位小写字母的密码。
但由于不确定位数,先从简单的开始,破解从1到8位的小写字母:
其中,--increment-min 1 --increment-max 8
即如本身含义。
然后查看一下显卡运行情况:
如果中途有事,可以先暂停一下,然后跑完后再过来继续破解:
最后大概半天吧,跑出来结果如下:
冒号后面的就是密码。