隐写术之各种类型的图片格式隐写总结

admin 2025年4月9日22:20:03评论5 views字数 4906阅读16分21秒阅读模式

在CTF比赛中,我们绕不开的两个题目类型就是隐写术和数据分析。

那么这里我们就来谈谈隐写术中有关图片方面的隐写。

景介绍

隐写术是关于信息隐藏,即不让计划的接收者之外的任何人知道信息的传递事件(而不只是信息的内容)的一门技巧与科学,而密码编码是关于信息加密,即设想到信息可能会被接受者之外的第三方获取而采取的一种措施,通过通信双方预先设定的规则对信息进行加密,使第三方即使获取到信息也无法理解其含义。所以隐写术重点在于信息的隐藏,密码编码重点在于信息的加密,这两者属于完全不同的概念。
附加式的图片隐写
这种方式是利用工具将隐藏信息直接写入到图片结束符之后,由于计算机中图片处理程序识别到图片结束符就不再继续向下识别,因此后面的信息就被隐藏起来。这种方式可以利用winhex,010editor等工具进行打开,或者notepad打开也可看到最后的附加的字符,所以虽然简单,但是隐藏效果不是很好。
这种方式的隐写图片也非常好制作,这里我们只需要使用010editor或者winhex将一张普通的图片打开,然后在后面添加需要传递的信息即可。
隐写术之各种类型的图片格式隐写总结
这里可以看到,我们在图片结束符后添加了一段加密的信息,起到了更好的隐藏效果。
隐写术之各种类型的图片格式隐写总结

图种

图种是一种采用特殊方式将图片文件(如jpg格式)与rar文件结合起来的文件。该文件一般保存为jpg格式,可以正常显示图片,当有人获取该图片后,可以修改文件的后缀名,将图片改为rar压缩文件,便可得到其中的数据。刚才我们说过,因为计算机中图片处理程序识别图片的过程是,从图片头开始,以图片头声明的格式所定义的编码格式对数据流进行读取,一直到图片的结束符,当图片处理程序识别到图片的结束符后,不再继续向下识别,所以在通常情况下我们只会看到第一个结束符前面的图片内容,那么这里和附加字符串的原理相同,在结符后,添加内容,但是图种通常添加文件,而不是明文信息。
那么我们提取信息的方法也非常简单,可以使用binwalk程序对其进行识别并还原,也可以利用winhex等编辑器寻找到图片的结束符,然后在其后查找是否有zip或rar等文件的文件头。最后也可利用转换文件后缀对其进行读取并解压。
这里我们可以看到,在图片的结束符后跟着就是zip的文件头,以504b0304开头。
隐写术之各种类型的图片格式隐写总结
这里我们就可以看到一个压缩包,那么我们使用binwalk进行提取
隐写术之各种类型的图片格式隐写总结
这里我们可以看到这个图片中还携带了一个ZIP文件,那么如果我们需要提取文件我们可以使用binwalk的-e参数进行提取。
隐写术之各种类型的图片格式隐写总结
这里就可以看到,由于压缩包没有密码,这里binwalk递归提取了压缩包中的文件。
基于文件结构的图片隐写
关于这一点我们首先需要了解图片文件的文件结构。
我们来看几个常见的文件结构。

PNG

对于一个正常的PNG图片来讲,其文件头总是由固定的字节来表示的,其16进制表示为 89 50 4E 47 0D 0A 1A 0A,这一部分称作PNG文件头。标准的PNG文件结构应包括:
PNG图片文件头数据块即IHDR(Image HeaDeR),这是PNG图片的第一个数据块,一张PNG图片仅有一个IHDR数据块,它包含了图片的宽,高,图像深度,颜色类型,压缩方法等等信息。(即定义图片数据流的读取规则)
隐写术之各种类型的图片格式隐写总结
PNG图片IDAT(Image DATa)数据块它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。这是一个可以存在多个数据块类型的数据块。它的作用就是存储着图像真正的数据。因为它是可以存在多个的,所以即使我们写入一个多余的IDAT也不会明显影响肉眼对图片的观察。高度被修改引起的隐写,在IHDR中定义了图片的高度和宽度,可以通过修改高度值或宽度值对部分信息进行隐藏。
如果图片原本是800(宽)*600(高),然后图片的高度从600变成500,这样下面800×100区域的信息就无法从图片中显示出来,我们可见的只有上方800*500的区域,这样就达成了图片隐写的目的。同理可知图片的宽度也可以进行类似的修改以达到隐藏信息的目的。
为了还原图片,可以利用winhex或者010Editor等编辑器打开图片。但我们推荐后者,因为它提供了不同文件的模板,通过加载png模板,我们可以直观的知道哪里是PNG的长度字段或宽度字段,它提供了hex字符串到字段名的映射,更便于我们进行修改。在修改文件后,需要利用CRC Calculator对CRC校验码进行重新计算赋值,以防图片被修改后,自身的CRC校验报错,导致图片不能正常打开。
隐写术之各种类型的图片格式隐写总结
隐写术之各种类型的图片格式隐写总结

JPG

一个JPG图片是由 标记码 和 压缩数据 组成的文件,标记码 由两个字节构成,第一个字节是固定值0xFF ,后一个字节则根据不同意义有不同数值 ,接着是压缩数据 由前 两个字节 保存 整个段的长度,组成部分包括这两个字节在内,以及后面所有内容
标记码
由两个字节构成,第一个字节是固定值0xFF ,后一个字节则根据不同意义有不同数值。
压缩数据
前两个字节保存整个段的长度,包括这两个字节在内,以及后面所有内容组成。
隐写术之各种类型的图片格式隐写总结
和png一样,jpg也可以进行高度的隐写,不过值得一提的是jpg的高度隐写并不会引起CRC报错导致图片无法正常显示。
基于LSB原理的图片隐写
LSB,最低有效位,英文是Least Significant Bit 。PNG 文件中的图像像素一般是由 RGB 三原色(红绿蓝)组成,每一种颜色占用 8 位。LSB 隐写就是修改了像数中的最低的 1 bit,而人类的眼睛不会注意到这前后的变化,每个像素最多可以携带 3 比特的信息。
简单的LSB隐写
LSB 隐写就是修改了像数中的最低的 1 bit,而人类的眼睛是不会注意到这前后的变化的,每个像素可以携带 3 比特的信息。
隐写术之各种类型的图片格式隐写总结
可以看到这个像素中的RGB分别为218,150,149,转换为二进制文件如下,此时我们修改他的最后一位,相当于给rgb颜色 分别加一或减一,这点颜色 差异 几乎看不出,但是却可以隐藏数据.那么这种隐写我们可以用“stegsolve”工具来进行解密Stegsolve可以通过下方的按钮来观察每个通道的信息, 查看 各个通道时 一定要细心捕捉异常点,抓住 LSB 隐写的蛛丝马迹,我们来看下面的案例,这里我们通过rgb通道的最低位,发现上面有一小段模糊的信息,这就说明了这里可能存在rgb隐写,此时我们可以借助工具自带的DATA extract 工具对指定的通道进行提取, 使用preview 可以预览信息,使用 save text 可以保存文本,使用 save bin 可以保存二进制文件。
隐写术之各种类型的图片格式隐写总结
基于DCT域的JPG图片隐写
JPEG图像格式使用离散余弦变换(Discrete Cosine Transform,DCT)函数来压缩图像,而这个图像压缩方法的核心是:通过识别每个8×8像素块中相邻像素的重复像素来减少显示图像所需的位数,并使用近似估算法降低其冗余度。因此,我们可以把DCT看作一个用于执行压缩的近似计算方法。因为丢失了部分数据,所以DCT是一种有损压缩(Loss Compression)技术,但一般不会影响图像的视觉效果。(有点CNN的影子)在这个隐写家族中,常见的隐写方法有JSteg、JPHide、Outguess、F5等等
Stegdetect实现JPEG图像Jphide隐写算法工具有多个,比如由Neils Provos开发通过统计分析技术评估JPEG文件的DCT频率系数的隐写工具Stegdetect,它可以检测到通过JSteg、JPHide、OutGuess、Invisible Secrets、F5、appendX和Camouflage等这些隐写工具隐藏的信息,并且还具有基于字典暴力破解密码方法提取通过Jphide、outguess和jsteg-shell方式嵌入的隐藏信息。
隐写术之各种类型的图片格式隐写总结
JPHS
一款JPEG图像的信息隐藏软件JPHS,它是由Allan Latham开发设计实现在Windows和Linux系统平台针对有损压缩JPEG文件进行信息加密隐藏和探测提取的工具。软件里面主要包含了两个程序JPHIDE和JPSEEK, JPHIDE程序主要是实现将信息文件加密隐藏到JPEG图像功能,而JPSEEK程序主要实现从用JPHIDE程序加密隐藏得到的JPEG图像探测提取信息文件,Windows版本的JPHS里的JPHSWIN程序具有图形化操作界面且具备JPHIDE和JPSEEK的功能。
隐写术之各种类型的图片格式隐写总结
Outguess
Outgusee算法是Niels Provos针对Jsteg算法的缺陷提出的一种方法:
1.嵌入过程不修改ECT系数值为0,1的DCT系数,利用为随机数发生器产生间隔以决定下一个要嵌入的DCT系数的位置。
2.纠正过程消除对效应的出现对应的,也有针对该算法的隐写工具,名字也叫Outguess。对于这种隐写方法的还原,首先利用Stegdetect对图片进行检测,判断该图片利用的是何种隐写方式。然后针对不同的隐写方式,选择对应的工具进行信息的还原。比如利用JPHS还原jphide隐写,利用Outguess还原outguess隐写等等。
隐写术之各种类型的图片格式隐写总结
数字水印隐写
数字水印(digital watermark)技术,是指在数字化的数据内容中嵌入不明显的记号。特征是被嵌入的记号通常是不可见或不可察的,但是可以通过计算操作检测或者提取。

盲水印与傅里叶变换

盲水印,是指人感知不到的水印,包括看不到或听不见(没错,数字盲水印也能够用于音频)。其主要应用于音像作品、数字图书等,目的是,在不破坏原始作品的情况下,实现版权的防护与追踪。
隐写术之各种类型的图片格式隐写总结
对图像进行傅里叶变换,起始是一个二维离散傅里叶变换,图像的频率是指图像灰度变换的强烈程度,将二维图像由空间域变为频域后,图像上的每个点的值都变成了复数,也就是所谓的复频域,通过复数的实部和虚部,可以计算出幅值和相位,计算幅值即对复数取模值,将取模值后的矩阵显示出来,即为其频谱图。但是问题来了,复数取模后,数字有可能变的很大,远大于255,如果数据超过255,则在显示图像的时候会都当做255来处理,图像就成了全白色。因此,一般会对模值再取对数,在在0~255的范围内进行归一化,这样才能够准确的反映到图像上,发现数据之间的差别,区分高频和低频分量,这也是进行傅里叶变换的意义。当我们遇到两张看起来 一模一样 的图片时,就可以尝试盲水印解密,加密和解密方法如下图所示,这里使用到bwn for py3工具,该工具自带加密和解密的功能。
隐写术之各种类型的图片格式隐写总结
隐写术之各种类型的图片格式隐写总结
基于空间的GIF图片隐写
由于GIF的动态特性,是由一帧帧的图片构成,所以每一帧的图片 或 多帧图片间的结合,都成了隐藏信息的一种载体,我们来看空间上的,在我看来这其实已经不能算是隐写了,因为他并没有达到隐藏信息的目的,但我们还是来了解一下这种GIF逐帧分析的方法,我们将GIF的每一帧写入不同的图片,然后在每张图片中放入一段base64编码的数据,或者说将一张二维码图片分割成N份放入GIF中,需要我们 提取出来后 进行拼图,此时我们只需将GIF拖入stegsolv中 即可逐帧分析。
隐写术之各种类型的图片格式隐写总结
基于时间的GIF图片隐写

Imagemagick

convert:转换图像格式和大小,模糊,裁剪,驱除污点,抖动,临近,图片上画图片,加入新图片,生成缩略图等。
identify:描述一个或较多图像文件的格式和特性。
composite:根据一个图片或多个图片组合生成图片。
这里我们主要用到identify命令去拆解GIF,发现每一帧都存在规律,然后我们提取帧间隔进行转化,推断10和20分别为0和1,这里我用的命令比较复杂,一会我会给大家演示一个比较容易理解的替换方式,最后我们对提取出来的数据进行处理得到信息。
隐写术之各种类型的图片格式隐写总结
推断 20 、10 分别代表 0 、1,提取每一帧间隔并进行转化。
隐写术之各种类型的图片格式隐写总结
总结
本文总结了目前较为流行的几种图片隐写方法,对它们进行了分类并阐述了相关原理。具体实例我遇到过的都给了博客链接,没有遇到的以后会再补。通过这一篇博文的撰写得到了很多收获,印证了我想到的隐写术是确实存在的,这对于我的信心也是一个鼓舞。未来还是要多看,多学,才能在实践中更加游刃有余。
路漫漫其修远兮,吾将上下而求索。
— END —

原文始发于微信公众号(SAINTSEC):隐写术之各种类型的图片格式隐写总结

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月9日22:20:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   隐写术之各种类型的图片格式隐写总结https://cn-sec.com/archives/3934352.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息