NSIS是如何绕过ZIP压缩包加密的?

NSIS是如何绕过ZIP压缩包加密的?

关于如何使用NSIS这款软件移除ZIP文件加密的文章,在中文互联网上出现的不多,内容基本照搬这篇百度经验《最强大的ZIP密码清除工具,快速清除ZIP密码》。而这篇百度经验则是照抄了外网一个叫iSumSoft的公司发布的文章“How to Bypass ZIP Password for Free”,照抄到了每一张图都一模一样。

文章里面把NSIS这款打包软件吹得神乎其神,大意就是:如果你有一个加密了的ZIP压缩包,但你不知道密码,莫得问题。打开神器NSIS,把这个ZIP压缩包转换成EXE格式的安装器,然后直接双击安装,你就能解密这个压缩包了。

作为信息安全从业人员,看到这儿我脸上不禁露出了开心的笑容,我已经大致猜到对面是个什么路数了。

iSumSoft的文章写得还算是天衣无缝,但是在Youtube上传演示视频的猪队友们就有人露了马脚了,比如这段视频:“How to Unlock a Password Protected Zip File”

在视频第38秒的时候,我们能看到加密过的压缩包里面有个12 Bytes左右的文本文件,但是视频结尾的时候,解密出来的文本文件却是个0 Bytes的空文件,打开之后里面也没有任何内容。

猜到了吗?

没错!NSIS正是利用了一个非常低级的“安全漏洞”实现了“破解”——ZIP加密只加密文件内容,不加密文件名,所以我们搞一堆同名的空文件出来就可以啦!

其实严格来讲,这是NSIS的一个BUG。作为一款开源软件,早期的NSIS各种偷工减料,它根本不懂怎样分辨ZIP文件加没加密,直接蒙头硬干。等到了安装的时候发现解密不出来,就随便建一个0 Bytes的空文件应付一下,总之程序能跑就行,跑出来什么狗屎根本没人管,反正不是自己的责任。现在的NSIS好像会直接弹个框报错,说不支持加密过的ZIP压缩包。

可是为什么iSumSoft要炮制这样一条谣言呢?

我们翻到iSumSoft那篇文章的结尾,可以看到大概这样含义的一句话:“如果你用NSIS解密失败的话,欢迎购买/试用我们iSumSoft研发的更高级的破解软件。”

懂了吧!要是到这份上了还不懂,那请联系我,我可以卖给你“更更高级的破解软件”。

顺便一提,逛NSIS中文论坛的时候,我发现被这篇营销软文骗到的人还真不少,比如下面这几位:

关于NSIS移除ZIP压缩包密码

使用NSIS清除ZIP解压密码报错

虽然不知道iSumSoft写了这篇软文到底骗来几个用户,但想必NSIS是很感激他们的吧。

我可以很负责任地讲:不可能。

从题主的问题描述中,我大概能猜到题主对加密解密这个领域完全没有涉猎过。如果你对数据加密的原理有过简单的了解,你就会明白这类东西基本全是骗人的。

所谓的数据加密,听起来很神秘,但其实说穿了就是做数学计算,我举个例子你就明白了。

假如你有一个数字1,你想用加法把它加密,密码也是1,那么你加密的结果就是1+1=2。攻击者拿到加密过的压缩包,就相当于拿到了整数2。

现在,假设攻击者知道你用的加密算法是加法,想要推出你的明文,有可能吗?

没可能啊。1+1=2,0+2=2,0.5+1.5=2,0.01+1.99也等于2,可能性无穷无尽,不知道密码根本没办法知道原本的数字是几。目前条件下,唯一的办法,就是我知道密码是1,用2-1=1,才能还原出原本的数据。

不过,假设攻击者多知道了两点条件:1. 原数字是一个不为零的整数,2. 密码也是个不为零的整数。那情况就大不一样了,小学一年级的水平应该就足以破解密码。

想要得到这样的关键信息,总得来说有一偏一正两种思路:

第二种思路我们下一节会简单讲一下,而第一种思路,靠一个神奇的小软件是不可能实现的,需要你学习各种猥琐的知识,亲自动手去骗,呸,去友情测试。

那么,如果我们想要真正破解一个ZIP文件的加密,该怎么办?

早年间PKZIP在制定ZIP标准的时候,是有人挖到过数学层面的加密漏洞的,只要知道13 bytes的明文,就能够直接破解出密码。在当时的主流压缩软件换上deflate压缩算法之后,又有人搞出“通过文件类型和尺寸帮助猜解密码”的骚操作。具体的细节可以参考这篇“ZIP Attacks with Reduced Known Plaintext”。

但是历经了各路阴险小人的重重考验之后,ZIP标准里像这样的漏洞已经基本被根绝了。目前仍然有效的方法,就只有用穷举法试遍所有密码了。跟上一节举的1+1的例子不同,ZIP密码正确与否是可以很简单地判断出来的。比较短的密码,有生之年大概还是能试出来的吧?