最近在网上找到一个资源,便下载了下来。

然后发现这rar文件加了密,而且作者还不提供口令。我只能选择...在在咕果搜索有没有其他资源。毕竟网络上面那么多资源,也不一定非盯着一个嘛。可惜我没能在网络上搜索到其他资源...竟然是全网第一份。看来只能想办法爆破密码了。

传统方法

对于加密文件,当然是先穷举一波看看会不会用的是弱口令啦。毕竟某校各种系统用的最多的几个口令里123456绝对排第一第二的。

网上压缩文件加密爆破工具还挺多的,然后用上了祖传的密码本。

可惜,跑了两本常见弱口令字典都并没有收获,这个作者似乎没有用弱口令。而完全穷举我的生命显然不够,万一人家用的是中文口令那怕不是要跑到世界毁灭。

无奈只能放弃这事儿了。

喝杯可乐

过了几天闲来无事接着在网上找这个资源的时候,发现了它的老版本,这次没有加密。我想啊,一般版本更新也不一定全是所有文件都会更新的。通过对比文件的修改时间发现确实是这样,所以现在我就有了一部分文件的明文。既然如此,我就可以尝试已知明文攻击1了。

可惜RAR的加密用的是AES算法2,应该是CBC或者CFB模式,这两种模式都没有已知明文攻击的漏洞3

就在这时,我由打开了最开始那个博客,在时间线里也发现了另一个老版本。但是依然加了密,不过这次是个ZIP文件。

然后我查了一下ZIP的加密算法,发现早期使用的zipcrypto算法确实存在已知明文攻击漏洞4,而且因为兼容性原因该算法依然得到广泛的应用,而这个文件正是这个算法。

而一般同一个人发布加密文件会习惯用相同的口令,那么我们只要把这个加密的ZIP文件的口令解出来,那么最早的RAR文件的口令也就可能直接得到了。

可能这就是社会工程学吧。

另辟蹊径

下面我用小明formatted-random项目源码演示。加密使用的口令是小明tql

目前我们有以下文件:

  • v1.0.rar : 加密
  • v0.9.zip : 加密
  • v0.1.zip : 未加密

其中①和②出自同一个作者,我推断它们用的是相同的口令。①的加密算法比较安全目前难以破解,②的加密算法存在已知明文攻击漏洞,可以通过从③中找相同的文件进行攻击。

在网上找到一个具有相关功能的工具: Advanced Archive Password Recovery。随便搜索一下就能找到下载地址,而且有汉化版。

我们通过简单比对(如下图)就能找到相同的文件。虽然CRC值域空间很小很容易发生碰撞,主要是用于校验的。但是我们结合其他信息,比如文件名的相关性、文件长度和最后修改时间(不过这里演示的文件的修改时间信息丢失了所以可以忽略)都相符,我们就可以认为它们是相同的文件。

找相同文件

然后打开上文中提到的攻击工具,选择明文破解选项。这个工具需要我们以相同的压缩选项将文件中相同的明文文件生成一个压缩文件。

这里有个小插曲。我压缩软件一直用的都是7z。所有压缩选项生成的压缩文件都试过发现都不行。然后想想可能不同的软件的实现不一样,所以我去下载了(试用版的)WinRAR。

WinRAR不愧是普及率极高(付费率低)的老牌压缩软件,确实解决了问题。所以有类似的问题可以试试换个压缩软件。

中国特供版的广告属实让人很难受,所以我卸载之后安装了台湾版。如果无法接受某些中国特供版的软件可以试试台湾版、香港版甚至新加坡版,比如FireFox。

这次我用WinRAR默认的选项就能使用,免得改参数进行尝试的过程了。

理论上选择的文件总大小越多,攻击的速度就越快。这里我选择LICENSEstack.yaml两个比较大的文件,把他们添加进压缩包。然后把待解密的ZIP文件②和新创建的ZIP文件放进攻击工具然后点击开始即可。

根据待破解的口令的复杂度和文件大小的不同,可能会等上片刻或比较久的时间。然后就会得到这样的结果。

成功

WOW, 口令竟然是小明tql

然后用得到的口令解密RAR文件①,果然真的解开了。可以直接解压出来了,这件事情就告一段落了。

最开始我拿到的那个文件的口令有九位,其中有七位是大写字母和数字,另外两位是不同的符号。这谁字典里面能有啊。