LSB隐写
由于LSB隐写是在最低位隐藏数据,也就是在比较无关紧要的地方隐藏,因此只有在无损压缩(png)或无压缩(bmp)图片上实现

 jpg 属于有损压缩格式,我们修改的信息可能会在压缩的过程中被破坏;而 png 虽然也有压缩,但却是无损压缩,我们修改的信息不会丢失

 bmp 图片把所有的像素都按原样储存,没有进行压缩,因此一般会特别的大 

工具:stegsolve.jar

正常 < >

Colour Inversion (Xor)

颜色反转,将RGB所表示的二进制 0 1互换

在CTF解题过程中,某一步可能得到一张二维码,但二维码的黑白是相反的,要想扫码得到信息,就需要进行颜色反转(二维码通常由黑白组成,反转对立)

image-20210601231635135

4通道

Alpha plane、Red planeGreen plane、Blue plane

4个通道,每个通道各需要8bit,StegSolve将 4 × 8 = 32 个bit位置的数据都提取出来,单独形成图片显示出来。这恰好对应了上面的LSB隐写

Analyse

File Format —— 文件格式

查看图片的具体信息,有时候flag会隐藏在这里面

它与直接点击图片右键”属性”,查看”详细信息”相辅相成,两者提供的信息有重叠、也有互不相同

Stereogram Solver —— 立体试图

图片与图片自身进行异或运算,因此初始的 offet: 0 时的图像永远是黑屏(对于任意 a,都有a ^ a = 0)

可以控制offset(偏移量)对其中一张进行移动,进行的仍然是异或运算;offset的取值范围是 [0, 图片的宽度-1]

用一张图片试试就知道怎么回事了

Frame Browser —— 帧浏览器

该功能只针对 gif 动图

有时候CTF会将flag隐藏在 gif 动图中,会在 gif 中急速闪过,这时就需要把动图一帧一帧地放;有时候又会把 gif 放映得非常慢,需要手动查看下一帧

Image Combiner —— 图像合并

使用StegSolve打开 1.png,再在Image Combiner中打开 2.png,能够查看两张图片的数据进行多种运算呈现出来的结果

例题: 下载 男神.zip,解压得到两张图片 first.png 和 second.png,两张图片看上去一模一样,明显的双图问题

将 first.png 放入StegSolve中,在Image Combiner中打开 second.png,发现在 SUB (R,G,B separate) 的图像呈现二维码的形状:

image-20210820013216866

然而它并不能直接被扫码

将上图另存为 colorfulQR.bmp,再在StegSolve中打开,左右查看,发现这同时也是一道LSB隐写题,在RGB三色通道的最低位,分别存储了一张二维码

将Red plane 0、Green plane 0、Blue plane 0对应的图像分别导出,得到:

image-20210820013228642

观察发现,这三张二维码都是反色的,需要进行颜色反转处理

再次将三张图片导入StegSolve,进行Colour Inversion处理;把三张处理后的二维码保存,扔到在线二维码解码中,会分别得到 DES、6XaMMbM7 和 一长串被加密的字符串

按照提示是DES加密,密钥为 6XaMMbM7,随便找个在线的DES解密网站,解码字符串得到flag

Data Extract —— 数据提取

在StegSolve的<>切换界面中,StegSolve会自动读取RGBA的各个通道,将各个通道的数据结合打开文件的类型(猜测是加上对应文件的一些格式数据,如 jpg 就添加文件头标识 FF D8、文件尾标识 FF D9),重新生成一张图片,显示在上面

但有时候,flag并不以图片的形式存在,它有可能就以数据的形式藏匿在某个通道的数据中,这时就要通过Data Extract单独浏览数据了

Bit Planes —— 位通道

这里罗列了RGBA四条通道的各8位,如果点击Blue 0,StegSolve将会提取整张图片各个像素点中,代表蓝色深度的8位二进制的最后一位,提取出来的 010101… 可以通过Preview查看

注意这里强调提取出来的是 010101… 的二进制数据,因为Blue的取值有28种,相当于一个8位二进制数值。假设Blue通道各位上的数据是 01010101,初始时8个▢都未勾上,因此读取不到数据;如果勾选了后五个▢,则读取了数据 10101

Preview—— 预览

正如上面举例所示,如果点击的是Blue 0,StegSolve自动提取出来的 10101,由于二进制数需要转十六 进制数,因此需要凑齐8位;对于提取出来的数据不满8位,将会在后面自动填充 0

因此这时候的数据变成了 10101000,它会显示在窗口的左端

我们以某次的数据截图来分析

image-20210820013308710

窗口的数据由两部分组成:左侧是提取出来的数据转十六进制的显示,右侧是这些十六进制对应的Unicode字符

比如第二行第一个的 C,它对应的Unicode码是 67,十进制数 67 的十六进制恰好就是 43

窗口右侧只显示ASCII字符,非ASCII字符都会被 . 代替

kali内的zsteg

zsteg xxx.jpg/xxx.png

要是有异常

未命名图片

这时可以提取异常数据

zsteg -E "extradata:0" xxx.jpg/xxx.png > 1.txt

提取出来的数据可以用foremost或binwalk -e分离

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇