- misc45
- misc46
- misc47
- misc48
- misc49
提示:有时候也需要换一换思维格式 解答:常规做法没有发现信息,题目提示换个格式,之前我们做的题目里除了png,还有:bmp、jpg、gif。大概率是bmp,因为bmp的数值存储方式和排序和其他的都不太一样。
用windows自带的画图软件打开,另为存为bmp格式。 再用binwalk分离得到了flag。
ctfshow{057a722a5587979c34966c2436283e70}
提示:你见过扶乩吗 解答:打开gif图片后,发现图片在不断的位移,可以考虑这些偏移地址提取出来,看看是否有用。用identity提取gif的信息存储到一个txt文件里。
identify misc46.gif > 46.txt
写段代码把偏移提取出来,并按照gnuplot需要的格式存放到一个txt文件里。 (buuctf里的梅花香之苦寒来也是个画图题,有兴趣的可以看一下。)
arr=[]
with open('46.txt','r') as file:
for i in file.readlines():
content_list=i.split(' ')
arr.append(content_list[3][8:].replace('+',' '))
with open('46_point.txt','w') as result:
for i in arr:
result.write(i+'\n')
#print(arr)
可以在kali里安装个gnuplot。用它画图。 sudo apt-get install gnuplot
垂直反转就是flag,图片不是很清晰,需要调整一下宽度和大小。ctfshow{05906b3be8742a13a93898186bc5802f}
(emmm为什么说扶乩呢?做完题也不理解)
misc47提示:没见过扶乩,那你知道笔仙吗 解答:和36题类似。直接打开png图片是空白的,用浏览器打开发现和misc46一样是个不断位移的图片,是apng。
可以用TweakPNG看一下,但是它好像只能直接修改图片,没有提供导出这些信息的功能。
写个脚本提取一下。可以看到这个偏移地址都在fcTL中。
先用010导出一下文件十六进制格式。
存储后变成这个格式:
把空格和换行替换为空。
接下来就是开始写脚本啦~
with open('47.txt','r') as file:
content=file.read()
content_list=content.split('6663544C')[1:]
with open('47_point.txt','w') as result:
for i in content_list:
result.write(str(int(i[8*3:8*4],16))+' '+str(int(i[8*4:8*5],16))+'\n')
再用gnuplot工具画个图就ok了,记得垂直翻转。 ctfshow{6d51f85b45a0061754a2776a32cf26c4}
提示:附件的第(Di)七(Qi)题(Ti)中有提示。本题略脑洞,可跳过 解答:图片用010打开,发现有提示。 统计FF的数量,减1。ctfshow{32个字符}
这提示指的是连续的FF的长度-1。
接下来就是用眼瞪,或者各种替换操作之后再写脚本统计。
比如参照misc48先把十六进制数据导出。然后: ---->回车替换为空格 ---->FF替换为XX ---->然后正则匹配替换[^X| ]
(这样整个文档只剩下XX和一堆空格) ---->再把连续的两个空格替换为回车 ---->单个空格置空 ---->回车再转为GG。(各种替换疯狂操作,能直接替换绝不写脚本,哈哈哈哈) 接下来就可以用了
text="太长了就不放上来了"
list=text.split('GG')
for i in list:
a=len(i)//2-1
if(a>=0):
print(str(hex(a))[2:],end='')
最后的flag就是:ctfshow{0cb07add909d0d60a92101a8b5c7223a}
提示:它们一来就是十六种。本题略脑洞,可跳过 解答: 用010打开发现有很多色块,都是FFE开头。 (emmm提示和wp是怎么联系起来的,这脑洞是我不配了。。) 具体就是提取FFE后面的那个字符。
导出图片的十六进制格式,然后把回车和空格置空另存一下。
最后再写个小脚本获取一下flag。
with open('misc49.txt','r')as file:
content=file.read()
content_list=content.split('FFE')[1:]
result=""
for i in content_list:
result+=i[:1]
flag="ctfshow{"+result.lower()[:32]+'}'
print(flag)
#ctfshow{0c618671a153f5da3948fdb2a2238e44}