破解压缩包的几种方式(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