
前言
最近专注学习ctf杂项,感觉lsb隐写还是个挺大的方向,写篇文章记录一下。
什么是LSB隐写
关于隐写术和数字水印相关的简介见这里:数字水印的简单思考
- LSB全称为Least Significant Bit,即最低有效位
- PNG文件中的图像像数一般是由RGB三原色(红绿蓝)组成,每一种颜色占用8位,取值范围为0x00~0xFF,即有256种颜色,一共包含了256的3次方的颜色,即16777216 种颜色
- 每个像素可以携带3比特的信息
- 人眼不能分辨这么多颜色
- LSB隐写就是修改RGB颜色分量的最低二进制位,写入加密信息,而人眼无法注意到前后的变化
CTF中LSB解题方法
如果想要寻找LSB隐写的痕迹,有一个神器叫做Stegsolve,这个工具可以非常非常非常非常有效地帮助我们分析lsb隐写问题。
例一
这是在西电MakerCTF中的一道题目,用完LSB之后发现自己不会解密,甚至开始怀疑是不是做法出了问题,最后也没做出来,后来看了writeup才发觉自己被出题人坑了一手。
题目描述
Mikoto is very moe, isn’t it?
![]()
解题方法
把图片丢进Stegsolve里,在analyse选项下选择Data Extract。
Bit Planes 选中Reg、Green、Blue的第0位
Bit Order选中LSB First
Bit Plane Order选中RGB
即可看到加密后的信息
提取出信息,得到密文:
9keKZ9LDcKHV@@)-=UD)AN2P SBiAA[0OJ=.DeslN
让我没想到的是,这里其实是 base85 加密!(一键锤爆出题人狗头)
丢进在线工具解密就可以得到flag: MiniLCTF{LSB&base85_iS_s0_cool~}
总结
这道题可以归结为利用lsb写入字符串的类型,通过data extract获取写入的具体内容,再进行下一步操作。
例二
本题来自AppLeU0
题目描述
解题方法
把图片丢进Stegsolve里,通过下方的按钮切换到Gray bits,可以看到左上角出现了隐写在该通道的二维码。
扫描即得flag:
flag{AppLeU0}
总结
跟上一题不同的是,这里利用lsb写入的数据在某个通道呈现出来。如果用data extract查看的话会发现数据量很大,可能这也是这种类型的特征????
总结
细数我遇到的lsb隐写的问题,大致也就分成这两类,其实对于一道ctf题目来讲,lsb隐写往往只是其中的一个小环节,不过作为一个杂项内容还是挺常见的。
备注
lsb只适用于png和bmp文件。
因为jpg文件对像数进行了有损的压缩,修 改的信息可能会在压缩的过程中被破坏。
PNG文件是无损压缩,就可以让我们修改的信息得到正确的表达,不至于丢失。BMP的图片也 是一样的没有经过压缩,可以使用lsb写入数据。