您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 DiGiToTo 于 2022-4-27 17:03 编辑
解答某水友的悬赏。https://www.element3ds.com/forum.php?mod=viewthread&tid=438328
以上面这张图为例,用ultraEdit打开。
显示这张图的16进制数据。
89 50 4E 47 0D 0A 1A 0A 前8个字节为图片格式:png
紧接着是描述图像的基本信息(IHDR)
00 00 00 0D 说明IHDR头块长为13(0D转换为10进制为13) 49 48 44 52是IHDR标识码,固定格式,不改变。加解密时可以查找这个数据快速定位基本信息。 接着的13个字节,保存图片基本信息。 最后接4个字节校验码(D7 30 C0 F8),校验码会随前面的数据的改变而改变,但长度不变。
上图中,保存图片基本信息的13个字节:00 00 04 00 00 00 05 23 08 02 00 00 00 其中: 00 00 04 00 图像宽度 1024 00 00 05 23 图像长度 1315 08 色深 2^8 256色图片 02 颜色类型 真色彩图片 00 PNG Spec规定此处总为0(非0值为将来使用更好的压缩方法预留),表示使用压缩方法(LZ77派生算法) 00 同上 00 非隔行扫描 可以根据IHDR标识码来定位上面的数据,修改。
这个是上面说过的从00 00 00 0D 到D7 30 C0 F8这个数据块。
校验码后面接辅助数据块和专用公共数据块,比较杂,不一定都有。出现的话应该都有标识码,可以根据标识码快速定位。
上图接的是pHYs物理像素尺寸数据块。下面这张图含有sRGB,gAMA等数据。这些数据也可以加密。可以根据画圈的部分模糊判断该段都有些什么数据块,根据标识码迅速定位。
PNG文件格式规范制定的10个辅助数据块是: 1. 背景颜色数据块bKGD(background color)。 2. 基色和白色度数据块cHRM(primary chromaticities and white point)。所谓白色度是指当R=G=B=最大值时在显示器上产生的白色度。 3. 图像γ数据块gAMA(image gamma)。 4. 图像直方图数据块hIST(image histogram)。 5. 物理像素尺寸数据块pHYs(physical pixel dimensions)。 6. 样本有效位数据块sBIT(significant bits)。 7. 文本信息数据块tEXt(textual data)。 8. 图像最后修改时间数据块tIME (image last-modification time)。 9. 图像透明数据块tRNS (transparency)。 压缩文本数据块zTXt (compressed textual data)。 这些数据也可以加密
关键数据块、辅助数据块和专用公共数据块(special-purpose public chunks)综合下表中: tEXt和zTXt数据块中的标准关键字:
然后是DAT: 对比一下两个png图片的数据发现,DAT数据块的标志位在00 00 80 00 49 44 41 54 78。 第三四的是80 00,另一张00 00 FF A5 49 44 41 54 78,第三四字节是FF A5。不同软件生成的图片这个数据可能会发生改变。但都是以49 44 41 54 78 做结尾。
从78之后的地方开始一直到整个文件尾部的结尾标志处的数据都是图片的具体数据。加密的话,一般都是对这一部分的数据进行加密。通过DAT数据块标识可以快速定位这里。
结尾标志00 00 00 00 49 45 4E 44 AE 42 60 82
加解密:使用python或vc 读取图片,查找标志位,修改数据。
|