一个关于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隐写的理解