隐写技巧——利用 JPEG 文件格式隐藏 payload

发布于 2024-10-28 22:36:45 字数 8211 浏览 7 评论 0

0x00 前言

继续对图片隐写技巧的学习,这次是对 JPEG 文件格式的学习和理解。同 PNG 文件的格式对比,JPEG 文件相对简单,读取其中隐藏 payload 的方式大同小异,两者区别在于文件格式不同,可供利用的细节存在差异。

本文相关工具:

  • 16 进制编辑器: Hex Editor
  • 隐写检测: Stegdetect

下载地址: https://github.com/abeluck/stegdetect

  • 编辑 Exit 信息: MagicEXIF

下载地址: http://www.magicexif.com/

  • 分析 JPEG 图片格式: JPEGsnoop

下载地址: http://www.impulseadventure.com/photo/jpeg-snoop.html

0x01 相关概念

JPEG 文件

JPEG 是 Joint Photographic Experts Group(联合图像专家组) 的缩写

  • 支持有陨压缩
  • 不支持透明
  • 不支持动画
  • 非矢量

JEPG 同 JPG 的区别

  • JPEG 既可作为扩展名,又能代表文件格式
  • JPG 是 JPEG 的简写,代表扩展名
  • JPEG 和 JPG 基本上是没有区别的,它们的格式也是通用的

色彩模型

采用 YCrCb 色彩模型,更适合图形压缩,而不是 RGB

  • Y 表示亮度
  • Cr 表示红色分量
  • Cb 表示蓝色分量

人眼对图片上的亮度 Y 的变化远比色度 C 的变化敏感. 如果每个点保存一个 8bit 的亮度值 Y, 每 2x2 个点保存一个 CrCb 值, 图象在肉眼中的感觉不会起太大的变化,而且节省一半的空间

  • RGB 模型 4 个点需要 4x3=12 字节
  • YCrCb 模型 4 个点需要 4+2=6 字节

[R G B] -> [Y Cb Cr] 转换:

  • Y = 0.299R + 0.587G + 0.114*B
  • Cb = - 0.1687R - 0.3313G + 0.5 *B + 128
  • Cr = 0.5 R - 0.4187G - 0.0813*B + 128

[Y,Cb,Cr] -> [R,G,B] 转换:

  • R = Y + 1.402 *(Cr-128)
  • G = Y - 0.34414(Cb-128) - 0.71414(Cr-128)
  • B = Y + 1.772 *(Cb-128)

文件格式

JPEG 文件大体上可以分成两个部分:标记码和压缩数据

标记码:

由两个字节构成,第一个字节是固定值 0xFF ,后一个字节则根据不同意义有不同数值

在每个标记码之前可以添加数目不限的无意义的 0xFF 填充,连续的多个 0xFF 可以被理解为一个 0xFF,并表示一个标记码的开始

常见的标记码:

  • SOI 0xD8 图像开始
  • APP0 0xE0 应用程序保留标记 0
  • APPn 0xE1 - 0xEF 应用程序保留标记 n(n=1~15)
  • DQT 0xDB 量化表(Define Quantization Table)
  • SOF0 0xC0 帧开始(Start Of Frame)
  • DHT 0xC4 定义 Huffman 表(Define Huffman Table)
  • DRI 0XDD 定义差分编码累计复位的间隔(Define Restart Interval)
  • SOS 0xDA 扫描开始(Start Of Scan)
  • EOI 0xD9 图像结束

压缩数据:

前两个字节保存整个段的长度,包括这两个字节

注:这个长度的表示方法按照高位在前,低位在后,与 PNG 文件的长度表示方法不同

例如长度是 0x12AB,存储顺序为 0x12,0xAB

Exif 信息

Exif 文件是 JPEG 文件的一种,遵从 JPEG 标准,只是在文件头信息中增加了拍摄信息和索引图

用相机拍出来的 jpeg 都会有这个信息

储存在 APP1(0xFFE1) 数据区中

接下来两字节保存 APP1 数据区(即 Exif 数据区) 的大小

接着为 Exif Header,固定结构:0x457869660000

后面为 Exif 的数据

查看 Exif 信息的工具: exiftool

下载地址:https://github.com/alchemy-fr/exiftool

编辑 Exit 信息的工具: MagicEXIF

下载地址:http://www.magicexif.com/

添加操作如图

Alt text

0x02 常见隐写方法

  • DCT 加密
  • LSB 加密
  • DCT LSB
  • Average DCT
  • High Capacity DCT
  • High Capacity DCT - Algorithm

以上隐写方法引用自:https://www.blackhat.com/docs/asia-14/materials/Ortiz/Asia-14-Ortiz-Advanced-JPEG-Steganography-And-Detection.pdf

目前已经有很多开源的工具能够实现以上高级的隐写方法

常见隐写工具:

  • JSteg
  • JPHide
  • OutGuess
  • Invisible Secrets
  • F5
  • appendX
  • Camouflage

当然,对应的隐写检测工具也出现了很久

比如: Stegdetect

下载地址:https://github.com/abeluck/stegdetect

0x03 利用 JPEG 文件格式隐藏 Payload

接下来介绍在学习文件格式后产生的一些隐藏思路:

1、直接在尾部添加数据

Alt text

如图,不会影响图片的正常浏览

2、插入自定义 COM 注释

COM 注释为 0xff 和 0xfe

插入数据 0x11111111

长度为 0x04

总长度为 0x06

完整的十六进制格式为 0xffff000611111111

插入位置为 DHT 前面,如图

Alt text

插入后如图,不影响图片的正常查看

Alt text

将 ff 改为 fe,如图,同样不影响图片的正常查看

Alt text

3、插入可被忽略的标记码

原理同上,标志码换成可被忽略的特殊值

例如:

  • 00
  • 01 *TEM
  • d0 *RST0
  • dc DNL
  • ef APP15

经测试以上标识码均不影响图片的正常查看

4、修改 DQT

DQT: Define Quantization Table

标识码为 0xdb

接下来两字节表示长度

接下来一字节表示 QT 设置信息

前 4bit 为 QT 号

后 4bit 为 QT 精度,0=8bit,否则为 16bit

最后是 QT 信息,长度为 64 的整数倍

查看测试图片的 DQT 信息,如图

Alt text

长度为 0x43,十进制为 67

00 表示 QT 号为 0,精度为 8bit

接着 64 字节为 QT 信息字节

注:此处 DQT 格式参考自 http://www.opennet.ru/docs/formats/jpeg.txt

尝试将这 64 字节替换,如图

Alt text

前后对比如图,能够发现图片的变化

Alt text

如果仅仅是调整其中部分字节,改为 payload,那么能有多大区别呢,对比如图

Alt text

依次类推,可供修改的位置还有很多

0x04 检测和识别

对于以上的隐藏方法,借助 jpeg 图片格式分析工具就能发现其中的痕迹

比如 JPEGsnoop

下载地址:http://www.impulseadventure.com/photo/jpeg-snoop.html

支持如下文件的格式分析:

  • .JPG - JPEG Still Photo
  • .THM - Thumbnail for RAW Photo / Movie Files
  • .AVI* - AVI Movies
  • .DNG - Digital Negative RAW Photo
  • .PSD - Adobe Photoshop files
  • .CRW, .CR2, .NEF, .ORF, .PEF - RAW Photo
  • .MOV* - QuickTime Movies, QTVR (Virtual Reality / 360 Panoramic)
  • .PDF - Adobe PDF Documents

实际测试:

如下图,发现了图片中添加的 COM 注释

Alt text

如下图,通过查看 DQT 的数据识别添加的 payload,0x11 对应的十进制为 17

Alt text

同样,JPEGsnoop 能够解析 jpeg 图片的 EXIF 信息,如下图

Alt text

注:

为便于测试,截图中的以下数值通过 MagicEXIF 软件手动添加:

  EXIF Make/Model:     OK   [test] [???]
  EXIF Makernotes:     NONE
  EXIF Software:       OK   [MagicEXIF Metadata Codec 1.02]

0x05 补充

相比于 png 文件,由于 jpeg 文件没有对图像数据的校验位,所以在 jpeg 文件中添加 payload 简单了很多

下载 JPEG 图片解析并执行 payload 的方法不再介绍

可参照 https://3gstudent.github.io/%E9%9A%90%E5%86%99%E6%8A%80%E5%B7%A7-%E5%88%A9%E7%94%A8PNG%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F%E9%9A%90%E8%97%8FPayload

0x06 小结

本文对 JPEG 的格式进行介绍,着重分析如何根据 JPEG 的文件格式,利用特定标志码隐藏 payload,这种方式虽然不会影响图片的正常浏览,但是借助于格式分析软件仍能够发现其中的细节。介绍 JPEG 格式的官方文档里面待学习的内容还有很多,认识越深,可供研究的技巧将会更多。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

清晨说晚安

我之所以活到现在的全部意义,是为了此刻能对你说,我爱你,我会在你身后永远守护你。

0 文章
0 评论
21958 人气
更多

推荐作者

一梦浮鱼

文章 0 评论 0

mb_Z9jVigFL

文章 0 评论 0

伴随着你

文章 0 评论 0

耳钉梦

文章 0 评论 0

18618447101

文章 0 评论 0

蜗牛

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文