BUUCTF 安洵杯2019吹着贝斯扫二维码
吹着贝斯扫二维码
1.题目概述
2.解题过程
打开flag.zip看看
是个加密的zip,在注释里有一串貌似是base32的编码,可能是密码
去解解看
不过好像解不出来,那先放一放,回去看看那些不明文件,
010打开一个看看
头是jpg,尾巴多了一点东西
改后缀
那就改改后缀看看能不能打开
可以顺利打开,很明显这是一张二维码的一小部分,可以猜想,把全部的文件后缀都改成jpg,然后再把他们拼起来,不就是一张完整的二维码嘛,说干就干,不过也要借助一下脚本,python真是个好东西
import os
path = 'D://CTF//attachment//1' #文件具体路径,这个1是那堆文件所在的文件夹,不成功时可以改个路径
for i in os.listdir('D://CTF//attachment//1'): #路径最好用绝对路径,不会出错
#if i == '修改后缀.py':
# continue
#else:
oldname = os.path.join(path,i)
newname = os.path.join(path,i+'.jpg')
os.rename(oldname,newname)
运行完后,该怎么把这36张图片拼到一起呢?这是个问题(你也不知道顺序)
确认顺序
其实,在之前的图010看的时候,在文件尾后面还有一个数字,
猜测这就是顺序,可以验证一下,
找一个3个角的特殊位置的图片,猜测数字可能是1,6,或31(根据图片数量确定位置)
不放心可以再看看另外两个角
这下可以百分百确定了,这个数字就是拼图顺序
命名文件
可以利用python脚本根据这个顺序命名文件
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') #重命名文件
这些90多的,其实是1-9,代码写的不够好,出了点问题,改一下吧
利用ps拼图
拼图步骤如下:
1.新建,调整高度和宽度,我调整为24X24
2.文件->置入嵌入对象,选择图片
3.操作
注意有些地方可能会有一点点重合,
嘿,拼的还不错
扫一下
确认解码顺序
解码
哦,这个应该就是那串编码的解码顺序了!难怪解不出来
base32→16进制→13→85→85→64→85(根据那串编码的格式判断顺序)
这个13不是base家族的,查了一下,是rot13编码
GNATOMJVIQZUKNJXGRCTGNRTGI3EMNZTGNBTKRJWGI2UIMRRGNBDEQZWGI3DKMSFGNCDMRJTII3TMNBQGM4TERRTGEZTOMRXGQYDGOBWGI2DCNBY
base32解码:3A715D3E574E36326F733C5E625D213B2C62652E3D6E3B7640392F3137274038624148
base16解码::q]>WN62os<^b]!;,be.=n;v@9/17’@8bAH
rot13解码::d]>JA62bf<^o]!;,or.=a;i@9/17’@8oNU
base85解码:PCtvdWU4VFJnQUByYy4mK1lraTA=
base64解码:<+oue8TRgA@rc.&+Yki0
base85解码:ThisIsSecret!233
解压密码就是ThisIsSecret!233
3.flag
flag{Qr_Is_MeAn1nGfuL}