一个关于png结构的题目
一、题目
一张打不开的png文件,唉。

二、解题思路

少了头,就给他加上。我比较笨,还是萌新,采用导出16进制,添加后,010editor导入16进制。

添加之后,顺眼多了。然后用png模板扫一下看看有没有大的错误。

两个校验值错误,也进行相应的修改~~

这一版的文件还是打不开~(前几版增加了头、修改两个校验值)说明还有错误,于是我们把目光移向右下角的

| PNG文件格式中的数据块 | ||||
| 数据块符号 | 数据块名称 | 多数据块 | 可选否 | 位置限制 |
| IHDR | 文件头数据块 | 否 | 否 | 第一块 |
| cHRM | 基色和白色点数据块 | 否 | 是 | 在PLTE和IDAT之前 |
| gAMA | 图像γ数据块 | 否 | 是 | 在PLTE和IDAT之前 |
| sBIT | 样本有效位数据块 | 否 | 是 | 在PLTE和IDAT之前 |
| PLTE | 调色板数据块 | 否 | 是 | 在IDAT之前 |
| bKGD | 背景颜色数据块 | 否 | 是 | 在PLTE之后IDAT之前 |
| hIST | 图像直方图数据块 | 否 | 是 | 在PLTE之后IDAT之前 |
| tRNS | 图像透明数据块 | 否 | 是 | 在PLTE之后IDAT之前 |
| oFFs | (专用公共数据块) | 否 | 是 | 在IDAT之前 |
| pHYs | 物理像素尺寸数据块 | 否 | 是 | 在IDAT之前 |
| sCAL | (专用公共数据块) | 否 | 是 | 在IDAT之前 |
| IDAT | 图像数据块 | 是 | 否 | 与其他IDAT连续 |
| tIME | 图像最后修改时间数据块 | 否 | 是 | 无限制 |
| tEXt | 文本信息数据块 | 是 | 是 | 无限制 |
| zTXt | 压缩文本数据块 | 是 | 是 | 无限制 |
| fRAc | (专用公共数据块) | 是 | 是 | 无限制 |
| gIFg | (专用公共数据块) | 是 | 是 | 无限制 |
| gIFt | (专用公共数据块) | 是 | 是 | 无限制 |
| gIFx | (专用公共数据块) | 是 | 是 | 无限制 |
| IEND | 图像结束数据 | 否 | 否 | 最后一个数据块 |
是的:没有符号为EASY的块!!反而缺少了IDAT图像数据块!!
于是我们找到EASY在源码中的位置,修改。可以通过右下角变量窗口,选中EASY,对应的源码会高亮。然后覆写成IDAT对应的16进制值即可,至于IDAT对应的16进制值,可以找一张正确的png图片对照。

然后保存为png图片,即可看到:
照常看了lsb、zsteg、foremost、binwalk、stegsolve等,没发现异常,猜测图片高度隐写,类似的题目可以看这一篇【2023 雷泽杯 · Misc】我是签到题_Mr_Fmnwon的博客-CSDN博客
于使就通过010editor修改源码中高度的部分,一个大力,就显露了flag
在过程中,修改源码,勿忘校验值也要修改哦!
总结
这题是png隐写基础方法的集成者,加深了对png隐写的理解



















