【CTF】【winhex】超详细jpg图片结构分析

文章目录

  • 前言
  • 段结构
  • 字节
    • 高位在前
    • 段标识
    • 段类型
      • 文件头
      • 文件尾
      • 帧开始(标准JPEG)
        • 标志08
        • y轴分辨率
        • x轴分辨率
        • 组件数量03
      • 定义Huffman表(霍夫曼表)
    • 段长度
    • 段数据
  • 参考资料

前言

本文排版有些乱,例子镶嵌在每个知识点里,但整体实例都是按照顺序讲解的,而对于讲过的知识点不再赘述。

本文也将持续更新。

段结构

JPG文件由一个个段构成
JPG图片所有数据都是高位在前

【CTF】【winhex】超详细jpg图片结构分析_第1张图片

字节

【CTF】【winhex】超详细jpg图片结构分析_第2张图片
这个红色框框里的两个数表示一个字节

高位在前

什么是高位在前?
例如现实生活中1234,高位在前则表示12 34

而winhex的都是低位在前,在后面会讲到段长度,如00 10,低位在前则表示10 00

段结构包括:
段标识|段类型|段长度|端数据

段标识

1字节,固定为FFH,H表示16进制

段类型

1字节

文件头

名称 SOI 标记码 D8

【CTF】【winhex】超详细jpg图片结构分析_第3张图片如图,D8表示本jpg文件的文件头,前面的FF表示段标识

文件尾

名称 EOI 标记码 D9
【CTF】【winhex】超详细jpg图片结构分析_第4张图片拉到最后,FF D9表示文件尾

帧开始(标准JPEG)

  • 名称 SOF0 标记码 C0
  • 名称 SOF1 标记码 C1
    C0与C1在一个文件里只会存在一种,下面以C0为例,C1同样操作

我们查找 FF C0

在这里插入图片描述
【CTF】【winhex】超详细jpg图片结构分析_第5张图片

后面两个字节00 11表示段长度,将十六进制转为十进制,可以知道后面有15个字节的数据(段长度占了2字节,并且不包括段标识和段类型)
那么我们可以看到后面的数据

标志08

1个字节

【CTF】【winhex】超详细jpg图片结构分析_第6张图片

这个标志固定是08

y轴分辨率

2字节
在这里插入图片描述

计算一下,
【CTF】【winhex】超详细jpg图片结构分析_第7张图片

与实际的分辨率(高度)一样
【CTF】【winhex】超详细jpg图片结构分析_第8张图片

x轴分辨率

2字节

【CTF】【winhex】超详细jpg图片结构分析_第9张图片这两字节表示x轴分辨率,计算一下

【CTF】【winhex】超详细jpg图片结构分析_第10张图片与实际上文件的属性是一样的

在这里插入图片描述

组件数量03

这1个字节固定为03

【CTF】【winhex】超详细jpg图片结构分析_第11张图片在这里插入图片描述
从03之后的9个字节,都为组件数据,且每个组件数据为3个字节

组件大小和数量都为固定的。

定义Huffman表(霍夫曼表)

名称 DHT 标记码 C4

固定4FF C4
其中2个记录亮度,2个记录色度

段长度

2字节
不包含段标识、段类型

例子在帧开始处讲了

段数据

长度为段长度-2

参考资料

https://www.bilibili.com/video/BV1MJ411p7Ly/?spm_id_from=333.999.0.0&vd_source=b914a8de9ea8b12ba5cb6d8edd1b346c

你可能感兴趣的:(CTF,隐写)