题目链接:
链接:https://pan.baidu.com/s/1ecQH2MfWSraSKbnfalhr5Q
提取码:1qgi
总共36个压缩包,每个压缩包里有一个“flag.txt"的3字节大小文件
使用crc32碰撞来完成
python脚本代码(python2.7。借鉴某个大神的):
#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: s = i + j + p if crc == (binascii.crc32(s) & 0xffffffff): #print s f.write(s+"\n") return def CrackZip(): for I in range(36): file = 'flag' + str(I) + '.zip' f = zipfile.ZipFile(file, 'r') GetCrc = f.getinfo('flag.txt') crc = GetCrc.CRC #以上3行为获取压缩包CRC32值的步骤 #print hex(crc) CrackCrc(crc) dic = string.ascii_letters + string.digits + '+/=' f = open('out.txt', 'w') CrackZip() f.close()
得到一个dout.txt的文件,截图部分
经过尝试发现这是ASCII码的十进制数字,对应的字符串应该是base64加密的,使用脚本将其还原
还原代码(python3.7):
import base64 list=[] #逐行读取 for line in open("out.txt","r"): a=int(line) #将十进制ASCII码转换成字符串,并添加到列表 list.append(chr(a)) #打印输出经过base64转换的列表 print(base64.b64decode("".join(list)))
得到flag
flag{2iP_Crc_i5_v3Ry_fUn}