杂项 - 压缩包
1 题目
「task-zip.exe」https://www.aliyundrive.com/s/68R3QRK3vgi 提取码: 2n1g
2 分析
打开是一个 task.zip 压缩包,里面有一个 flag1 文件。
拖进 010 看一下,无法确定文件格式,但可以看到 flag(正序、逆序)字样。
拉到最后,看到文件原来是逆序的,是一个zip
用 Python
还原成正序的压缩包。
with open('flag1', 'rb') as fx:
open('aaa.zip', 'wb').write(fx.read()[::-1])
里面是一个 flag2 文件
结合题目描述,“下 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
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()))
Python
的 re
模块中,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。