《2024泰山杯-MISC-签到题》小记
这是一个循环解压的题目。
解压之后发现一个一个就好像套娃,唯一的区别就是文件名称不一样,解压到最后,终于看到一个flag.txt
的文件,打开以后懵逼了。
DASCTF{ni_cai?}
人还怪好来,还用拼音让我猜。。。
到这一步,我们能找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}