buuuctf_zip

题目链接 : 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}