JPG图片格式及隐写方法

jpg格式图片 本人小白,感觉数据很有意思,有了研究的冲动,参考大佬们的文章,慢慢进步,附带加上自己的一些新得体会, 数据,首先应该知道怎么进去的才知道怎么去破解,我进先从最简单的入手 今天先说一下jpg格式图片最基本的操作 第一种 txt文本文件和jpg图片的; 首先准备一张jpg图片和一个txt文件 然后调用dos命令copy \b 2.txt+1.jpg 3.jpg 改行代码作用是将图片... 阅读详情

首先,先来介绍下JPG文件

JPG文件使用的是一种有损的压缩算法,通过去除冗余信息和不可见的细节来减少文件大小

JPG图片的组成:SQI(文件头)+APP0(图像识别信息)+DQT(定义量化表)+SOF0(图像基本信息)+DHT(定义HUFFMAN表)+DRI(定义重新开始间隔)+SOS扫描开始+EOI(文件尾)j

加粗部分是JPG图像构成所必须的部分

JPEG(Joint Photographic Experts Group)压缩方式主要分为以下四个步骤:

  1. 颜色空间转换:将RGB颜色空间转换为亮度-色度(YCbCr)颜色空间。
  2. 离散余弦变换(DCT):对每个8×8像素块中的Y、Cb和Cr分量进行DCT变换,将其转换为频域表示。
  3. 量化:对DCT系数进行进一步的量化。通过除以一个量化矩阵来降低更多的精度
  4. 编码:使用哈夫曼(HUFFMAN)编码对量化后的DCT系数进行编码,以减小存储空间。

JPG文件的格式分为一个个的段来存储,段的长度和多少是不一定的。只要包含了足够的信息,那么JPG文件就是可以被打开的;。JPG文件的每个段都一定包含两部分:第一个是段的标识,第二个是段的长度。

既然说了JPG每个段一定包含两部分,那么先来讲讲每个段的结构

段的结构:

名称

字节数

数据

说明

段标识

1

FF

每个新段的开始标识

段类型

1

每个段都不同

类型编码

段长度

2

不固定

包括段内容和段长度本身,不包括段表示和段类型

段内容

≤65533字节

接下来我们使用010 Editor工具打开一个JPG图像来观察一下

圈起来的就是就是我所说的每个段所一包含的两部分的第一个部分,也就是段的标识。我们使用010 Editor工具可以发现,许多部分被划为了不同的颜色,这就是不同的段,圈起来的FF,就是每个段的开头,段的标识。

段类型

名称

标记码

说明

SOI

D8

文件头

EOI

D9

文件尾

SOFO

C0

帧开始

SOF1

C1

同上

DHT

C4

定义HUFFMAN(哈夫曼)表

SOS

DA

扫描行开始

DQT

DB

定义量化表

DRI

DD

定义重新开始间隔

APP0

E0

定义交换格式和图象识别信息

COM

FE

注释

SOI文件头

JPG文件的开始两个字节都是FF D8这是固定的

可以看到FF D8正是这个JPG文件的文件头

SOI后跟的就是APP0(图像识别信息了)

APP0格式

名称

字节数

说明

段标识

1

FF

段类型

1

E0

段长度

2

0010=16

如果有RGB缩略图就=16+3n

以下为段内容

交换格式

5

4A 46 49 46 00

"JFIF"的的ASCII码

主版本号

1

次版本号

1

密度单位

1

0=无单位;1=点数/英寸;2=点数/厘米

X像素密度

2

水平方向的密度

Y像素密度

2

垂直方向的密度

缩略图X像素

1

缩略图水平像素数目

缩略图Y像素

1

缩略图垂直像素数目

 

如上图,圈起来的就是APP0部分

DQT(定义量化表)

名称

字节数

说明

段标识

1

FF

段类型

1

D8

段长度

2

00 43=67

其值=3+n(当只有一个QT时)

以下为段内容

QT信息

1

0-3位:QT号;4-7位:QT精度(0=8bit,1字节;否则=16bit,2字节)

QT

n

n=64×QT精度的字节数

如上图,圈起来的就是DQT部分,全起来的可以看到是由两个部分的DQT

JPG文件里,一般是有两个DQT段的,分别为Y值(亮度),C值(色度)

SOF0(图像基本信息) 

名称

字节数

说明

段标识

1

FF

段类型

1

C0

段长度

2

其值=8+组件数量×3

以下为段内容

样本精度

1

8

每个样本位数

图片高度

2

图片宽度

2

组件数量

1

3

1=灰度图,3=YCbCr/YIQ色彩图,4=CMYK彩色图

以下每个组件占3个字节

组件ID

01=Y,02=Cb,03=Cr,04=I,05=Q

采样系数

先把这一字节转换为二进制数,0-3字节表示垂直采样系数,4-7字节表示水平采样系数

量化表号

如上图,圈起来的就是SOF0,需要注意的是,如果FF后面跟的不是C0的话,比如C2及其他的字节,那么可能标表示图片采用了非标准的JPG格式或其他压缩算法

如果您遇到了SOF0第二字节处非C0的情况,那么可能有以下几种情况:

  1. 图片使用了非标准的 JPEG 格式或者其他压缩算法。
  2. 图片受损或者格式错误,导致解析时出现了错误的标记。
  3. 该标记并不是 JPEG 格式中的有效标记,而是其他格式的标记或者数据中的随机值。

00 11:是组件数量,算法公式是=8+组件数量×3,00 11转换为十进制数为17,17=8+3×3,所以组件数量有3个

组件数量有三个,所以组件ID,采样系数,和量化表号都会有,分别是01 22 00,02 11 01,03 11 01

01 22 00:第一个字节是01,所以对应的是Y组件,22转换为二进制数是0010010,0-3位值是2,4-7位值也是2,所以垂直采样系数和水平采样系数都是2,第三个字节是0,所以量化表号是0。

02 11 01:第一个字节是02,所以对应的是Cb组件,11转换为二进制数是00010001,0-3位值是1,4-7位值也是1,所以垂直采样系数和水平采样系数都是1。第三个字节是1,所以量化表号是1。

03 11 01:第一个字节是03,所以对应的是Cr组件,11转换为二进制数是00010001,0-3位值是1,4-7位值也是1,所以垂直采样系数和水平采样系数都是1。第三个字节是01,所以量化表号是1。

DHT定义HUFFMAN表

名称

字节数

说明

段标识

1

FF

段类型

1

C4

段长度

2

其值=19+n(当只有一个HT表时)

以下为段内容

HT信息

1

这一字节需要转换为二进制数,然后观察第四位,第4位如果是0那么就是DC表,是1就是AC表,5-7位:必须0

HT位表

16

这16个数之和应该≤256

HT值表

n

n=表头16个数之和

如上图所示,一共有2个HUFFMAN表

(1)FF C4:定义了HUFFMAN表头两个字节

(2)段长度为2个字节:①是00 1B=27(不包含表头也就是FF C4),27=(段长度2个字节+HT信息1个字节+HT位表16字节)+8(这个数代表HT表有8个字节)

(3)HT信息1字节:如上图,HT信息是00,00这个十六进制数转换为二进制数就是00000000,第四位是0,所以①是DC表

举例:如果这一字节数是10,那么转换为二进制数就是00010000,第四位数是1,那么就是AC表

(4)HT位表16个字节,这16个字节和要小于等于256

以①为例,00 02 03 01 01 01 00 00 00 00 00 00 00 00 00 00这是HT位表的16个字节,加起来值为8,说明HT值表有8个字节

(5)HT值表有8个字节,也就是00 01 02 03 04 05 06 07这8个字节

SOS扫描开始

名称

字节数

说明

段标识

1

FF

段类型

1

DA

段长度

2

000C

其值=6+2x扫描行内组件数量

以下为段内容

扫描行内组件数量

1

3

必须≥1,≤4(否则错误),通常为3

以下每个组件占2字节

组件ID

1

1=Y,2=Cb,3=Cr,4=I,5=Q

HUFFMAN表号

1

0-3位:AC表号,4-7DC表号

剩余三个字节

3

用途不明,忽略

(1)扫描行开头:2字节,FF DA

(2)段长度:2字节,这里是00 0C=12

(3)扫描行内组件数量:1字节,这里是03,代表组件数量为3

(4)每个组占用2字节:第一个字节是组件ID(1 = Y, 2 = Cb, 3 = Cr, 4 = I, 5 = Q),组件ID和HUFFMAN表号为一组,占2字节,第二个字节的0-3位是AC表号,4-7位是DC表号。表号的值是0-3

01 00:Y组件,AC表号是0,DC表号是0

02 10:Cb组件,AC表号是1,DC表号是0

03 10:Cr组件,AC表号是1,DC表号是0

EOI文件尾

名称

字节数

段标识

1

FF

段类型

1

D9

这两个字节构成了JPG文件的尾部,FF D9后面是不会再有信息的,如果有,就可以判断应该是有插入的隐写信息的

讲完了结构,我们来讲讲JPG图像常见的隐写方法

修改DQT隐写

我们可以修改DQT里的内容,来做到隐藏内容

如上图,我们把不影响DQT的开头和段长度修改后,将其他每个字节都替换为了11,我们保存可以查看下原图和修改后的图片的区别

如上图,可以发现,修改后会比原图更明亮

jphide隐写算法

算法原理:使用blowfish算办法加密信息,利用控制表确定信息的隐藏位置及嵌入秘密的方式,同时结合blowfish生成的随机序列控制具体位置的嵌入。

隐写过程大致为:1.解压jpg图像,得到DCT系数。2.根据用户给定的密码对隐藏信息进行blowfish加密。3.利用blowfish算法生成伪随机序列,并根据此招到需要改变的DCT系数,将其末位改变为需要隐藏的信息的值。4.最后,把DCT系数重新压缩为JPG图片

JSteg隐写算法

算法原理:使用JPG图像量化后的离散余弦变换(DCT)系数的最低比特来承载秘密信息

隐写过程:1.需要确定的就是当前位置的DCT系数不能为0或1,不满足该条件则跳过,若满足条件则进行下一步。2.判断该位置的DCT系数的最低比特是否与秘密信息的比特数值相同,相同的话就结束本次操作,不相同就使用秘密信息比特替换

OutGuess隐写算法

OUustGuess的信息嵌入过程和JSteg完全一样,纠正阶段会修改DCT系数以消除在嵌入过程中造成的统计特征的变化。

OutGuess 0.2中加入了用户密钥设置,在整幅图像中根据密钥的不同按照一定的原则挑选DCT系数进行修改,是的嵌入信息随机化,难以被检测出来。

这里推荐两个工具,用来检测JPG图像是否存在隐写

一个是Steghide隐写工具,一个是Stegdetect

Steghide隐写工具:链接:https://pan.baidu.com/s/1PEw2y8j7gAAvqvFY7WHtGA 
提取码:a2le

Stegdetect隐写工具:链接:https://pan.baidu.com/s/1ddHbWew2oh2yuLV7T7uXoA 
提取码:c1r6

这边就不再讲解如何使用了,有兴趣的可以自己上别的博主那里查看一下

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

术之JPEG——F5算法 & Jsteg算法 使用Jsteg和F5算法对图像进行分析,生成不同质量因子qf下的压缩图像,调用Jsteg_in.m、Jsteg_out.m、F5_in.m、F5_out.m对标准图像Lena.tiff使用Jsteg算法和F5算法进行秘密信息嵌入和秘密信息提取; 阅读详情

相关推荐

数字图像术之JPEG 分析

对于 JPEG 经典的算法 Jsteg 和 F5 算法,可以在 JPEG 图像中入秘密数据,本次实验想通过不同的 JPEG 的分析方式判断出 JPEG 图像的类型(原始图像和图像),从而区分 JPEG 载密图像与原始图像,对两种 JPEG 的分析方式进行分析测试。.........

HUANGliang_的博客 6787

术总结

目录 1.术介绍 2.图片术 2.1.图片格式 (1)GIF图片格式 (2)PNG文件格式 (3)JPG文件格式 2.2.图片实战 (1)copy指令数据 3.使用工具分析载体 3.1.StegSolve图片分析工具 3.2.binwalk固件分析工具 (1)binwalk使用实例 3.3.图片分离 (1)dd命令分离方法 (2)foremost工具分离 3.4.steghide工具 1.术介绍 STEGA,中文意思即...

afei001 989

别再只扫二维码了!聊聊文件术:如何用010和Kali给你的图片“加料”与“拆包”

本文深入解析数字术的原理与实践,从JPG文件结构分析到藏数据的多种方法,包括命令行操作、Python脚本实现及专业工具使用。同时介绍了如何检测和提取藏数据,以及防御术攻击的策略,适合信息安全爱好者和CTF参赛者学习。

weixin_33646989的博客 326

CTF MISC图片简单题学习思路总结(持续更新)

在MISC里面图片也是非常常见的题,有简单题,也有难题,但一般不会只出现图片,有时候会结合密码学等出为综合题,在这我就简单记录一下我遇到的图片的简单题的解题方法和步骤,便于我自己回忆复习,要是有错误,还请各位大佬们指教,若是有侵犯您的权利,联系我我会删除这篇文章。

超大青花鱼的博客 2万+

杂项-图片

Exif按照JPEG的规格在JPEG中插入一些图像/数字相机的信息数据以及缩略图像,可以通过与JPEG兼容的互联网浏览器/图片浏览器/图像处理等一些软件来查看Exif格式的图像文件,就跟浏览通常的JPEG图像文件一样。当两张jpg图片外观、大小、像素都基本相同时,可以考虑进行结合分析,即将两个文件的像素RGB值进行XOR、ADD、SUB等操作,看能否得到有用的信息,StegSolve可以方便的进行这些操作。如果拍摄图片时,开启了GPS功能,则在图片的详细信息里会记录当前位置对应的经纬度。

orchid_sea的博客 6824

图片I

文件结束标识 (2 bytes): 0XFF, 0XD9 (EOI)文件头标识 (2 bytes): 0XFF, 0XD8 (SOI)42 4D后面的四位6E 05 1D 00是图片大小。解决问题:一张图片被切碎为大小不一的多张图片。注意只留下base64信息。先图片合成,再归一化处理。使用随波逐流工具分离。

m0_55282610的博客 1081

misc 方向图片介绍

可以进行修改,宽度也是一样,但要注意宽度改的话分辨率会变模糊。最后一种是把一张图片同时加入文本,flag通常是在文本里面。还有一种是把图片高度设置的很小,看不见图片下面的flag。这个工具好处是可以直接选择文件,还可以进行一帧一帧的扫描。还有一种出题方式是把png倒过来,记得是从右往左数。HXD工具是十六进制 但是图片是十进制,找不到。第二种方式,点开图片查看属性,flag在里面。第一种方式,直接拖进去,发现flag。bmp文件是小端序入,所以是从右往左。直接把图片导入工具中,发现flag。

2302_81688883的博客 348

关于LSB图片的解法

关于LSB图片的解法 LSB全称为 least significant bit,是最低有效位的意思。Lsb图片是基于lsb算法的一种图片术。 是一种信息藏技术,这项技术目标是使对方对信息“视而不见”的效果,像诗歌中的藏头诗。 从图片格式上说 一般来说图片有BMP、JPG、BNG等格式,BMP、PNG是无损压缩的图片,而JPG是有损压缩的图片,所以一般使用BNG或BMP进行信息藏...

qq_42391153的博客 8623

Stegano之StegSolve、StegDetect、InvisibleSecrets

一、StegSolve StegSolve是一款基于Java开发的流行图片分析软件,其支持常见的图片文件格式,可以对不同的文件进行结合(包括XOR、ADD、SUB等操作),可以对图片文件格式进行分析,可以提取GIF文件中的帧等,覆盖了基本的图片分析需求。 二、StegDetect Stegdetect通过统计测试来分析图像文件中是否包含藏内容,它运行静态测试以判断藏的内容是否存在。此

Tom_Lang_666的博客 6095

CTF学习之MISC之图片与文档

CTF学习之MISC之图片 术概述 图片技术 图片EXIF信息 图片LSB低位 术(Stega) 术(Steganography,简Stega) 一门关于信息藏的技巧与科学 信息藏:不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容 与密码学(Cryptography)不同 题目类型 图片 图片EXIF信息 图片高度缩减 图片LSB低位 文档 文本 压缩包 其他文档格式(word、pdf、html文件) 音频、视

零安道长的博客 5706

CTF总结

打了有小半年ctf比赛了,一直没有时间来几篇关于ctf的博客,今天抽出时间了点杂项中的总结,希望能够帮到大家 简述 术是一门关于信息藏的技巧与科学,所谓信息藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。术的英文叫做Steganography,来源于特里特米乌斯的一本讲述密码学与术的著作Steganographia,该书书名源于希腊语,意为“秘书...

普通Gopher 4031

CTF Misc(1)图片基础以及原理,覆盖了大部分题型

ctf misc图片的总结,以及原理介绍,覆盖了大部分图片类题目

Ba1_Ma0的博客 7万+

地狱来了(JPG

地狱来了(JPG) 第一步:我们需要理解几种格式的开头(就是放在HXDX64.EXE中的开头)JPG的开头是:FFD8FF 第二步:我们就是要把一张不能打开的图片进行修护,就用到了HXDX64.EXE的软件,将图片放到HXDX64.EXE中,可以发现JPG的开头不是(FF D8 FF),这时就要将开头变成(FF D8 FF)在进行保存 再打开我们可以发现有一些汉字和一个网址。 而这个网...

weixin_44862252的博客 2528

如何在JPG文件中数据

最近在做资源管理器背景的一个功能时,需要将信息传递到DLL中去,主要就是传递一些比较简单的参数,包括图片的契合度,透明度之类的。通信方式有多种,毕竟是练手的功能,就想找一些以前没用过的方式。在我前面的文章中,介绍过数字水印技术,其中的两种方式就是在图像文件中嵌入数据。

【微软MVP】zhaotianff的专栏 1662

JPG 文件中数据:C# 实现指南

术是一种将秘密信息藏在普通文件中的技术,广泛应用于信息安全和私保护领域。JPEG 图像文件因其压缩特性和广泛的使用而成为术的理想载体。通过在 JPEG 文件中嵌入数据,可以实现蔽的信息传输。你是否曾经好奇如何在图片中藏秘密信息?或者想要学习一种新的安全技术来保护你的数据?本文将详细介绍如何使用 C# 在 JPEG 文件中进行数据,并提供一个完整的示例代码。让我们一起探索这个有趣且实用的技术吧!

墨夶的博客 1820

0x002图片jpg高度

图片学习记录0x002题目图片链接:https://pan.baidu.com/s/1Sa5MqFSw1d0yMqeEAm0uOA 密码:y8ym首先看一下大神们对JPG格式的深入理解jpg格式参考:https://blog.csdn.net/zhengzhoudaxue2/article/details/7693258...

神谕恋红尘 1万+

图片jpg后面连接文件

所谓的图片就是将信息放在了图片中的某个位置而已,我们现在只研究不研究里面的东西是否加密。 第一种 首先下载图片打开看一下   图片为一美女,看不出什么东西。   下面右击图片查看属性里面的详细信息看看是否有什么东西。   这个里面是极容易藏信息的。当然里面的信息我们是可以进行更改的,可以入自己的信息。 第二种   图片后面也许会连接一个文档,由于操作系统在读图片的时候

fox_wayen的博客 7221

CTF杂项-——图片数据 1(菜鸟逼逼)

CTF中有一类题目是关于图片的,题目会给一张图片,你需要从照片里面找到题目的flag。 图片总共分几大类。 首先的话我们可以先看看图片属性,可能会在作者之类的地方放一些信息 不过一般不会有这种题目的。。。 我们接下来介绍一个文件编码的小知识——标记头。 一个文件被系统识别和运行,不单单取决于文件的后缀名。在其内部文件所存储的信息中也包含文件的信息。以一张JPEG(JPG) 文件为例 打开图片可以看到就是一张正常的图片 我们用010打开图片 打开之后就可以看到文件的内容用十六进制的方式呈现,其中

Rookie 4159
上一篇: GIF文件格式及隐写方法
下一篇: Base64编码
辞阮
博客等级 码龄3年 62粉丝 5原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值