CRC32碰撞用于绕过压缩包密码获取内部文本信息。内部文件必须为小文件(<10B)

一、无脑for枚举法

实测,大于4B的文件python运算效率极低。。

语言:python2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#coding:utf-8
import zipfile
import string
import binascii

def CrackCrc(crc):
for i in dic :
for j in dic:
for p in dic:
for q in dic:
for m in dic:
for n in dic:
#文件大小为6B的6重循环
s=i+j+p+q+m+n
if crc == (binascii.crc32(s) & 0xffffffff):
print s
#return

def CrackZip():
for I in range(2,3):
file = 'crc.zip'
f = zipfile.ZipFile(file, 'r')
GetCrc = f.getinfo('crc/ad71bf43131c4b3fa27066a3b408f843/'+str(I)+'.txt')
crc = GetCrc.CRC
#以上3行为获取压缩包CRC32值的步骤
CrackCrc(crc)

dic = string.digits+string.ascii_letters+"+="
CrackZip()

二、GitHub上的开源CRC32工具

GitHub: theonlypwner/crc32

语言:Python3

使用方法: python3 crc32.py reverse <CRC32数值(前面加上0x)>