题目
描述:套娃? 下载附件下来是一个图片 ![[check.png]]
使用010editor查看,和正常图片对比也没有什么问题。
正常图片:
题目图片:
010editor看不出什么,但是题目只有一个图片的情况下,应该就是通过什么方法把信息隐藏在里面了。然后通过查阅资料,发现有一种隐写方式,称之为LSB隐写。具体如下:
LSB隐写
LSB 隐写 (Least Significant Bit Steganography) ,中文一般叫 最低有效位隐写术。
基本原理
-
数字文件(图像、音频、视频)本质上都是由二进制数据构成。
-
在像素值、音频采样值等数据中,最低有效位 (LSB) 对整体感官影响很小。
- 例如:一个像素的 RGB 分量是
10110010 (178)
,如果把最后一位改成10110011 (179)
,人眼几乎看不出差别。
- 例如:一个像素的 RGB 分量是
-
因此,可以把要隐藏的信息(文本、密钥、图片等)的二进制位,逐个替换进这些最低有效位。
图像中的例子
假设一张 24 位真彩色图片,每个像素有 R、G、B 三个字节:
-
原始像素:
R=10110010, G=01011101, B=11001000
-
如果要隐藏比特串
011
,把每个颜色通道的最后一位替换掉:-
R →
10110010
→10110010
(最后一位=0) -
G →
01011101
→01011100
(最后一位=1 → 改成0) -
B →
11001000
→11001001
(最后一位=0 → 改成1)
-
-
人眼几乎看不出图片的变化,但其实里面藏了 011。
解题
那么就再查资料,看一下这种隐写方式怎么处理。这里找到一个工具:StegSolve.jar 基于Java,在系统里安装适合版本的Java即可。
使用它打开图片,然后点击:Analyse → Data Extract
再勾选以下选项:然后点击
Preview
即可看到筛选的信息。再导出为txt,进行解码即可
这样,就得到flag:flag{h0w_4buT_enc0d_4nd_png}
题外话
为什么只需要查看plane 0?
1. 人眼对 LSB 不敏感
-
一张彩色图片的每个像素通常由 8 位 R、8 位 G、8 位 B 三个通道组成。
-
如果只改动最低有效位 (bit0),像素值最多变化 ±1(例如 178→179),人眼基本察觉不到差异。
-
所以 最适合藏东西的位置,就是 LSB。
2. 信息容量与隐蔽性最佳点
-
一张 1024×768 的图片 ≈ 78 万像素 × 3 通道 = ~235 万字节数据。
-
如果只用 LSB,每个像素能藏 3 bit,总容量 ~293 KB,已经很可观。
-
而且图像肉眼几乎不变。
-
如果往更高 bit-plane(bit1、bit2...)藏,肉眼就可能看出色块、噪点 → 太显眼。
所以 plane0 是容量与隐蔽性的最佳折中点。
3. 工具 & 出题习惯
-
在 CTF/隐写分析中,出题人常常会用最常见的手法(R/G/B 的 plane0)。
-
因为 plane0 一般就能显现出简单图案(文字、二维码),解题者只要用 StegSolve/zsteg 就能发现。
-
当然,也有高难度题目会藏在 plane1、plane2,或者只藏在某个单通道(比如 Blue plane0),但「默认优先检查 plane0」是经验法则。
4. 为什么是"三原色的 plane0"
-
LSB 隐写一般不会改 alpha 通道(透明度),因为那很容易被肉眼察觉。
-
所以目标锁定在 R/G/B。
-
三个通道中任选一个甚至多个,放进去的隐藏信息,在 plane0 分解后会以黑白图像显现。
总之,因为 LSB 隐写最隐蔽、最常用,而 plane0 正是最低有效位所在的平面,所以优先查看三原色的 plane0 最容易发现隐藏信息。