破解压缩包的几种方式(zip伪加密 爆破 CRC32碰撞 已知明文攻击)

zip伪加密

————————————————————————————————————————————————————————————————————————————————————————————

zip文件是由3部分组成,详见文末

压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志

在压缩源文件数据区有个2字节的 全局方式位标记 ,在压缩源文件目录区也有个2字节的 全局方式位标记 ,都用以标记是否加密,如下图:

 

 

 

 若是没有加密的zip,两处标记都是00 00

 

 加密的zip两次都不是00 00,好像不同版本的压缩软件或是算法,这里的值会不同,我看之前网上多见的是09 00

 

 若把未加密的zip压缩源文件目录区的全局方式位标记改为 01 00 (或者 09 00),就会被压缩软件认为是已加密,即所谓的伪加密

 

 
破解伪加密的zip,只要把压缩源文件目录区的全局方式位标记改为 00 00 即可解压

爆破

————————————————————————————————————————————————————————————————————————————————

详分有暴力,掩码,字典

1.暴力:选择密码范围,长度等,由软件组合生成密码进行爆破

2.掩码:知道密码中的一部分,只需按规则构造其余部分

3.字典:通常是多数用户常用的一些密码集合,导入字典文件用其中的密码进行爆破

推荐一款windows下的软件ARCHPR

用法的话,百度就很多了

 

 

我写过一个简单的通过字典爆破zip的python脚本

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 import zipfile
 4 import os
 5 
 6 def extractFile(zFile,password):
 7     try:
 8         zFile.extractall(path=os.getcwd(),pwd=password)
 9     except:
10         return False
11     else:
12         return password
13 
14 def main():
15     zFile=zipfile.ZipFile(raw_input('zip file:'))
16     passFile=open(raw_input('password file:'))
17 
18     for password in passFile.readlines():
19         print password
20         password=password.strip('\n')
21         result=extractFile(zFile,password)
22         if result:
23             print 'success:'+result
24             break
25 
26 if __name__=='__main__':
27     main()
28 
29 raw_input('press any key to exit')

 

CRC32碰撞

——————————————————————————————————————————————————————————————

CRC校验实用程序库 在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段。在诸多检错手段中,CRC是最著名的一种。CRC的全称是循环冗余校验。

总之每个文件都有唯一的CRC32值,即便数据中一个bit发生变化,也会导致CRC32值不同。若是知道一段数据的长度和CRC32值,便可穷举数据,与其CRC32对照,以此达到暴力猜解的目的。但通常只适用于较小文本文件。

比如这里有一个加密的rar,直接双击就可以看见其中信息,而且我知道其中全是数字,便可写脚本爆破

 

 1 from zlib import crc32
 2 import random
 3 
 4 char='0123456789'
 5 
 6 def crc32_f(data):
 7     return hex(crc32(data)&0xffffffff)[2:10]
 8 
 9 length=input('length:')
10 crc32_=raw_input('crc32:').lower()
11 
12 while True:
13     text=''
14     for i in range(length):
15         text+=char[random.randint(0,len(char)-1)]
16     if crc32_f(text)==crc32_:
17         raw_input('find it:'+text)
18         exit

 

python2中的crc32()计算的crc32值是有符号的,所以&0xffffffff转换成无符号数值由于全是数字,7位也不算太高,跑了3分钟左右便出结果了

 

 已知明文攻击

——————————————————————————————————————————————————————————————

如果得到了加密压缩包中的某个文件,那么就可以通过明文攻击来获取压缩密码

 

 

 这里得到了163264.txt文件,以及一个加密的misc2.zip,misc2.zip中的文件即是我们得到的这个文件,先将已知的文件压缩,从CRC32也可以看出两个文件是一样的

 

 然后在软件中选择明文(plain-text),填入路径点击开始

 

 我跑了大约一两分钟

 

 文章转载自:https://www.cnblogs.com/leixiao-/p/9824557.html

参考:zip文件构成:https://blog.csdn.net/wclxyn/article/details/7288994

 

posted @ 2020-07-05 10:13  SharkSword  阅读(2059)  评论(0编辑  收藏  举报