文件是一张PNG格式的图片
首先关于PNG图像文件结构:
PNG文件由一个8字节的文件署名域(HEX: ‘89 50 4E 47 0D 0A 1A 0A’)和按特定结构组织的3个以上的数据块(chunk)组成。
PNG文件标志 PNG数据块 … PNG数据块 PNG定义了两种类型数据块:关键数据块(必需),辅助数据块(可选)。
主要的关键数据块,
IHDR (header chunk),文件头数据块,包含图像基本信息。
PLTE (palette chunk),调色板数据块。
IDAT (image data chunk),图像数据块,存储实际图像数据信息。
IEND (image trailer chunk),图像结束数据,最后一个数据块。
每个数据块具体结构,
- Length, 4字节,指定数据块中数据域的长度。
- Chunk Type Code, 4字节,数据块类型码。
- Chunk Data,可变长度,数据块数据,存储类型码指定的数据。
- CRC,4字节,循环冗余检测,对Chunk Type Code域和Chunk Data域内原有的数据校验得出的校验码。
辅助数据块这里提一个,
- pHYs,物理像素尺寸数据块,指定像素大小或者图像宽高比例。
在WinHex中打开文件,
具体说明如下,
十六进制 | 含义 |
---|---|
89 50 4E 47 0D 0A 1A 0A | PNG 标识 |
00 00 00 0D | IHDR数据块的数据域长度为13字节 |
49 48 44 52 | IHDR标识 |
00 00 01 F4 | 图像宽度,500 pixels |
00 00 01 A4 | 图像高度,420 pixels |
08 06 00 00 00 | (这里忽略不谈) |
CB D6 DF 8A | CRC校验值 |
00 00 00 09 | pHYs数据块的数据域长度为9字节 |
70 48 59 73 | pHYs标识 |
00 00 12 74 | x轴上每单位4724像素 |
00 00 12 74 | y轴上每单位4724像素 |
01 | 单位metre,00表示未定义实际像素大小,只定义了像素显示比例 |
DE 66 1F 78 | CRC校验值 |
对IHDR类型码域和数据域(49 48 44 52 00 00 01 F4 00 00 01 A4 08 06 00 00 00)做CRC-32校验,校验码为’C7 58 D7 7D‘,与CRC校验值 (‘CB D6 DF 8A’) 不符,推测图像宽度或长度被改动。
暴破获得真正的宽与高。
修改值,找出flag。