我正在参加「创意开发 投稿大赛」详情请看:掘金创意开发大赛来了!
引子
上期给大家带来了JPG的隐写方式,今天我来给大家说一说PNG(文件头:89 50 4E 47 0D 0A 1A 0A),借用百度百科的资料来说:
PNG(Portable Network Graphics),便携式网络图形,是一种采用无损压缩算法的位图格式,支持索引、灰度、RGB三种颜色方案以及Alpha通道等特性。 [5] 其设计目的是试图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。PNG使用从LZ77派生的无损数据压缩算法,一般应用于JAVA程序、网页或S60程序中,原因是它压缩比高,生成文件体积小。PNG文件的扩展名为.png
你可曾想到PNG其实也可以藏着需要重要信息呢,接下来我将以CTF比赛中遇到的PNG图片隐写方式,给大家看看出题的创意
属性隐写
先来一个最简单的,右键属性大家知道不,往往有的信息就在属性之中,对于这种隐写方式,我们有一个专门工具EXITFOOL,该工具可以一键列出该图片的所有属性,十分好用
LSB隐写
lsb隐写主要是通过stegsolve和zsteg配合使用发现隐藏的信息。
放一个下载链接:
考点一:flag或key隐藏在了通道里
当有信息藏在通道里时,我们可以使用stegsolve工具,逐个通道的查看来寻找有用信息
考点二:隐藏在色道的最低位。
通过观察通道里的东西,判断隐藏在了哪里,也是使用stegsolve工具逐个看,当然zsteg工具为我们提供了展现PNG全部信息的功能,也是非常好用
zsteg -a + 图片 //-a就是全部
考点三:cloacked-pixel-lsb隐写加密
简称LSB隐写,这个工具对内容的隐写是可以进行加密的,命令后面跟着的就是密码
python2 lsb.py extract 6.png 22.txt v50
含义就是将PNG里面的TXT信息提出来,密钥就是v50
SlientEye
与上文应用方法相似
stegpy
stegpy是一种将编码信息隐写在图像和音频文件中的程序。使用Python编写
安装方法
pip3 install stegpy
sudo python3 setup.py install
可以设置密码也可以不设置
stegpy 图片 -p 密码
IDAT数据块隐写
常见的是隐藏zlib数据,具体实际应用是用010EDITOR查看数据块,发现藏有压缩包,我们便可以使用binwalk分离
binwalk -e 文件
爆破宽高
图片宽高被修改可能会隐藏一些信息,因此,我们有专门的脚本来爆破正确的宽高,当我们将PNG图片放入010EDITOR发现提示CRC错报,便可以试试这个
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author: moddemod
# datetime: 2020/1/3 下午10:37
# ide: PyCharm
import zlib
import struct
filename = 'mod.png'
with open(filename, 'rb') as f:
all_b = f.read()
data_f = all_b[:12]
# data = all_b[12:29]
# print(data)
data_r = all_b[29:]
data_idch = all_b[12:17]
data_l = all_b[25:29]
# width = all_b[17:21]
# height = all_b[21:25]
# print(width, height)
crc32key = int(all_b[29:33].hex(), 16)
data = ''
for w in range(184570, 184577):
for h in range(22790, 22793):
width = struct.pack('>i', w)
height = struct.pack('>i', h)
data = data_idch + width + height + data_l
print(data)
# print(len(data))
if zlib.crc32(data) == crc32key:
print(w, h)
with open('r.png', 'wb') as f1:
f1.write(data_f + data + data_r)
break
结语
对于这些隐写方法是不是很有创意,如果大家还有什么补充的,可以在评论区分享一下