[安洵杯 2019]吹着贝斯扫二维码
[安洵杯 2019]吹着贝斯扫二维码
压缩包里面有个flag.zip文件,但是有密码无法打开
并且注释信息里有一串字符GNATOMJVIQZUKNJXGRCTGNRTGI3EMNZTGNBTKRJWGI2UIMRRGNBDEQZWGI3DKMSFGNCDMRJTII3TMNBQGM4TERRTGEZTOMRXGQYDGOBWGI2DCNBY
经过base32解码和16进制转换后得到另一串,但是显然还没有解密,这时候打开压缩包里的其他文件,发现都是jpg图片
这里参考了其他师傅们的方法,有两种方法给所有图片加.jpg后缀
1.使用python脚本批量修改这些文件后缀为.jpg
import os
path = 'C:\\Users\\Administrator\\Downloads\\test'
for i in os.listdir('./test'):
if i == 'flag.zip':
continue
else:
oldname = os.path.join(path,i)
newname = os.path.join(path,i+'.jpg')
os.rename(oldname,newname)
2.命令:ren * *.jpg
这条命令会把此目录下所有文件重命名,所以使用的时候注意目录位置
还有注意这里的flag.zip文件也被重命名,改回.zip后缀就行
可以看到图片是二维码碎片,需要用PS拼接,但总共36张碎片,真要一张张硬拼难度太大了,基本上不太可能完成,所以推测图片中应该有其他隐含图片编号的信息。但图片中没有可以直接利用的信息,用010Editor查看文件,发现文件尾FFD9之后还有冗余信息,是一个数字,每张图片都有这个数字且都不一样,猜测这应该就是图片编号了。
接着参考师傅写好的脚本,把图片重命名
import os
from PIL import Image
#目录路径
dir_name = r"./"
#获取目录下文件名列表
dir_list = os.listdir('./')
#print(dir_list)
#从列表中依次读取文件
for file in dir_list:
if '.jpg' in file:
f=open(file ,'rb')
n1 = str(f.read())
n2 = n1[-3:]
#经过测试发现这里要读取最后3个字节,因为最后还有一个多余的字节,不知道是不是转字符串的原因导致在末尾多了一个字符
#print(file) #输出文件内容
#print(n2)
f.close() #先关闭文件才能重命名,否则会报`文件被占用`错误
os.rename(file,n2+'.jpg') #重命名文件
用PS拼接完成后扫码得到信息
BASE Family Bucket ???
85->64->85->13->16->32
下面的数字提示了是按照此顺序进行base转换的,我们只要把字符串逆着顺序转换一下,应该就可以得到原来的文本。
但是base家族中没有base13,所以这里的13应该是Rot13。
我们的转换顺序应该如下
base32->十六进制->Rot13->base85->base64->base85
压缩包密码就是ThisIsSecret!233
flag{Qr_Is_MeAn1nGfuL}