之前就了解过LSB隐写,并且知道怎么得到flag,但是一直都好奇到底lsb隐写的原理是什么,就自学了一下。

预备小知识

我们知道RGB分别是红绿蓝,但他们的值代表的实际上是亮度

R的数字越大,则代表红色亮度越高;R的数字越小,则代表红色亮度越低。G,B同理。

R的亮度各有256个级别,G,B同理。即从0到255,合计为256个。从数字0到255的逐渐增高,我们人眼观察到的就是亮度越来越大,红色、绿色或蓝色越来越亮。

256是2的8次方,所以我们可以根据RGB分别得到三个八位二进制数值,每个数值的每个位数可以看做是一个通道,反正二进制只有1和0,我们可以理解成通过和不通过,这样,每个颜色就有八个通道,分别对应不同的八位。

如果把RGB表示的数值分别转化为16进制组合在一起,R在前,G在中,B在后,同时以”#“开头,我们称之为十六进制颜色码。很容易知道颜色码#ff0000是红色,#000是黑色,#ffffff是白色等等。

此外,Alpha是透明度,我们用256级灰度来记录图像中的透明度信息,定义透明、不透明和半透明区域,alpha的值为0就是全透明,alpha 的值为 255 则表示不透明。

StegStove

(我们以新生平台的ikun题目为例)

stegsolve是一个常用的图片分析工具,在这里我们使用stegsolve打开ikun图片:

在这个界面里,最下面的俩按钮可以切换不同的颜色通道(0-7):

这里我们切换到了红色通道1,如果这一位上对应的二进制为1,则表示为白,0则表示为黑。

其他还有很多种通道,左上角都会给通道标识,自己可以试一试。

Analyse

在工具栏的Analyse页有几个功能:

File Format:显示图片的具体信息,有时候有些图片隐写的flag会藏在这里。

Data Extract:数据的提取。

Steregram Solve:左右控制偏移,可以放张图片试一下。

Frame Browser:帧浏览器 ,主要是对GIF之类的动图进行分解,把动图一帧帧的放。

Image Combiner:拼图,把两张图片重叠在一起。

Data Extract

我们在这里只重点研究一下Data Extract功能:

左边是选择颜色通道,包括RGB和Alpha分别八个通道。

右半部分:

Extra By(额外的):分为row(行)和column(纵)

这个功能区分了我们是横向提取数据还是纵向提取数据,

在位图里,每个像素用R,G,B三个分量表示,我们可以把一张图片看作是一个矩阵,矩阵的每个单位表示颜色数值:(0~255,0~255,0~255)

Bit Order(位顺序):MSB是一串数据的最高位,LSB是一串数据的最低位。

Bit Plane Order(位平面的顺序):一般图片是24位,RGB分别8位,这里可以选择RGB的顺序,暂时用不到。

LSB隐写

LSB隐写就是修改RGB颜色分量的最低二进制位也就是最低有效位(LSB),而人类的眼睛不会注意到这前后的变化。

为了得到隐藏的最低位数据,我们可以选择RGB的第0位(最低位),然后preview查看,得到flag,这是最简单的LSB隐写: