图片隐写技术:隐藏 JPEG 图像中的数据

admin 2024年11月5日10:40:13评论52 views字数 1907阅读6分21秒阅读模式

    有没有想过 ExifTool 或 stegano 程序等工具在幕后是如何工作的?

有没有想过创建自己的程序将秘密数据嵌入图像?

这是一篇关于如何在图像文件中嵌入秘密数据的简短博客文章。你可以将其作为派对技巧、某种 CTF 挑战或更有趣的隐藏有效载荷或解密密钥来做。

图片隐写技术:隐藏 JPEG 图像中的数据

基础知识
为了理解如何在图像文件中嵌入秘密数据,首先需要了解 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)之前插入(再次不要覆盖)此标记。

你能发现不同之处吗?

图片隐写技术:隐藏 JPEG 图像中的数据

图片隐写技术:隐藏 JPEG 图像中的数据

在我看来它们非常相似……但是现在怎么样?

图片隐写技术:隐藏 JPEG 图像中的数据

启动 hexdump unicorn 1

图片隐写技术:隐藏 JPEG 图像中的数据

十六进制转储独角兽 2 的开始
替代方法 + 检测
另一种安全方法是将有效载荷附加到图像标记 ( FF D9)的末尾。大多数“隐写术”程序都是这样工作的。您甚至可以通过在之后添加垃圾数据来伪装您的有效载荷,这样您的有效载荷就不会仅仅位于十六进制转储的末尾。现在剩下要做的就是编写一个程序,在图像十六进制转储中寻找您的解密密钥🙂

检测这一点非常困难,因为您需要检查组织中下载的所有图像,我的建议是,如果您开始看到妥协指标并且看到图像下载,请对图像进行十六进制转储并开始查看标记(FF 字节),特别是在 FF DA 之前和 FF D9 标记之后。

图片隐写技术:隐藏 JPEG 图像中的数据

原文始发于微信公众号(像梦又似花):图片隐写技术:隐藏 JPEG 图像中的数据

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

发表评论

匿名网友 填写信息