0%

BUUCTF MISC zip

在刷BUU时碰到这题(题目地址),题目给出了许多压缩包,但是没有一点头绪,看了看别人的wp才知道是crc爆破,在此记录一下这个知识点。

正文

CRC全称Cyclic Redundancy Check,也就是循环冗余校验码,是一种能力相当强的检错、纠错码,并且实现编码和检码的电路比较简单,常用于串行传送(二进制位串沿一条信号线逐位传送)的辅助存储器与主机的数据通信和计算机网络中。
总而言之,就是每一个文件都有它唯一的CRC32值,即便数据中一个bit发生变化,也会导致CRC32值不同。若是知道一段数据的长度和CRC32值,便可穷举数据,与其CRC32对照,以此达到暴力猜解的目的。但通常只适用于较小文本文件。
自己写的脚本总出错,于是借用了大佬的脚本https://blog.csdn.net/u011377996/article/details/79360820

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
import zipfile
import string
import binascii

def CrackCrc(crc):
for i in dic:
for j in dic:
for k in dic:
for h in dic:
s = i + j + k + h
if crc == (binascii.crc32(s.encode())):
f.write(s)
return

def CrackZip():
for i in range(0,68):
file = 'out'+str(i)+'.zip'
crc = zipfile.ZipFile(file,'r').getinfo('data.txt').CRC
CrackCrc(crc)

dic = string.ascii_letters + string.digits + '+/='

f = open('out.txt','w')
CrackZip()
print("CRC32碰撞完成")
f.close

碰撞完成后得到一串base64编码,解码一看,要修复文件
查了点资料后发现这是一个rar压缩包 https://blog.csdn.net/vevenlcf/article/details/51538837
修改一下文件,在文件前面加上补上52 61 72 21 1A 07 00 后保存
打开压缩包一看,在备注处看到flag