赞
踩
解答:png图片没有直接给flag,用010editor打开看一下,发现flag被附加了后面。
解答:jpg图片,用010editor查看获取flag。
解答:与misc6一样,jpg图片,用010editor查看获取flag。
解答:可以看到png图片的结尾在中间出现了一次,然后接续png的开头。所以拼接了两个png。
用foremost分离一下,拆分出了2个图片,其中一个是flag。
解答:png图片,用010editor查看获取flag。
解答:用binwalk分离一下,获取到了flag。
解答:用010Editor打开,有两块IDAT块,
这里我用tweakPNG查看(010也可以),可以看到两个IDAT的长度,第一个比第二个要小,说明第一块是有问题的。
IDAT(image data chunk)存储实际的数据,数据流中可以包含多个连续顺序的图像数据快,但是只有当前一个块充满的时候,才会继续下一个块。通常来说,块大小对应于编码器的缓冲区大小。(每个IDAT块也可以只包含一个数据字节,甚至0字节的PNG数据流,都是有效的,但非常浪费空间。)
所以如果有两个块,前一个的大小必然要大于后一个,这里明显不对。
删除第一个查看一下,后面部分的IDAT块是flag内容。
这里我也找了一个图片,用010可以看到,这个图的IDAT的大小就是连续顺序的数据块,前面的IDAT都是相同大小,只有最后一个是不同的。
解答:还是删除IDAT快。
用tweakPNG可以看到这个图的IDAT数据大小不一,那就一个一个的测试,逐一删除尝试。
删除了几个IDAT块后,大概7-8个,图片出现了flag。
解答:用010Editor查看,发现了很多类似这种ctfshow中间夹杂字符的flag。
对这些flag逐一测试,找到最后的正确答案。附上脚本:
r = ''
a="""63 1A 74 B9 66 85 73 86 68 AA 6F 4B 77 B0 7B 21 61 14 65 53 36 A5 65 54 33 34 65 78 61 25 34 DD 38 EF 66 AB 35 10 31 95 38 1F 62 82 37 BA 65 45 34 7C 32 54 64 7E 37 3A 64 E4 65 F1 36 FA 66 F5 34 1E 31 07 32 1D 66 54 38 F1 33 32 39 E9 61 6C 7D"""
b=a.split(' ')
for i in range(0,len(b),2):
try:
r+=str(bytes.fromhex(b[i]),encoding="utf-8")
except:
pass
print(r)
#ctfshow{ae6e3ea48f518b7e42d7de6f412f839a}
解答:binwalk查看一下,发现存在两张图片。
JPEG有两种格式即JFIF和EXIF。我们把后面的JFIF的图片提取一下。
在010Editor中找到JFIF的头部。
然后把FFD8前面部分全部删除即可获取到flag图片。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。