ctfshow 做题 MISC入门 模块 41-50
Posted Goodric
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ctfshow 做题 MISC入门 模块 41-50相关的知识,希望对你有一定的参考价值。
ctfshow 做题 MISC入门 模块 41-50
——
misc41
题目描述:
H4ppy Apr1l F001’s D4y!
愚人节到了,一群笨蛋往南飞,一会儿排成S字,一会儿排成B字。
直接点开图片是无法打开的,查看 16 进制文件头是错误的。
但这题的解法比较脑洞,需要用到题目描述中的关键字 ‘F001’
用 010editor 打开,搜索关键字 F001 ,可以看到紫色加深形成的不同字母的形状,把每一个看到的字符组合即得到 flag 。
ctfshow{fcbd427caf4a52f1147ab44346cd1cdd}
——
——
misc42
题目描述:flag有多长?2cm……不好意思打错了,41位
用 010editor 打开,查看用 模板 的编辑方式,看到有很多个 IDAT 数据块,共 48 个。
用 tweakpng 打开,可以看到每个 IDAT 项的长度 length 项。
从第 8 个开始,十进制 99 转字符为字母 c ,后面一直到第 48 个,共 41 个十进制数字,转化为字符组合起来,即得到 flag 。
ctfshow{078cbd0f9c8d3f2158e70529f8913c65}
——
——
misc43
题目描述: 错误中隐藏着通往正确答案的道路
先用 010editor 打开,同样看到有多个 IDAT 块。
所以尝试用 tweakpng 打开,发现一打开就开始报错,并且有很多个。
所有报错信息记录下来:
e59387e5 should be 8385f691
93a62e63 should be 42434298
74667368 should be 4462c3a1
6f777b36 should be 397611e1
65623235 should be 4f02afa2
38396666 should be defed27f
66663565 should be 03f13ec2
33393066 should be 665b7bef
65366238 should be 66671da0
37353034 should be 9922f98f
64626330 should be 26bc187a
3839327d should be ee9d6cb4
把 should be 前面每组 8 位的 16 进制字符组合在一起,16 进制转字符得到 flag 。
e59387e593a62e63746673686f777b36656232353839666666663565333930666536623837353034646263303839327d
——
——
misc44
题目描述:错误中还隐藏着坑
和前一题一样,有很多个 IDAT 块.。但是无法采取用 tweakpng 打开查看报错。
因为总共有几百个 IDAT 块,报错也可能上百个,统计报错信息的话就太多了。
这里要用到一个工具 PNGDebugger
使用及下载参考这里:
https://blog.csdn.net/Goodric/article/details/119732559?spm=1001.2014.3001.5501
命令:
pngdebugger C:\\Users\\Goodric\\Desktop\\misc44.png > 1.txt
在 debug 文件夹下得到 1.txt 文本,
这里要把 OK! 换成 1 ,把 FAILED 换成 0 ,组成一串二进制数字,再将那串二进制转字符。
用 python 脚本实现:(先把文本中前十行和最后4行 IHDR 和 IEND 的无用数据去掉)
f=open("E:/png-debugger-master/Debug/1.txt","r")
s=f.read()
f.close()
flag=""
for i in s.split():
if "OK!" == i:
flag += "1"
elif "FAILED" ==i:
flag += "0"
print(flag)
print(len(flag))
for i in range(43):
print(chr(int(flag[8*i:8*(i+1)],2)),end="")
脚本来源:https://blog.csdn.net/weixin_45696568/article/details/115261347
运行结果,得到 flag 。
——
——
misc45
题目描述: 有时候也需要换一换思维格式
这题大概思路是先把后缀改为 bmp ,再进行 binwalk 提取,得到 flag 。
感觉这题原理目前不清,就是如果再来这样的题目,该从哪里找线索让我们会去换格式和提取。现在知道的线索就是题目描述中的“格式”。
而对于为什么要在 bmp 格式下才能用 binwalk 提取到结果,有 wp 解释是 png和bmp像素点的读取方式不一样。
在线网站把图片格式从 png 转化为 bmp 。
然后用 binwalk 提取:
在提取到的压缩包内有一张图片 flag.png ,得到 flag 。
ctfshow{057a722a5587979c34966c2436283e70}
——
——
misc46
题目描述: 你见过扶乩吗
下载附件为一张 gif 动图,有将近六百帧图片。
这题是用 gif 每一帧的偏移量作为坐标来画图。
可以用 identify 命令获取 gif 图片的详细信息得到偏移量。
identify misc46.gif > 1.txt
得到详细信息文本 1.txt
脚本:
来源:http://article.docway.net/details?id=6072cb4f0a6c640f8b46213b
from PIL import Image
import matplotlib.pyplot as plt
f = open('C:/Users/Goodric/Desktop/1.txt')
pp = []while 1:
c = f.readline()
if c:
s = eval(c.split('+')[1]+','+c.split('+')[2][:2])
pp.append(s)
print(s)
#print(c)
else:
break
img = Image.new('RGB',(400,70),(255,255,255))for i in pp:
new = Image.new('RGB',(1,1),(0,0,0))
img.paste(new,i)
plt.imshow(img)
plt.show()
代码先是把 1.txt 文本中的坐标全部提取出来,再通过这些坐标进行绘图,绘出了含有 flag 的图案。
ctfshow{05906b3be8742a13a93898186bc5802f}
——
——
misc47
题目描述: 没见过扶乩,那你知道笔仙吗
下载附件为一张 png 图片,可以看到有 563 帧不同的图片,和前面一题类似,有偏移量。
用 010editor 打开,有 fcTL 块,是帧控制块, 属于 PNG 规范中的辅助块,包含了当前帧的序列号、图像的宽高及水平垂直偏移量,帧播放时长和绘制方式(dispose_op 和 blend_op)等,每一帧都有一个 fcTL 块。
所以需要从十六进制中提取出偏移量的坐标,再通过坐标进行绘图。
现在我也不会~,只能找大佬的 wp 了解一下大概的做法顺便贴个大佬脚本。
import struct
from PIL import Image
import matplotlib.pyplot as plt
f = open('misc47.png','rb')
c = f.read()
c = c[c.index(bytes.fromhex('6663544C00000001')):]
pp = []for i in range(1,1124,2):
start = c.index(bytes.fromhex('6663544C0000')+struct.pack('>h',i))
#start = c.index(bytes.fromhex('6663544C000000'+hex(i)[2:]))
#print(start)
fc = c[start:start+30]
print(fc[18:20],fc[22:24])
print(struct.unpack('>h',fc[18:20])+struct.unpack('>h',fc[22:24]))
pp.append(struct.unpack('>h',fc[18:20])+struct.unpack('>h',fc[22:24]))
#print(fc.index(b'\\xb6'),fc.index(b'\\x34'))# print(c[:100])
img = Image.new('RGB',(400,70),(255,255,255))for i in pp:
new = Image.new('RGB',(1,1),(0,0,0))
img.paste(new,i)
plt.imshow(img)
plt.show()
运行之后可以看到 flag 。
ctfshow{6d51f85b45a0061754a2776a32cf26c4}
——
——
misc48
题目描述: 附件的第(Di)七(Qi)题(Ti)中有提示。本题略脑洞,可跳过
了解到是有一个 DQT 模块,选中模块可以看到是文本中一行内容,是题目的一点提示。
大致意思是计算 FF 的数量并减1 。ctfshow{32} 指 flag 里有 32 位字符。
搜索关键字 FF ,可以看到紫色加深位置 FF ,并且有特别多块区域。比如开头的第一块紫色有 1 个 FF ,减去 1 ,得到第一个数字就是 0 ; 第二块紫色有 13 个 FF ,减去 1 得到数字 12 。依次类推,共统计前 32 块的数量。
最终得到 32 个数字:
0 12 11 0 7 10 13 13 9 0 9 13 0 13 6 0 10 9 2 1 0 1 10 8 11 5 12 7 2 2 3 10
再把这些数字写成 16 进制的格式,如10 为 a ,11 为 b ,全部转换得到:0cb07add909d0d60a92101a8b5c7223a
所以得到 flag :
ctfshow{0cb07add909d0d60a92101a8b5c7223a}
——
——
misc49
题目描述: 它们一来就是十六种。本题略脑洞,可跳过
这题的做法就是统计所有 的 FF E0 - FF EF 块,刚好共有 32 个,而 E 后面那一位就是 flag 中的字符,全部组合起来就是 flag :0c618671a153f5da3948fdb2a2238e44
ctfshow{0c618671a153f5da3948fdb2a2238e44}
我也不知道为什么这样做,可能这就是脑洞题的意思吧,一来就是 16 中 ,即 FF E0 - FF EF 共十六种。
——
——
misc50
题目描述:有时候视线也要放低一点
用 StegSolve 打开,一直点得去不同的颜色通道就能看到 flag 。
ctfshow{84470883ee1eec2e886436461bf79111}
以上是关于ctfshow 做题 MISC入门 模块 41-50的主要内容,如果未能解决你的问题,请参考以下文章