遇到个杂项的题目,没见过的类型,反思一下,拿到图片后,能想到的点太少,所以就写一下这个关于隐写的总结。
pngcheck安装的话在kali中使用
apt-get install pngcheck #非root加上sudo
使用工具pngcheck来看一下。
正常的块的length是在65524的时候就满了,而倒数第二个IDAT块长度是44671,最后一个长度是73,很明显最后一个IDAT块是有问题的,因为他本来应该并入到倒数第二个未满的块里。
binwalk提取一下
得到两个zlib文件。以前的思路,zlib文件,里面没东西。不管了。
这次不一样,信息恰恰藏在zlib文件中。
在windows中打开吧,四个文件,
没有zlib后缀的就是zlib解压后的文件。
5B文件里 ,没有找到什么可疑的。反而在2AE96中看到
十六进制的部分,没有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
然后转换一下得到
和JJencode编码很像
于是将S
替换成$
再进行解码
$.$$$_+$.$__$+$.___+$.__$+$.$$$$+$.$$$_+$.$__$+$.__$+"-"+$.$_$$+$.$_$_+$.$$_$+$.$$_+"-"+$.$__+$.$_$_+$.$$$$+$.$$$+"-"+$.$__$+$.$__$+$.$$_+$._$$+"-"+$.$$_$+$.$_$_+$.$$_$+$.$___+$.__$+$._$_+$.$$$$+$.$_$+$.$$_+$._$_+$.$__+$.$$_$
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ZIrjjsK-1607764173218)(https://s3.ax1x.com/2020/11/23/DYWnqf.png)]
这个也是
然后直接提取就可以得到zlib文件了,binwalk提取出来是不需要解压缩包的,所以直接看到了文件中的二进制数字,全是0
和1
脚本画图,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网鼎杯的原题,下面是图片。
在010editor中打开,发现最后的
这就是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()