隐写之pngcheck+zlib&文件头尾逆序

前言

遇到个杂项的题目,没见过的类型,反思一下,拿到图片后,能想到的点太少,所以就写一下这个关于隐写的总结。

pngcheck+zlib隐藏信息

题目1—可乐加冰

pngcheck安装的话在kali中使用

apt-get install pngcheck  #非root加上sudo

隐写之pngcheck+zlib&文件头尾逆序_第1张图片
使用工具pngcheck来看一下。
隐写之pngcheck+zlib&文件头尾逆序_第2张图片
正常的块的length是在65524的时候就满了,而倒数第二个IDAT块长度是44671,最后一个长度是73,很明显最后一个IDAT块是有问题的,因为他本来应该并入到倒数第二个未满的块里。
binwalk提取一下
得到两个zlib文件。以前的思路,zlib文件,里面没东西。不管了。
这次不一样,信息恰恰藏在zlib文件中。
隐写之pngcheck+zlib&文件头尾逆序_第3张图片
在windows中打开吧,四个文件,
隐写之pngcheck+zlib&文件头尾逆序_第4张图片
没有zlib后缀的就是zlib解压后的文件。
5B文件里 ,没有找到什么可疑的。反而在2AE96中看到
隐写之pngcheck+zlib&文件头尾逆序_第5张图片
十六进制的部分,没有A-F这类的也就是说,只有数字,很可能是10进制的数字。复制出来转一下字符串,注意是ascii码转字符串,将其空格替换成逗号进行批量转换。

83,46,36,36,36,95,43,83,46,36,95,95,36,43,83,46,95,95,95,43,83,46,95,95,36,43,83,46,36,36,36,36,43,83,46,36,36,36,95,43,83,46,36,95,95,36,43,83,46,95,95,36,43,34,45,34,43,83,46,36,95,36,36,43,83,46,36,95,36,95,43,83,46,36,36,95,36,43,83,46,36,36,95,43,34,45,34,43,83,46,36,95,95,43,83,46,36,95,36,95,43,83,46,36,36,36,36,43,83,46,36,36,36,43,34,45,34,43,83,46,36,95,95,36,43,83,46,36,95,95,36,43,83,46,36,36,95,43,83,46,95,36,36,43,34,45,34,43,83,46,36,36,95,36,43,83,46,36,95,36,95,43,83,46,36,36,95,36,43,83,46,36,95,95,95,43,83,46,95,95,36,43,83,46,95,36,95,43,83,46,36,36,36,36,43,83,46,36,95,36,43,83,46,36,36,95,43,83,46,95,36,95,43,83,46,36,95,95,43,83,46,36,36,95,36

然后转换一下得到
隐写之pngcheck+zlib&文件头尾逆序_第6张图片
和JJencode编码很像
隐写之pngcheck+zlib&文件头尾逆序_第7张图片
于是将S替换成$再进行解码

$.$$$_+$.$__$+$.___+$.__$+$.$$$$+$.$$$_+$.$__$+$.__$+"-"+$.$_$$+$.$_$_+$.$$_$+$.$$_+"-"+$.$__+$.$_$_+$.$$$$+$.$$$+"-"+$.$__$+$.$__$+$.$$_+$._$$+"-"+$.$$_$+$.$_$_+$.$$_$+$.$___+$.__$+$._$_+$.$$$$+$.$_$+$.$$_+$._$_+$.$__+$.$$_$

隐写之pngcheck+zlib&文件头尾逆序_第8张图片

题目2—未知

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ZIrjjsK-1607764173218)(https://s3.ax1x.com/2020/11/23/DYWnqf.png)]
这个也是
隐写之pngcheck+zlib&文件头尾逆序_第9张图片
然后直接提取就可以得到zlib文件了,binwalk提取出来是不需要解压缩包的,所以直接看到了文件中的二进制数字,全是01
隐写之pngcheck+zlib&文件头尾逆序_第10张图片
脚本画图,0作黑,1作白,得不到结果就反过来。尝试两遍就得到了。
脚本如下

import PIL.Image
MAX = 25
pic = PIL.Image.new("RGB",(MAX,MAX))
str = "1111111000100001101111111100000101110010110100000110111010100000000010111011011101001000000001011101101110101110110100101110110000010101011011010000011111111010101010101111111000000001011101110000000011010011000001010011101101111010101001000011100000000000101000000001001001101000100111001111011100111100001110111110001100101000110011100001010100011010001111010110000010100010110000011011101100100001110011100100001011111110100000000110101001000111101111111011100001101011011100000100001100110001111010111010001101001111100001011101011000111010011100101110100100111011011000110000010110001101000110001111111011010110111011011"
i = 0
for y in range (0,MAX):
        for x in range (0,MAX):
                if(str[i] == '1'):
                        pic.putpixel([x,y],(0,0,0))
                else:
                        pic.putpixel([x,y],(255,255,255))
                i = i+1
pic.show()
pic.save("flag.png")

扫描即可得到flag。

文件头尾逆序

所谓文件头尾逆序,就是将整个文件的十六进制序列整个颠倒过来,在CTFhub中找到了2018网鼎杯的原题,下面是图片。
隐写之pngcheck+zlib&文件头尾逆序_第11张图片
在010editor中打开,发现最后的
隐写之pngcheck+zlib&文件头尾逆序_第12张图片
这就是png头反过来了,所以将其颠倒回来查看一下。
使用python进行处理。

input = open('flag.jpg', 'rb')
input_all = input.read()
ss = input_all[::-1]
output = open('m0re.jpg', 'wb')
output.write(ss)
input.close()
output.close()

跑一下得到flag
m0re
看的时候,注意细节。
后续遇到再补充…mark一下先

你可能感兴趣的:(CTF,隐写,pngcheck)