
1.JPG文件结构
以一幅24位彩色图像为例,JPEG的压缩分为四个步骤:
颜色转换:在将彩色图像进行压缩之前,必须先对颜色模式进行数据转换。转换完成之后还需要进行数据采样
DCT变换:是将图像信号在频率域上进行变换,分离出高频和低频信息的外理过程,然后再对图像的高频部分(即图像细节)讲行压缩
量化:由于下面第四步编码过程中使用的码本都是整数,因此要对频率系数进行量化,将之转换为整数。数据量化后,矩阵中的数据都是近似值,和原始图像数据之间有了差异,这一差异是造成图像压缩后失真的主要原因。。编码:编码是基于统计特性的方法。
四个步骤都完成后的JPEG文件,其基本数据结构为两大类型:段 和 经过压缩编码的图像数据。
PS:
有些段没有长度描述也没有内容,只有段标识和段类型。文件头和文件尾均属于这种段。。段与段之间无论有多少FF都是合法的,这些FF称为「填充字节」,必须被忽略掉。
JPEG文件使用的数据存储方式有多种。最常用的格式称为JPEG文件交换格式(JPEG FileInterchanae FormatJFIF)文件后辍名为ipa或jpeg。JPEG是有损压缩格式,将像素信息用JPEG保存成文件再读取出来,其中某些像素值会有少许变化。在保存时有个质量参数可在0至100之间选择,参数越大图片就越保真,但图片的体积也就越大。一般情况下选择70或80就足够清晰,和pna图片相比,JPEG没有透明度信息。
具体的内容可以结合之前介绍的16进制编辑器010Editor分析,使用ipg文件模板可以清晰看到文件的数据段和压缩数据分布
2.常见隐写方式
JPG文件隐写题目主要有以下几类:
- exif信息隐藏
- 字符附加
- 文件结合
- 基于DCT域的JPG图片隐写
- SilentEye工具隐写
exif信息隐藏
可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。jpg图片拥有exif信息,可以通过填充exif信息来隐藏信息
解决方法
- 在windows右键点击图片,选择属性,可以查看部分的exif信息。
- 在linux使用工具exiftool可以看到所有的exif信息。
字符附加
在附加式的图片隐写术中,我们通常是用某种程序或者某种方法在载体文件中直接附加上需要被隐写的字符串或其他信息,由于写入的位置对图片来说无关紧要,所以不会影响图片的正常打开和识别。
解决方法
- 用16进制编辑器打开图片,查找和flaa有关的字符,出现在文件末尾的可能性更大在linux下,使用strings命令,可以将文件中的所有字符串打印出来,strings命令在对象文件或二进制文件中查找可打印的字符串。
- 字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束。
- strings命令对识别随机对象文件很有用。
- 常用命令:strings文件名称
文件结合
一种采用特殊方式将图片文件(如JPG格式)与其他文件结合起来的文件。该文件一般保存为JPG格式,可以正常显示图片,当有人获取该图片后,可以修改文件的后缀名,比如结合的是zip文件,将图片改为zip压缩文件,在文件无损坏的情况下就可以以zip文件直接打开。
图种是一种以图片文件为载体,然后将zip等压缩包文件附加在图片文件后面。因为操作系统识别的过程中是,从文件头标志,到文件的结束标志位,当系统识别到图片的结束标志位后,默认是不再继续识别的,所以我们在通常情况下只能看到它是只是一张图片。
解决方法
- 在windows下修改后缀名或者16进制编辑器手工分离。
- 在linux下使用binwalk,dd,foremost工具分离文件
基于DCT域的JPG图片隐写
因为DCT是一种有损压缩(LossCompression)技术,但一般不会影响图像的视觉效果,可以通过这个特性来隐藏信息。在这个隐写类型中常见的隐写方法有JSteg、JPHideOutguess F5等等
解决方法
- 使用Stegdetect检测隐写方式,并且还可以基于字典暴力破解密码方法提取通过Jphide、outguess等方式嵌入的隐藏信息。
- 根据Stegdetect的判断结果,使用JSteg、JPHide、OutGuessInvisible SecretsF5等工具完成解密
SilentEye工具隐写
使用SilentEye进行信息隐藏,SilentEye是一款免费的图片信息隐藏工具,可以对图片和音频进行信息隐藏。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)