PNG图片文件头结构
简介
便携式网络图形(英语:Portable Network Graphics,PNG)是一种支持无损压缩的位图图形格式,支持索引、灰度、RGB三种颜色方案以及Alpha通道等特性。PNG的开发目标是改善并取代GIF作为适合网络传输的格式而不需专利许可,所以受广泛应用于互联网及其他方面上。
文件结构
PNG文件由文件署名和数据块(chunk)组成
文件署名:
图片的前8字节用来表示该文件是否是PNG文件,通常PNG文件的标识是
89 50 4E 47 0D 0A 1A 0A
文件头数据块(IHDR):
包含PNG图像数据的基本描述信息,一共13字节,作为第一个数据块出现在PNG数据流中,且一个PNG图片中,只有一个文件头数据块。
名称 字节数 说明 Length(长度) 4字节 指定数据块中数据域的长度,其长度不超过(231−1)(231−1)字节 Chunk Type Code(数据块类型码) 4字节 数据块类型码由ASCII字母(A-Z和a-z)组成,表明类型名称 Width 4字节 图像宽度,以像素为单位 Height 4字节 图像高度,以像素为单位 Bit depth 1字节 图像深度
索引彩色图像:1,2,4或8 ;
灰度图像:1,2,4,8或16 ;
真彩色图像:8或16;ColorType 1字节 颜色类型
0:灰度图像,1,2,4,8或16;
2:真彩色图像,8或16;
3:索引彩色图像,1,2,4或8;
4:带α通道数据的灰度图像,8或16;
6:带α通道数据的真彩色图像,8或16;Comdivssion method 1字节 压缩方法(LZ77派生算法) Filter method 1字节 滤波器方法 Interlace method 1字节 隔行扫描方法:
0:非隔行扫描
1: Adam7(由Adam M. Costello开发的7遍隔行扫描方法)CRC (循环冗余检测) 4字节 存储用来检测是否有错误的循环冗余码 调色板数据块PLTE(palette chunk):
它包含有与索引彩色图像((indexed-color image))相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。
[!NOTE]
(这部分目前没用到,知道在图像数据块之前就行,若未来用到,再在此添加笔记)
图像数据块IDAT(image data chunk):
图像数据块IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。
IDAT存放着图像真正的数据信息,因此,如果能够了解IDAT的结构,我们就可以很方便的生成PNG图像。
名称 十六进制 说明 数据块长度 00 09 24 AF
指明IDAT数据块长度(字节) 数据块名称 49 44 41 54
数据块类型码 “IDAT” 的 ASCII 字母 压缩的数据内容 78 9C ...
LZ77 派生压缩方法压缩的实际图像数据 循环冗余校验 81 16 EC 72
CRC (循环冗余检测) 图像结束数据IEND(image trailer chunk):
图像结束数据IEND(image trailer chunk):它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。
文件的结尾12个字符总应该是这样的
00 00 00 00 49 45 4E 44 AE 42 60 82
由于数据块结构的定义,IEND数据块的长度总是0(
00 00 00 00
,除非人为加入信息),数据标识总是IEND(49 45 4E 44
),因此,CRC码也总是AE 42 60 82
样例
下面以一个PNG文件来做分析展示:
从图中可以看出,前8个字节是PNG的文件标识:
89 50 4E 47 0D 0A 1A 0A
接着就是IHDR文件头数据块部分:
00 00 00 0D 表明文件头数据块长度为13字节
49 48 44 52 表明IHDR的ASCII码名称
接下来是IHDR数据块的实际存储内容:
00 00 02 0C 表示图像宽1014像素
00 00 00 AF 表示图像高257像素
08 表示图像深度 8
06 表示带α通道数据的真彩色图
00 表示表示使压缩方法(LZ77派生算法),PNG Spec规定此处总为0(非0值为将来使用更好的压缩方法预留)
00 表示滤波器方法
00 表示隔行扫描方法:00非隔行扫描
91 91 86 66 表示CRC校验码
需要注意的(省流版)
[!IMPORTANT]
CTF中,对于一些图片隐写,通常会改变PNG的标识位(前8字节),让文件格式发生改变;或者是故意调整高度和宽度,隐藏FLAG,使图像失真。我们要注意的就是IHDR文件头数据块,了解结构和意义,才能方便修改回正确的样式。
附表:其他文件格式文件头标识符表
扩展名 | 文件头标识(HEX) | 文件描述 |
---|---|---|
7z | 37 7A BC AF 27 1C | 7-ZIP compressed file |
doc | 0D 44 4F 43 | DeskMate Document file |
doc | 12 34 56 78 90 FF | MS Word 6.0 |
doc | 31 BE 00 00 00 AB 00 00 | MS Word for DOS 6.0 |
doc | 7F FE 34 0A | MS Word |
HDMP | 4D 44 4D 50 93 A7 | Windows heap dump file |
hdr | 23 3F 52 41 44 49 41 4E 43 45 0A | adiance High Dynamic Range image file |
html | 3C 21 44 4F 43 54 | HyperText Markup Language 3 |
html | 3C 48 54 4D 4C 3E | HyperText Markup Language 2 |
html | 3C 68 74 6D 6C 3E | HyperText Markup Language 1 |
html | 68 74 6D 6C 3E | HTML |
img | 00 01 00 08 00 01 00 01 01 | Ventura Publisher/GEM VDI Image Format Bitmap file |
JPEG | 开始:FF D8 结束: FF D9 | JPEG图片文件 |
PNG | 89 50 4E 47 0D 0A 1A 0A | PNG图片文件 |
GIF | 47 49 46 38 39(37) 61 | GIF文件(G I F 8 9 (7) a) |
BMP | 42 4D | BMP文件 |
JAR | 4A 41 52 43 53 00 | JARCS compressed archive |
jar | 5F 27 A8 89 | JAR Archive File |
MP3 | FF FB 50 | |
mp4 | 00 00 00 18 66 74 79 70 33 67 70 35 | MPEG-4 video files |
25 50 44 | ||
PPT | D0 CF 11 | |
xls | 09 02 06 00 00 00 10 00 B9 04 5C 00 | MS Excel v2 |
xls | 09 04 06 00 00 00 10 00 F6 05 5C 00 | MS Excel v4 |
zip | 50 4B 30 30 | ZIP Archive (outdated) |
Zip | 50 4B 30 30 50 4B 03 04 | WINZIP Compressed |
相关参考资料:
- 标题: PNG图片文件头结构
- 作者: 耀鳞光翼
- 创建于 : 2025-01-02 00:43:00
- 更新于 : 2025-01-02 23:31:59
- 链接: https://blog.lightwing.top/2025/01/02/PNGFormat/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。