杂项 - 压缩包

1 题目

「task-zip.exe」https://www.aliyundrive.com/s/68R3QRK3vgi 提取码: 2n1g

2 分析

打开是一个 task.zip 压缩包,里面有一个 flag1 文件。
image

拖进 010 看一下,无法确定文件格式,但可以看到 flag(正序、逆序)字样。

image

拉到最后,看到文件原来是逆序的,是一个zip

image

Python 还原成正序的压缩包。

with open('flag1', 'rb') as fx:
    open('aaa.zip', 'wb').write(fx.read()[::-1])

里面是一个 flag2 文件

image

结合题目描述,“下 100 层”,应该是按照“逆序->解压->逆序”的循环到 flag100,Python 代码如下:

import zipfile as z

def uzip(i):
    with open('flag' + str(i), 'rb') as fx:
        open('flag' + str(i+1) + '.zip', 'wb').write(fx.read()[::-1])
        with z.ZipFile('flag' + str(i+1) + '.zip', 'r') as zzz:
            zzz.extractall('./')

for i in range(1, 100):
    uzip(i)

解压 flag100.zip,得到 hint 和 task 两个 txt

image

task.txt 里面是某种 base 编码,但是内容非常多,无法直接解码。

查看 hint.txt,里面是一个正则的提示

digits lowercase lowercase lowercase lowercase lowercase uppercase !uppercase I_am_here lowercase digits digits uppercase !digits

因此,编写正则并对 task.txt 进行提取

with open('task.txt','r') as f:
    pat = re.compile(r'\d[a-z]{5}[A-Z][^A-Z](.)[a-z]\d{2}[A-Z]\D')
    print(pat.findall(f.read()))

Pythonre 模块中,findall 函数对带分组的正则会提取分组的内容,这里正好利用了这点。

执行,得到一个字符串,

['T', 'V', 'p', 'X', 'R', '0', 'N', 'a', 'M', 'z', 'N', 'L', 'U', 'l', 'V', 'H', 'S', '1', 'g', 'y', 'Q', '0', 'd', 'G', 'N', 'U', 'd', 'D', 'N', 'F', 'R', 'T', 'T', 'V', 'Z', 'Q', 'V', 'U', 'N', 'a', 'R', 'F', 'd', 'H', 'T', 'l', 'h', 'I', 'S', 'T', 'V', 'M', 'U', '0', 'l', 'W', 'U', 'F', 'R', 'B', 'W', 'l', 'M', '3', 'S', 'k', 'p', 'I', 'V', 'V', 'V', 'U', 'M', 'z', 'U', '=']

拼接出来

print(''.join(pat.findall(f.read())))

得到

TVpXR0NaMzNLUlVHS1gyQ0dGNUdDNFRTTVZQVUNaRFdHTlhISTVMU0lWUFRBWlM3SkpIVVVUMzU=

放到 cyberchef 解码,自动识别为 base64 + base32,得到 flag。

Over。

posted @ 2022-09-11 11:05  Ainsliaea  阅读(234)  评论(0编辑  收藏  举报