有关ZIP压缩包的破解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关ZIP压缩包的破解相关的知识,希望对你有一定的参考价值。

参考技术A 根据官方文档上的描述,ZIP文件的格式如下图所示。
通常情况下,我们所用ZIP文件格式为下图中所表示出来的三个部分(其余部分的说明在附录中给出):

接下来,我们将结合一个实际的ZIP压缩包文件来具体分析其格式。
首先,构造该ZIP压缩包,为了方便和后续的已知明文攻击部分内容相衔接,这里先构造这样一个内容为

的plain.txt文件,将其压缩成plain.zip。
下面,分别从压缩源文件数据区、压缩源文件目录区、压缩源文件目录结束标志展开。

[Local file header(文件头)+File data(文件数据)+Data descriptor(数据描述符)]

文件头主要用于表示此文件的开始,记录了此文件压缩的信息,具体字段的含义如下表。(注:偏移量为十进制)

general purpose bit flag: (2 bytes)

compression method: (2 bytes)

CRC-32: (4 bytes)

使用WinHex打开我们之前构造的plain.zip压缩包,对其Local file header(文件头)部分进行分析,从偏移量为28(0x1C)处看起,读出来扩展区长度为0,故文件名及其前面的部分为Local header(文件头)。

由图结合各字段的偏移量和大小,各个字段分析如下:

此部分紧跟在Local file header(文件头),记录了该文件压缩、存储的数据。

由图结合偏移量,得到下表。

数据描述符仅在通用Local file header文件头的通用比特标志位的第3比特为1的时候存在。在1.1.1中通用比特标志位的详细说明中可知,如果此位为1,那么Local file header文件头中的CRC32校验码、压缩大小和未压缩大小的字段将设置为0,这三个字段正确的值放在此数据描述符中。

由于我们所选的plain.zip数据包中Local file header文件头中的通用比特标志位第3比特为0,所有不含有此部分,CRC32校验码、压缩大小、未压缩的大小这三个字段的实际值都位于Local file header文件头中。

[ Centra directory (核心目录) ]
Centra directory 核心目录主要是记录压缩文件的目录信息,每个压缩源文件数据区的记录对应此压缩源文件目录去的一条记录。

由图结合各字段的偏移量及大小,核心目录部分的各个字段分析如下:

[End of Central directory recored (目录结束标志)]
目录结束标志用于标记压缩的目录数据的结束,每个压缩文件对应在此数据区有一记录。

由图结合各字段的偏移量及大小,目录结束标志的各个字段分析如下:

此时,有以下几种方式:

假设不知道某个zip压缩包的密码,但是已经获取或者根据破解得到其中的某一个文件的话,可以考虑采用已知明文攻击。这是因为同个zip压缩包中的所有文件使用同一加密秘钥来进行加密的,所以可以根据已知文件进行同样的压缩以构造部分明文来寻找加密秘钥,利用找到的秘钥解密zip压缩包中其他的文件。
举例:已知下面这个压缩文件(what's this.zip)中plain.txt的内容

 
 
 

关于zip包的一点小东西 暴力 字典 明文

 暴力破解。这是最花时间的一种破解方式,暴力破解就是不断的去尝试所有可能的密码。如果密码比较短,比较容易的找到破解密码。

字典攻击。优化过的暴力破解,它使用了一个字典文件,然后一一尝试文件中的每个密码。现在在网上有很多共享的字典文件,这使得字典攻击比暴力破解有效率得多。尤其是当目标文件是用一个弱密码进行保护的时候,字典攻击效率较高。但是,由于字典攻击没有囊括所有可能的密码,所以对于强密码保护的zip文件,字典攻击毫无办法。

ps:中国大多数家庭的密码都是很简单的密码,字典攻击是一种很有效率的方法

两种破解方法本质都是暴力,工具使用ziperello,一般的东西都可以很快的破解出来

明文攻击:很优秀的一种方法

          准备工作:

   了解压缩文件的zip版本,可以了解加密平台、zip版本号,可以通过文件属性了解。  

   linux平台,可以使用unzip -v命令可以查看一个zip包的详细信息,包括加密算法

   知道压缩包里某个文件的部分连续内容——打包成相同算法的压缩包用来破解密钥

   不能太小,太小了容易撞(大约>=12字节吧)

      但是也不能太大,太大连密钥都算不出来(或许只能100字节左右???)

假设你已经知道了压缩包里的部分内容,比如说里面的readme或者其他说明的东西,压一下看一下大小和crc32的值,如果两者都相等的话,基本可以确定是同一种压缩算法,但是如果不一样的话就要去尝试一下其他的算法知道找到相同的算法(可以通过对比压缩率和crc32来确定是否为同一个文件)

前提:一个压缩包里所有的文件都是使用同一个加密秘钥来加密的。

同一个文件—>使用同一种压缩算法—>得到的密钥是相同的???

简单来说,ZIP明文攻击就是利用已知文件找加密密钥,利用密钥来解锁其它加密文件。

已知压缩算法,找到了加密秘钥,就可以使用加密秘钥来破解加密文件

使用工具:archpr4.53,或者(pkcrack???)

以上是关于有关ZIP压缩包的破解的主要内容,如果未能解决你的问题,请参考以下文章

求解 java 对压缩文件zip 加密 !

3种方法删除7-Zip压缩包的密码

VC++使用开源的zip.cpp和unzip.cpp实现压缩包的创建与解压(附源码)

ZIP压缩包的图标变成这样的了。后缀为7Z的压缩包显示正常。这怎么弄回来呀?

压缩文件密码忘记了怎么办啊?

zip伪加密-Write Up