zip总结

0x00 伪加密

Zip伪加密的出现是因为zip二进制文件中有一位是标记是否加密的。若zip包实际上没有被加密但加密位却是01,那么在打开时就会提示有密码。(Mac OS以及部分Linux可以直接打开)

我们只要用16进制编辑器修改加密标志位为00即可破解。有关Zip文件头协议可以参考附录。

我们还可以利用工具ZipCenOp.jar工具修改,道理是一样的。

0x01 爆破密码

爆破主要是利用工具,结合密码所处域的所有可能性字符串进行爆破。有时我们知道密码的一部分,这时就可以缩小密码域的范围,缩小密码的域可以提升爆破速度,这时可以手工生成字典。

Windows下常用的爆破工具有:

  1. Ziperello

  2. AZPR

生成字典可以手动写脚本,也可以用一些工具,比如kali下的crunch。

0x02 明文攻击

明文攻击的条件是你已经知道压缩包中加密文件的一部分文件(大于12bit),这时就可以进行明文攻击。详细原理不赘述。

在攻击前,拿到了已知文件后可以先用压缩工具对已知文件进行压缩看看CRC32是否和未知加密文件的CRC32一致,若不一致可以考虑换个压缩工具。若一致可进行明文攻击。

攻击也可用AZPR工具进行。

其他工具:[UZPC](http://www.chat.ru/~m53group) [PKCrack](http://www.unix-ag.uni-kl.de/~conrad/krypto/pkcrack.html)

注意:当明文的大小比较小时,攻击速度会比较慢;即使有时没有恢复密码,也可以使用明文攻击,最后点保存还是能得到压缩包里内容的(这点很坑。。)。

0x03 CRC32碰撞

当压缩包密码实在解不出来,但是压缩包内的内容比较短的时候可以用CRC32碰撞。

这里记录一个脚本:python2.7

#!/usr/bin/env python

import binascii

dic = r"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&()*+,-./:;<=>?@[\]^_`{|}~ "

for x1 in dic:
    for x2 in dic:
        for x3 in dic:
            for x4 in dic:
                for x5 in dic:
                    s = x1+x2+x3+x4+x5
                    crc = binascii.crc32(s)&0xFFFFFFFF
                    if (crc==0x20AE9F17):
                        print hex(crc),s

0x04 压缩包损坏

此类需要了解Zip文件协议,结合 Binwalk 扫描损坏的文件包,然后利用16进制工具修复。

附录:Zip文件协议

压缩源文件数据区 
50 4B 03 04:这是头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本 
00 00:全局方式位标记(有无加密) 
08 00:压缩方式 
5A 7E:最后修改文件时间 
F7 46:最后修改文件日期 
16 B5 80 14:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
07 00:文件名长度 
00 00:扩展记录长度 
6B65792E7478740BCECC750E71ABCE48CDC9C95728CECC2DC849AD284DAD0500 
压缩源文件目录区 
50 4B 01 02:目录中文件文件头标记(0x02014b50) 
3F 00:压缩使用的 pkware 版本 
14 00:解压文件所需 pkware 版本 
00 00:全局方式位标记(有无加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了) 
08 00:压缩方式 
5A 7E:最后修改文件时间 
F7 46:最后修改文件日期 
16 B5 80 14:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
07 00:文件名长度 
24 00:扩展字段长度 
00 00:文件注释长度 
00 00:磁盘开始号 
00 00:内部文件属性 
20 00 00 00:外部文件属性 
00 00 00 00:局部头部偏移量 
6B65792E7478740A00200000000000010018006558F04A1CC5D001BDEBDD3B1CC5D001BDEBDD3B1CC5D001 
压缩源文件目录结束标志 
50 4B 05 06:目录结束标记 
00 00:当前磁盘编号 
00 00:目录区开始磁盘编号 
01 00:本磁盘上纪录总数 
01 00:目录区中纪录总数 
59 00 00 00:目录区尺寸大小 
3E 00 00 00:目录区对第一张磁盘的偏移量 
00 00:ZIP 文件注释长度

参考:

https://bobao.360.cn/ctf/learning/203.html

http://www.blogsir.com.cn/safe/252.html

Last updated