1. 计算机如何存储颜色?
在计算机中,一张图片由无数个像素点(Pixel) 组成。每个像素点通常由 RGB 三个颜色通道 构成:
| 通道 | 全称 | 作用 |
|---|---|---|
| R | Red(红色) | 控制红色分量 |
| G | Green(绿色) | 控制绿色分量 |
| B | Blue(蓝色) | 控制蓝色分量 |
每个通道的值范围是 0 ~ 255,用8位二进制(即1个字节)来表示。
例如,一种纯红色像素的 RGB 值为 (255, 0, 0),用二进制表示就是:
| 通道 | 十进制 | 二进制(8位) |
|---|---|---|
| R | 255 | 11111111 |
| G | 0 | 00000000 |
| B | 0 | 00000000 |
2. 什么是“最低有效位”?
在二进制中,每一位(bit)都有不同的“权重”。以 8 位二进制数 10110010 为例:
| 位序 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| 权重 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 数值 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
- 最高有效位(MSB):最左边的一位(位序7),权重最高(128),改变它会使数值发生巨大变化。
- 最低有效位(LSB):最右边的一位(位序0),权重最低(1),改变它数值只会变化 1。
举个例子:
| 原始值 | 修改LSB后的值 | 变化 |
|---|---|---|
10110010(十进制 178) | 10110011(十进制 179) | 仅变化 1 |
11111111(十进制 255) | 11111110(十进制 254) | 仅变化 1 |
对于人类肉眼来说,RGB 颜色值变化 1,颜色的差异是根本无法察觉的。这就为隐写提供了绝佳的条件。
3. LSB 隐写是如何工作的?
LSB 隐写的核心思想是:用待隐藏信息的二进制位,去替换掉每个颜色通道的最低位(LSB)。
举个例子
假设我们要隐藏字符 A,它的 ASCII 码是 65,二进制是 01000001(8位)。
现在有 3 个像素点(每个像素有 R、G、B 3个通道,共 9 个通道,足够存储 8 位数据 + 1位冗余):
原始像素数据:
| 像素 | 通道 | 原始值(十进制) | 原始值(二进制) |
|---|---|---|---|
| 像素1 | R | 168 | 10101000 |
| 像素1 | G | 201 | 11001001 |
| 像素1 | B | 99 | 01100011 |
| 像素2 | R | 45 | 00101101 |
| 像素2 | G | 77 | 01001101 |
| 像素2 | B | 203 | 11001011 |
| 像素3 | R | 150 | 10010110 |
| 像素3 | G | 12 | 00001100 |
| 像素3 | B | 88 | 01011000 |
替换 LSB 为字符 A(01000001)的二进制位:
| 通道 | 原始二进制 | 要隐藏的位 | 修改后的二进制 | 修改后的十进制 |
|---|---|---|---|---|
| 像素1 R | 10101000 | 0 | 10101000 | 168(不变) |
| 像素1 G | 11001001 | 1 | 11001001 | 201(不变) |
| 像素1 B | 01100011 | 0 | 01100010 | 98(-1) |
| 像素2 R | 00101101 | 0 | 00101100 | 44(-1) |
| 像素2 G | 01001101 | 0 | 01001100 | 76(-1) |
| 像素2 B | 11001011 | 0 | 11001010 | 202(-1) |
| 像素3 R | 10010110 | 0 | 10010110 | 150(不变) |
| 像素3 B | 00001100 | 1 | 00001101 | 13(+1) |
效果:每个像素的 RGB 值变化最多 1,图片颜色几乎没有任何肉眼可见的变化,但 01000001(字符 A)已经被成功写入了图片中。
4. 如何提取隐藏信息?
提取时不需要知道原始图片,只需遍历每个像素的 RGB 通道,取出每个通道的最低有效位,按顺序拼接起来即可。
例如,提取上表里 9 个通道的 LSB:
0, 1, 0, 0, 0, 0, 0, 1, 0...
按 8 位一组取出,得到 01000001(字符 A),这就是隐藏的信息。
5. 为什么提取时常取“0通道”?
在 StegSolve 的 Data Extract 界面中,会看到 Red: 0 / Green: 0 / Blue: 0 的选项。这里的 “0” 指的就是最低位(第 0 位)。
| 位序 | 含义 |
|---|---|
| 0 | 最低有效位(LSB),最常用于隐写 |
| 1 | 次低位,较少使用 |
| 7 | 最高有效位(MSB),几乎不会被用于隐写 |
通常 LSB 隐写使用 第 0 位(即最低位),所以将 Red、Green、Blue 都设为 0 就是最优选择。
6. LSB 隐写的特点与限制
| 特点 | 说明 |
|---|---|
| ✅ 隐蔽性强 | 人眼无法察觉颜色变化,只有工具能检测到 |
| ✅ 容量适中 | 一张 1000×1000 的图片可以隐藏约 300KB 的数据(1000×1000×3÷8) |
| ❌ 易被压缩破坏 | JPEG 等有损压缩会改变像素值,导致信息丢失,因此 LSB 隐写通常使用 PNG(无损压缩)或 BMP 格式 |
| ❌ 可被统计检测 | 专业的隐写分析工具可以检测 LSB 隐写的痕迹 |
7. 解题时的操作总结
对于 “镜子里面的世界” 这道题:
- 用
StegSolve打开图片。 - 点击
Analyse→Data Extract。 - 将 Red、Green、Blue 的 Bit Plane 都设为 0(即提取每个通道的最低有效位)。
- 勾选 LSB First(低位在前)。
- 点击
Preview,看到 Flag 后保存即可。
flag{st3g0_saurus_wr3cks}
💡 小窍门:如果 Preview 显示乱码,可以尝试将
LSB First切换为MSB First,或者调整 Red/Green/Blue 的通道组合(如只取 Red 0 通道,或红绿蓝 0、1、2 通道一起试)。通过多次尝试不同组合,可以提取出完整信息。
【补充】LSB(最低有效位)隐写原理详解&spm=1001.2101.3001.5002&articleId=163543630&d=1&t=3&u=3959cab0b4af4f308d5d702c0cba31a6)
483

被折叠的 条评论
为什么被折叠?



