前言

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

pngcheck+zlib隐藏信息

题目1—可乐加冰

pngcheck安装的话在kali中使用

apt-get install pngcheck  #非root加上sudo

m0re
使用工具pngcheck来看一下。
m0re
正常的块的length是在65524的时候就满了,而倒数第二个IDAT块长度是44671,最后一个长度是73,很明显最后一个IDAT块是有问题的,因为他本来应该并入到倒数第二个未满的块里。
binwalk提取一下
得到两个zlib文件。以前的思路,zlib文件,里面没东西。不管了。
这次不一样,信息恰恰藏在zlib文件中。
m0re
在windows中打开吧,四个文件,
m0re
没有zlib后缀的就是zlib解压后的文件。
5B文件里 ,没有找到什么可疑的。反而在2AE96中看到
m0re
十六进制的部分,没有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

然后转换一下得到
m0re
和JJencode编码很像
m0re
于是将S替换成$再进行解码

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

m0re

题目2—未知

m0re
这个也是
m0re
然后直接提取就可以得到zlib文件了,binwalk提取出来是不需要解压缩包的,所以直接看到了文件中的二进制数字,全是01
m0re
脚本画图,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网鼎杯的原题,下面是图片。
m0re
在010editor中打开,发现最后的
m0re
这就是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一下先