文章目录
- 一、概述
- 二、文件结构
- 三、文件署名域
- 四、数据块
- 1、IDHR文件头数据块
- 2、调色板数据块
- 3、IDAT数据块
- 4、IEND数据块
- 五、其他辅助数据块(了解即可)
- 六、动态png——APNG
一、概述
PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG’s Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。(说白了这就是一种方便的、适于网络传播的轻便图片文件格式)
二、文件结构
png文件由文件署名域和数据块组成。
三、文件署名域
8个字节文件署名域用来标识该文件是png文件,即俗称的“文件头”。
16进制表示为:89 50 4E 47 0D 0A 1A 0A。 ^c0d22c
四、数据块
PNG数据块部分由IHDR(文件头数据块)、PLTE(调色板数据块)、IDAT(图像数据块)、IEND(图像结束数据块)四个标准数据块和一些辅助数据块组成。
每个数据块由Length(数据块长度)、Chunk Type Code(数据块类型码)、Chunk Data(数据块数据)和CRC(循环冗余校验码)四部分组成。
例:
CRC(cyclic redundancy check)域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的。CRC详细算法定义在ISO 3309和ITU-T V.42中,其值按CRC32算法进行计算。
**如果修改了图片的宽高,没有修改CRC编码,那么可以通过计算发现CRC编码不一致。010 editor在打开图片时会检查CRC校验码,如果有问题会提醒。**可利用python脚本爆破(CTF>picture_crc.py)
1、IDHR文件头数据块
文件头数据块包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。
数据块中的Chunk Data由13个字节构成:
2、调色板数据块
它包含有与索引彩色图像((indexed-color image))相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。真彩色的PNG数据流也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。结构如下:
3、IDAT数据块
它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。
IDAT存放着图像真正的数据信息,因此,如果能够了解IDAT的结构,我们就可以很方便的生成PNG图像。
4、IEND数据块
它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。
如果我们仔细观察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。 ^96ae22
最后,除了表示数据块开始的IHDR必须放在最前面, 表示PNG文件结束的IEND数据块放在最后面之外,其他数据块的存放顺序没有限制。
五、其他辅助数据块(了解即可)
PNG文件格式规范制定的10个辅助数据块是:
- 背景颜色数据块bKGD(background color)。
- 基色和白色度数据块cHRM(primary chromaticities and white point)。所谓白色度是指当R=G=B=最大值时在显示器上产生的白色度。
- 图像γ数据块gAMA(image gamma)。
- 图像直方图数据块hIST(image histogram)。
- 物理像素尺寸数据块pHYs(physical pixel dimensions)。
- 样本有效位数据块sBIT(significant bits)。
- 文本信息数据块tEXt(textual data)。 ^cef1ca
- 图像最后修改时间数据块tIME (image last-modification time)。
- 图像透明数据块tRNS (transparency)。
- 压缩文本数据块zTXt (compressed textual data)。
六、动态png——APNG
APNG(Animated Portable Network Graphics)是一个基于PNG(Portable Network Graphics)的位图动画格式,扩展方法类似主要用于网页的GIF 89a,仍对传统PNG保留向下兼容。第1帧是标准的单幅PNG图像,因此只支持原版PNG的软件能正常显示第1帧。剩余的动画帧和帧速数据储存在符合原版PNG标准的扩展数据块里。 APNG与Mozilla社区关系密切,格式标准文档就放在Mozilla网站。