题目链接 : https://buuoj.cn/challenges#zip
解压出来之后有 67 个压缩包文件
用 7z 打开查看, 基本上都是 4 字节大小, 直接 crc 爆破
一开始是尝试手动输入各个文件的 crc 值的, 但是太痛苦了
自己另外改了一个脚本 :
import string
import zipfile
import binascii
# dic 的内容是所有 ASCII 数字和大小写字母加上特殊符号, 也就是 flag 的常见内容
dic = string.ascii_letters + string.digits + '+-={}'
def getcrc(outNum):
'''
获取文件的 CRC32 值, 不过这玩意可以直接用 7z 看
'''
f = zipfile.ZipFile(outNum, "r") # 目标文件是 flag.zip 里面的 flag.txt
GetCrc = f.getinfo("data.txt")
crc = GetCrc.CRC
jisuancrc(crc) # 将得到的crc的值传递给接下来需要计算crc的模块
def jisuancrc(crc):
'''
主循环, 你要爆破几位, 这里就写几个循环
'''
for a in dic:
for b in dic:
for c in dic:
for d in dic:
s = a + b + c + d
s = str(s).encode() #注意python2和python3之间的编码方式的不同, 如果是python2版本则不需要这行
if (binascii.crc32(s)) == crc: # 如果是python2还需要加上0xfffffff 使crc值都是正值,python3则不需要
print (s)
return
if __name__ == "__main__":
# for 循环爆破整个文件夹
for i in range(0, 68):
getcrc('out' + str(i) + '.zip')
把得到的结果拼在一起 :
z5BzAAANAAAAAAAAAKo+egCAIwBJAAAAVAAAAAKGNKv+a2MdSR0zAwABAAAAQ01UCRUUy91BT5UkSNPoj5hFEVFBRvefHSBCfG0ruGnKnygsMyj8SBaZHxsYHY84LEZ24cXtZ01y3k1K1YJ0vpK9HwqUzb6u9z8igEr3dCCQLQAdAAAAHQAAAAJi0efVT2MdSR0wCAAgAAAAZmxZy50eHQAsDRpZmZpeCB0aGUgZmlsZSBhbmQgZ2V0IHRoZSBmbGFnxD17AEAHAA==
题目提示说解 base64
在线工具解 base64 : https://the-x.cn/base64
得到 :
查阅相关资料 :
这是一个文件头损坏的 rar 压缩包
我们把文件头补上去 (010editor 编辑>粘贴自十六进制文本) :
52 61 72 21 1A 07 00
保存为 rar 解压
解压失败
与上面图片对比一下, 这里文件头 crc 和位标记之间不一样
改过来, 解压得到 flag{nev3r_enc0de_t00_sm4ll_fil3_w1th_zip}