我们可以进行大胆的猜想:
如果把一个zip文件的文件头或者加密标志位进行适当修改,那就可能会改变文件的可读性~
我们可以用16进制编辑器添加文件头或文件尾,即可修复zip。
上面这种方法相对比较麻烦,不太容易操作,在Mac OS及部分Linux(如Kali)系统中,可以直接打开伪加密的zip压缩包,此时我们希望有种简便而通用的方法该怎么办呢?
我们推荐使用下面这种方法:
使用检测伪加密的ZipCenOp.jar,解密后如果能成功打开zip包,则是伪加密,否则说明思路错误
ZipCenOp.jar的下载我已经传到了本地,点击下载即可~
下面举个例子,如下是个被加密的文件,理由很简单,文件夹后面跟了一个*~
使用ZipCenOp.jar(需java环境)使用方法:
java -jar ZipCenOp.jar r xxx.zip
我们对其使用如上命令进行解包,得下图所示:
我们再看下这个文件:
发现文件夹后面跟的*消失了,说明这个文件就是伪加密文件~
当然啦,我们也可以对Zip文件进行伪加密~
java -jar ZipCenOp.jar e xxx.zip
03.暴力破解
顾名思义,就是逐个尝试选定集合中可以组成的所有密码,知道遇到正确密码~
而字典攻击的效率比爆破稍高,因为字典中存储了常用的密码,因此就避免了爆破时把时间浪费在脸滚键盘类的密码上~
而如果已知密码的某几位,如已知6位密码的第3位是a,那么可以构造 ??a??? 进行掩码攻击,掩码攻击的原理相当于构造了第3位为a的字典,因此掩码攻击的效率也比爆破高出不少~
对这一类的zip问题,Windows下我使用的是ARCHPR~
点击开始,进行爆破即可~下面是个演示,就花了4s的时间爆破出密码是MIT~
而所谓的字典攻击其实就是在字典选择合适的情况下,用很短的时间就能找到密码~如果需要字典的朋友可以私聊滴滴我,我可以发给你~
实例如下所示:
如果对Wifi密码破解感兴趣的同学可以关注我的B站ID:Angel_Kitty,我录制过关于Wifi破解的视频,视频ID是:https://www.bilibili.com/video/av25852173/
而掩码攻击就是通过已知密码的某几位进行构造,如下示例我们构造了??T进行爆破,仅花了81ms就破解了~
04.明文攻击
明文攻击是一种较为高效的攻击手段,大致原理是当你不知道一个zip的密码,但是你有zip中的一个已知文件(文件大小要大于12Byte)或者已经通过其他手段知道zip加密文件中的某些内容时,因为同一个zip压缩包里的所有文件都是使用同一个加密密钥来加密的,所以可以用已知文件来找加密密钥,利用密钥来解锁其他加密文件~
此时我们可以尝试用ARCHPR或者pkcrack进行明文攻击~
举个例子,下载链接在这里
我们可以看到readme.txt是加密压缩包里的readme.txt的明文,所以可以进行明文攻击~
将readme.txt压缩成.zip文件,然后在软件中填入相应的路径即可开始进行明文攻击,这里我们用ARCHPR进行演示~
可能有些朋友会说ARCHPR怎么行不通啊,一般是版本不对的问题~
如果还是有问题怎么办呢?那就尝试用下pkcrack
似乎网站日常会崩,所以我把文件上传到了本地~
Windows版本:https://files.cnblogs.com/files/ECJTUACM-873284962/pkcrack-1.2.2-win32.zip
Linux版本:https://files.cnblogs.com/files/ECJTUACM-873284962/pkcrack-1.2.2.tar.gz
有些朋友在Windows下会出现如下错误:
那是因为pkcrack只支持32位的,所以运行这个需要在XP系统下进行
而选择Linux的话则不需要这么麻烦,直接安装就好了,还有一种更快的办法~
我们写个shell脚本就好了~
#!/bin/bash -ex wget https://www.unix-ag.uni-kl.de/~conrad/krypto/pkcrack/pkcrack-1.2.2.tar.gz tar xzf pkcrack-1.2.2.tar.gz cd pkcrack-1.2.2/src make mkdir-p ../../bin cp extract findkey makekey pkcrack zipdecrypt ../../bin cd ../../
把文件保存,改为install.sh,然后跑到当前目录下,给它加一个执行权限x
chmod 777 install.sh
或者直接可以:
chmod u+x install.sh
然后运行install.sh
./install.sh
然后当前目录下会生成一个bin的文件夹,我们直接进入bin文件夹下,看到有pkcrack文件,直接对文件进行明文破解
./pkcrack -c"answer/key.txt" -p readme.txt -C Desktop.zip -P readme.zip
-C:要破解的目标文件(含路径) -c:破解文件中的明文文件的名字(其路径不包括系统路径,从zip文件一层开始) -P:压缩后的明文文件 -p:压缩的明文文件中明文文件的名字(也就是readme.txt在readme.zip中的位置)
至于其他选项参看./pkcrack --help
pkcrack还有一个重要的选项是-d,后面跟一个文件名,比如decrypt.zip,表示解密后的zip文件输出。据说这个命令可以加快解密时间,我尝试过以后发现并没有快多少,所以我花了两个小时还没跑出来密码QAQ
05.CRC32碰撞
CRC32:CRC本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值。
在产生CRC32时,源数据块的每一位都参与了运算,因此即使数据块中只有一位发生改变也会得到不同的CRC32值,利用这个原理我们可以直接爆破出加密文件的内容~
我们看个CRC32碰撞的例子:
flag是4位数,且CRC32值为56EA988D
我们可以写出如下脚本:
#coding=utf=8import binascii real= 0x56EA988D for yin range(1000,9999):if real == (binascii.crc32(str(y)) & 0xffffffff):print(y) print('End')
在Python 2.x 的版本中,binascii.crc32 所计算出來的 CRC 值域为[-2^31, 2^31-1] 之间的有符号整数,为了要与一般CRC 结果作比对,需要将其转为无符号整数,所以加上& 0xffffffff来进行转换。如果是 Python 3.x 的版本,其计算结果为 [0, 2^32-1] 间的无符号整数,因此不需额外加上& 0xffffffff 。
脚本的运行结果如下,即为压缩文件的内容:
拓展与补充
关于作者:阿里云ACE,目前主要研究方向是Web安全漏洞以及反序列化。如有问题或建议,请多多赐教!