《2024泰山杯-MISC-签到题》小记

《2024泰山杯-MISC-签到题》小记

这是一个循环解压的题目。
解压之后发现一个一个就好像套娃,唯一的区别就是文件名称不一样,解压到最后,终于看到一个flag.txt的文件,打开以后懵逼了。

DASCTF{ni_cai?}

人还怪好来,还用拼音让我猜。。。
file
到这一步,我们能找flag的线索就剩下文件名称了。
于是,首先用脚本把文件名称记录下来。


# -*- coding: utf-8 -*-
import os
import shutil
import zipfile

TMP_PATH = './tmp'
OUTPUT_PATH = './out'
file_no = 0

zip_list = ['I.zip']

def prepare_dir():
    global  TMP_PATH,OUTPUT_PATH
    if not os.path.exists(TMP_PATH):
        os.makedirs(TMP_PATH,777)
    if not os.path.exists(OUTPUT_PATH):
        os.makedirs(OUTPUT_PATH,777)
def unzip_file(zp):
    global file_no, zip_list
    file_no = file_no + 1
    if os.path.splitext(zp)[1] != '.zip':
        print(zip_list)
        exit(0)
    with zipfile.ZipFile(zp, 'r') as zip_file:
        zip_file.extractall(TMP_PATH)
    flist = os.scandir(TMP_PATH)
    zip_entry = next(flist, None)
    if zip_entry is not None:
        zip_list.append(zip_entry.name)
        out_path = "{}/{}-{}".format(OUTPUT_PATH, file_no, zip_entry.name)
        shutil.move(zip_entry.path, out_path)
        unzip_file(out_path)

if __name__ == '__main__':
    prepare_dir()
    unzip_file('I.zip')
    print(zip_list)

最后得到这样一个列表

['I.zip', 'C7.zip', 'TD.zip', 'HB.zip', 'JR.zip', 'SY.zip', '4T.zip', 'HA.zip', 'BX.zip', 'GM.zip', 'ZD.zip', 'FU.zip', '3G.zip', 'GM.zip', 'QW.zip', 'FV.zip', 'TF.zip', 'IZ.zip', '2D.zip', 'FU.zip', 'BY.zip', 'CN.zip', 'SD.zip', 'FV.zip', 'JW.zip', 'CO.zip', '2G.zip', 'GE.zip', '3F.zip', 'SY.zip', '5T.zip', 'IZ.zip', '2U.zip', 'GQ.zip', 'AV.zip', 'IR.zip', 'flag.zip', 'flag.txt']

难点也在对这个列表进行解析了,废了很大的力气,不卖关子了,去掉flag.zip之后的内容,然后dui每个文件名进行倒序处理,拼接,然后再逆序,最后在base32解析就好了。我真是服了出题的这个老六!

# -*- coding: utf-8 -*-
import base64
if __name__ == '__main__':
    s = ['I.zip', 'C7.zip', 'TD.zip', 'HB.zip', 'JR.zip', 'SY.zip', '4T.zip', 'HA.zip', 'BX.zip', 'GM.zip', 'ZD.zip', 'FU.zip', '3G.zip', 'GM.zip', 'QW.zip', 'FV.zip', 'TF.zip', 'IZ.zip', '2D.zip', 'FU.zip', 'BY.zip', 'CN.zip', 'SD.zip', 'FV.zip', 'JW.zip', 'CO.zip', '2G.zip', 'GE.zip', '3F.zip', 'SY.zip', '5T.zip', 'IZ.zip', '2U.zip', 'GQ.zip', 'AV.zip', 'IR.zip', 'flag.zip', 'flag.txt']
    s = s[:-2]

    s = [x.replace('.zip','')[::-1] for x in s] # 文件名逆序处理
    s1 = "".join(s)
    s2 = s1[::-1] # 对整个串逆序处理
    s2+='=' # 不够8的倍数,需要填充一个 
    dstr = base64.b32decode(s2).decode()
    print(dstr)

最终得到结果

DASCTF{9ce14a96-d148-44fe-ac3f-2307899a18f1}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注