作者:hhcgchpspk 发布时间:2026-07-05
图片隐写被用于加密重要文件,在ctf比赛的misc方向中也是必考点,在这里我分享一些隐写和解密方法
隐写:
一、文本追加:这是最简单的隐写方法,也是最容易被发现的
with open('1.png','ab') as f:#1.png为要隐写的图片 f.write(b'flag{gc}')
二、修改尺寸:通过修改图片宽高隐藏信息 这里我们首先看目标图片的分辨率(360x314)
转换为十六进制360->168,314->13a 然后我们用winhex看,一般png图片的宽高都在第二行
现在把高度改为250(十六进制为fa)
原图片与现图片对比(信息隐藏在了下面)
![]() | ![]() |
三、LSB隐写:常见的隐写术,通过改变RGB最低二进制位来隐写信息(详细可以自己查,这里篇幅有限--其实我也一知半解)
这里可以用在线工具,也可以用脚本,我这里用stegano库写一个python脚本:
#pip install stegano from stegano import lsb secret=lsb.hide('1.png','flag{gc}') secret.save('output.png') ##好简单啊这脚本,还是用专门的第三方库方便
运行即可
四、文件拼接/附加型隐写,这种一般是在文件中间或末尾附加另一个文件数据 示例:
with open('1.png','rb') as f: img=f.read() with open('n.png','rb') as f: flag=f.read() with open('output.png','wb') as f: f.write(img) f.write(flag)
现在output.png存在了两个图片(看着只有一个)
解密:(与上面的隐写方法对应)
一.直接用winhex打开,在尾部找到隐写内容
二.用winhex找到图片高度的位置,改回原来的高度即可
信息出来了
三.这里推荐使用StegSolve工具 下载地址:http://www.caesum.com/handbook/Stegsolve.jar
下载后打开,使用Data Extract模式
把Red、Green、Blue三个颜色的0通道勾选上,点Preview
隐藏的信息出来了,点Save Bin可以保存隐写信息
四.利用各种工具分离出目标图片
打开kali,那里的破解工具多 用binwalk -e output.png不起效果,但可以读出确有两个图片
binwalk不行就用foremost:
foremost output.png
获得两个图片,打开后的确有隐藏信息
参考文献:https://blog.csdn.net/qq_45894840/article/details/128346180