发布于2022年11月8日2年前 0x00 前言 继续学习图片的隐写技巧,这次学习和理解JPEG文件格式。与PNG文件的格式相比,JPEG文件相对简单,读取其中隐藏的有效载荷的方式也差不多。两者的区别在于文件格式不同,可用的细节也不同。 本文相关工具: 十六进制编辑器:十六进制编辑器 隐写检测:隐写检测 下载地址: https://github.com/abeluck/stegdetect 编辑退出信息:MagicEXIF 下载地址: http://www.magicexif.com/ 分析JPEG图像格式:JPEGsnoop 下载地址: http://www.impulseadventure.com/photo/jpeg-snoop.html 0x01 相关概念 JPEG文件 JPEG是联合摄影专家组的缩写。 支持陨石压缩 支持不透明度 不支持动画。 非传病媒介 JEPG同JPG的区别 JPEG既可以用作扩展名,也可以用作文件格式。 JPG是JPEG的缩写,代表扩展。 JPEG和JPG基本上没有区别,它们的格式都是通用的。 色彩模型 采用YCrCb颜色模型,比RGB更适合图形压缩。 y代表亮度。 Cr代表红色成分 Cb代表蓝色成分 它对亮度Y的变化远比人眼对画面中色度C的变化敏感。如果每个点保存一个8-8bit的亮度值Y,每2x2个点保存一个CrCb值,那么肉眼对图像的感知不会有太大的变化,可以节省一半的空间。 RGB模型的四个点需要4x3=12字节。 YCrCb模型的四个点需要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(c b-128)-0.71414(Cr-128) B=Y 1.772 *(Cb-128) 文件格式 JPEG文件大致可以分为两部分:标签代码和压缩数据。 标记码: 它由两个字节组成,第一个字节是固定值0xFF,最后一个字节根据含义不同有不同的值。 每个标记代码前可以添加无限数量的无意义0xFF填充,连续的0xFF可以理解为一个0xFF,表示标记代码的开始。 以下产品的通用标签代码: SOI0xD8图像开始 Pp00xe0应用程序保留标志0 APPn0xE1-0xEF应用保留标志n (n=1 ~ 15) DQT0xDB量化表(定义量化表) SOF00xC0帧开始(帧开始) Dh0xc4定义霍夫曼表(Define Huffman Table) DRI 0XDD定义差分编码累积复位的间隔(定义重启间隔) 0xda扫描开始(扫描开始) Eo0xd9图像结束 压缩数据: 前两个字节保存整个段的长度,包括这两个单词部分。 注: 这种长度表示不同于PNG文件,高位在前,低位在后。 比如长度为0x12AB,存储顺序为0x12和0xAB。 Exif信息 Exif文件是JPEG文件的一种,符合JPEG标准,只是在文件的头信息中加入了拍摄信息和索引图。 这些信息可以在相机拍摄的jpeg图像中找到。 存储在APP1(0xFFE1)数据区 接下来的两个字节保存APP1数据区(即Exif数据区)的大小 接下来是Exif头,固定结构为0x457869660000。 其次是Exif数据 查看Exif信息的工具:exiftool 下载地址: https://github.com/alchemy-fr/exiftool 编辑退出信息的工具:MagicEXIF 下载地址: http://www.magicexif.com/ 添加操作如图所示 0x02 常见隐写方法 DCT加密 LSB加密 DCT LSB 平均DCT 高容量DCT 高容量DCT算法 上述隐写术方法引自: https://www . black hat . com/docs/Asia-14/materials/Ortiz/Asia-14-Ortiz-Advanced-JPEG-Steganography-And-detection . pdf 目前,有许多开源工具可以实现上述先进的隐写方法。 常见隐写工具: JSteg JPHide 智胜 看不见的秘密 F5 附录 伪装 当然,相应的隐写分析工具也已经出现很久了。 例如:Stegdetect 下载地址: https://github.com/abeluck/stegdetect 0x03 利用JPEG文件格式隐藏Payload 接下来,我们在学习了文件格式之后,介绍一些隐藏的想法: 1、直接在尾部添加数据 如图,不会影响图片的正常浏览。 2、插入自定义COM注释 COM注释是0xff和0xfe。 插入数据0x11111111 长度为0x04 总长度为0x06。 的完整十六进制格式是0xffff00061111111。 插在DHT前面,如图。 如图插入后,不会影响图片的正常观看。 把ff改成fe,如图,也不影响画面的正常观看。 3、插入可被忽略的标记码 原理同上,将标志码替换为可以忽略的特殊值。 例如: 00 01 *项目 d0 *RST0 DNL特区 ef APP15 经测试,上述识别码不影响正常观看图片。 4、修改DQT DQT:定义量化表 识别码是0xdb 接下来的两个字节代表长度 下一个字节代表QT设置信息。 前4位是QT编号。 后4位是QT精度,0=4位,否则为16位。 最后是QT信息,长度是64的整数倍。 检查测试图片的DQT信息,如图所示 长度是0x43,十进制是67。 00表示QT号为0,精度为8bit。 接下来的64个字节是QT信息字节 注: 这里的DQT格式指的是http://www.opennet.ru/docs/formats/jpeg.txt. 尝试替换这64个字节,如图。 对比一下前后的画面,可以发现画面的变化。 如果只是调整一些字节,改成净荷,能有多大区别?和下图对比一下。 反过来,还有很多地方需要修改。 0x04 检测和识别 对于上述隐藏方法,可以借助jpeg图像格式分析工具找到踪迹。 比如JPEGsnoop 下载地址: http://www.impulseadventure.com/photo/jpeg-snoop.html 支持以下文件的格式分析:JPG - JPEG静态照片。THM -原始照片/电影文件的缩略图。AVI* - AVI电影。DNG -数码负片原始照片。PSD - Adobe Photoshop文件。CRW, CR2,NEF,ORF,PEF -原始照片。MOV* - QuickTime电影、QTVR(虚拟现实/360全景)。PDF - Adobe PDF文档 实际测试: 如下图所示,我们发现图片中添加了COM评论。 如下图所示,通过查看DQT的数据来识别添加的有效载荷,0x11对应的小数是17。 同样,jpegsnoop可以解析JPEG图像的EXIF信息,如下图所示 注: 为了方便测试,截图中的以下值是由MagicEXIF软件手动添加的: EXIF品牌/型号:好的[测试] [?] EXIF马克:没有 EXIF软件:正常[MagicEXIF元数据编解码器1.02] 0x05 补充 与png文件相比,jpeg文件更容易添加有效载荷,因为jpeg文件没有图像数据的校验位。 下载JPEG图像分析和执行payload的方法就不再介绍了。 (请参考https://3gstudent.github.io/'s隐写术-使用PNG文件格式隐藏有效载荷) 0x06 小结 本文介绍了JPEG的格式,重点介绍了如何根据JPEG的文件格式,使用特定的logo代码来隐藏有效载荷。这种方式虽然不会影响图片的正常浏览,但是在格式分析软件的帮助下,还是可以找到细节的。在介绍JPEG格式的官方文档中还有很多需要学习的地方。知道的越深,可以学习的技能就越多。 留下回复
创建帐户或登录后发表意见