png隐写
在当前CTF比赛中,png图片隐写仍然是经常遇到的题目类型,在此总结下PNG图片中常见的解题方式,在后续的比赛中如果遇到可以先尝试本文的方法。 png图片
一、PNG图片格式
1、识别:
开始标志:89 50 4E 47 0D 0A 1A 0A 可见文本:‰PNG
结束标志:60 82
二、常用解题方法
1、010edit分析 1.1 尝试修改文件高度 1.2 分析文件是否逆序、高低字节转换等。 1.3 分析文件结尾是否有多余数据。 1.4 分析各个IDAT块异常,多余的正常IDAT。
2、StegSolve
2.1、对图像进行分通道扫描 2.2、分析data Extract的red blue green,查看是否为LSB隐写
3、strings 、 exiftool、 pngcheck -v 、binwalk、foremost 命令分析处理
使用以上命令分析文件。
4、zsteg
zsteg支持png和bmp隐写分析
zsteg xxx.png zsteg xxx.png -a
5、stegpy
需要先获取密码,后使用如下命令:
stegpy xxx.png -p pwd
6、Oursecret
使用Oursecret工具解密图片,需要密码。
7、SlientEye
使用SlientEye工具解密图片
8、zlib解密脚本:
我们找到存在问题的IDAT块,利用 python zlib解压多余 IDAT 块的内容,此时注意剔除 长度、数据块类型及末尾的 CRC 校验值。
三、常用python脚本:
1、zlib解密: import zlib import binascii IDAT = “789…667”.decode(‘hex’) result = binascii.hexlify(zlib.decompress(IDAT)) print result
2、高低字节反转 with open(‘xxx.png’,‘rb’) as f: src = f.read() print(src[:16]) dest =list() for i in range(int(len(src)/2)): dest.append(src[2i+1]) dest.append(src[2i]) dest = bytes(dest) with open(‘flag.png’,‘wb’) as f: f.write(dest)