有没有想过 ExifTool 或 stegano 程序等工具在幕后是如何工作的?
有没有想过创建自己的程序将秘密数据嵌入图像?
这是一篇关于如何在图像文件中嵌入秘密数据的简短博客文章。你可以将其作为派对技巧、某种 CTF 挑战或更有趣的隐藏有效载荷或解密密钥来做。
基础知识
为了理解如何在图像文件中嵌入秘密数据,首先需要了解 JPEG 文件结构是如何构建的。
让我们以一个图像为例,将其放入十六进制编辑器(例如 HxD):
该图像的 alt 属性为空;其文件名为 image-3.png
这个十六进制转储持续了一段时间,如果你不习惯这个,可能会看起来很令人印象深刻,但别担心。我将解释相关部分并只坚持这一点。只有几个重要的字节来实现我们在这篇博文中尝试做的事情。
FF xx字节表示JPEG结构中的标记,标记用于各种事物,例如元数据,缩略图生成,JPEG文件的开始,JPEG文件的结束等等。
对于我们的目标来说,以下标记非常重要:
FF D8 => 这是表示 JPEG 数据流开始的标记
FF D9 => 这表示 JPEG 数据流的结束
FF DA =>这个有点复杂,但在非常高的层次上,这个标记表示 JPEG 中“图片”的实际开始。
因此,这 4 个字节中的每一个都会出现在任何现有的 JPEG 文件中,如果您想解析 JPEG 图像并且需要弄清楚它们的开始和结束位置,这是有用的信息。
标记始终遵循相同的惯例( FF D8标记除外):
FF => 标记的开始
xx => 任何十六进制值(1 个字节)用于“识别”标记。xx
xx => 2 个字节的数据空间,表示标记的大小。
重要提示:这个总大小本身也必须包含这 2 个字节!(例如:如果您需要 32 个字节的大小,您实际上需要分配 34 个字节!)
数据 => 所有数据字节
注意:有些值已保留。完整列表请查看https://www.disktuna.com/list-of-jpeg-markers/
选择正确的标记并注意数据覆盖
实现我们的用例的最佳选择是使用以下标记值之一:
FF E2 – FF EF => 未用于解码 JPEG 图像的应用程序标记,这些通常用于元数据。
FF FE => 这是一个“注释”标记,JPEG 解码器也会忽略它。
这些标记正是我们要插入数据并仍然获得有效图像的方式🙂
在开始之前,您必须知道,如果您开始覆盖另一个标记中的数据,您将破坏图像。
我通常建议不要覆盖任何东西,除非您知道自己在做什么,最简单的做法就是插入有效载荷。
这样做的缺点是,由于插入,您的图像大小将直接变大。
乐趣就从这里开始。GIF 由 gorlah | Gfycat
示例:隐藏 AES-256 解密密钥
对于这种场景来说,AES-256 解密密钥是一个非常好的用例,AES-256 是一种强大的加密算法,隐藏密钥不会像隐藏整个有效载荷那样使图像膨胀。
AES-256 密钥需要 32 个字母的句子/单词(1 个字符是 1 个字节 => 32 字节 = 256 位,如果您不熟悉字节和位)在这种情况下,我选择以下密钥:ThisIsAsuperSecretDecryptionKey!
哪个正好是 32 位,不相信我吗?也许你会相信 powershell:
该图像的 alt 属性为空;其文件名为 image-1.png
现在找出该键的十六进制值:
该图像的 alt 属性为空;其文件名为 image-2.png
现在我们有了正确长度的密钥和密钥的十六进制值,我们就可以构造我们的标记了:
FF => 标记的开始
FE => 表示我们正在做“评论”。
00 22 => 2 字节的数据空间表示标记的大小(34 为十六进制的 00 22)
54686973497341537570657253656372657444656372797074696f6e4b657921 => (ThisIsAsuperSecretDecryptionKey 的十六进制值!)
我们可以在FF DA标记(图像的实际开始)之前在任何其他标记开始(标有FF)之前插入(再次不要覆盖)此标记。
你能发现不同之处吗?
在我看来它们非常相似……但是现在怎么样?
启动 hexdump unicorn 1
十六进制转储独角兽 2 的开始
替代方法 + 检测
另一种安全方法是将有效载荷附加到图像标记 ( FF D9)的末尾。大多数“隐写术”程序都是这样工作的。您甚至可以通过在之后添加垃圾数据来伪装您的有效载荷,这样您的有效载荷就不会仅仅位于十六进制转储的末尾。现在剩下要做的就是编写一个程序,在图像十六进制转储中寻找您的解密密钥🙂
检测这一点非常困难,因为您需要检查组织中下载的所有图像,我的建议是,如果您开始看到妥协指标并且看到图像下载,请对图像进行十六进制转储并开始查看标记(FF 字节),特别是在 FF DA 之前和 FF D9 标记之后。
原文始发于微信公众号(像梦又似花):图片隐写技术:隐藏 JPEG 图像中的数据
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论