首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >一道图片隐写题引发的思考

一道图片隐写题引发的思考

作者头像
回天
发布2023-04-25 15:24:03
发布2023-04-25 15:24:03
6680
举报
文章被收录于专栏:Ga1@xy's W0r1dGa1@xy's W0r1d

一切的一切,都要从这道题说起……

题源ctf.show:https://ctf.show/challenges#stega12

下载附件,只有一张图片,后缀为png格式,用010editor查看并不能找到什么由出题人写入的额外的信息,而常见的png隐写方式zstegLSB,经过我的各种尝试,也无法解出任何信息,一时间想不到该怎么解这道题,在网上也查不到有关该题的wp,于是我点开了solved列表,刚好在里面发现了一个熟悉的名字

于是我便向或或大师询问此题,在大师一番回想后,灵光乍现,告诉我把图片拖进chrome浏览器就可以看到flag,于是我把图拖了进去

真是非常的amazing啊!flag一下就从图片中出现了!正当我在想为什么的时候,或或大师又告诉我:apng文件……

--------------------------------------------------------------(我是正文分割线)----------------------------------------------------------------

什么是apng文件

摘自维基百科APNGAnimated Portable Network Graphics格式PNG位图动画扩展,但未获PNG组织官方认可。其扩展方法类似GIF 89a,仍对原版PNG保持向下兼容。APNG第1帧为标准PNG图像,剩余的动画和帧速等数据放在PNG扩展数据块,因此只支持原版PNG的软件会正确显示第1帧。APNG与Mozilla社区关系密切,格式标准文档设在Mozilla网站。

用简单的话来概括上面的内容,APNG就是一种动图形式(可以动)的PNG文件,和GIF文件类似。

这种格式文件的出现,其实是为了代替GIF,但是在当时,由于缺乏浏览器对此种格式文件的支持(主要原因),导致这种文件最终没有像GIF一样被普及,当然现在已经有很多浏览器支持浏览这种文件,比如Chrome、Firefox、Safari等,这也是我们用Chrome浏览器打开图片可以看到flag的原因

结合本题谈一谈

apng文件可以向下兼容为png,如果在不支持apng浏览的图片浏览器上查看apng文件,就会把它当成png来查看,并且只会显示动图的第一帧,所以我们直接查看本题的图片无法看到flag,因为含有flag的图片并不是第一帧

只从表面来看,我们无法直接看出apng与png到底有什么差别,所以我们来看一看两种文件的组成

apng与png文件组成对比

png的组成

首先我们简单了解一下png文件构成,正常的png由文件署名块及数据块(chunk)组成,数据块又分为关键数据块(critical chunk)及辅助数据块(ancillary chunks),辅助数据块我们在此暂且不提,我们只看关键数据块,关键数据块中有四个标准数据块:

  • 文件头数据块IHDR(header chunk)
  • 调色板数据块PLTE(palette chunk)
  • 图像数据块IDAT(image data chunk)
  • 图像结束数据IEND(image trailer chunk)

我们用TweakPNG来查看上面这个比较标准的png图片

可以很清晰地看到四个关键数据块的存在及大小,接下来我们再探讨apng的文件组成

apng的组成

下图中是一个png文件的简要组成(略去了PLTE块)

而apng在png的基础上,引入了三个新的数据块,分别为:acTL(动画数据块)、fcTL(帧控制块)、fdAT(帧数据块),下图是三个独立的png文件组成apng的示意图

  • acTL 块必须在第一个 IDAT 块之前,用于告诉解析器这是一个动画 PNG,包含动画帧总数和循环次数的信息
  • fcTL 块是每帧都必要的,出现在 IDAT 或 fdAT 之前,包含顺序号、宽高、帧位置、延时等信息
  • fdAT 块与 IDAT 块有着相同的结构,除了 fcTL 中的顺序号

从图中可以发现第一帧与后面两帧不同,因为第一帧的apng文件储存的是一个正常的png的IDAT数据块,因此对于不支持apng文件浏览的浏览器或工具,只会显示第一帧而忽略后面几帧的动画,这也是apng可以向下兼容为png的原因。

结合本题所给的图,用010editor来查看几个关键字,可以分别在4Bh、530Ah两个位置找到fcTL,在5330h、D340h两个位置找到fdAT,用TweakPNG查看也可以清晰地看到

和上面png的图作对比,也可以发现多出了很多png不具有的块

但是从我看来,这道题的apng还有些问题,我们可以从上图中看到只有两个fcTL块,也就是说理论上来讲应该只有一个fdAT块,所以我认为最后一个fdAT块是多余的,应该不会被识别到,我使用工具将本题的apng转换成了gif,得到的gif只有两帧,也证明了我刚提到的观点(大概2333)

总结

一道看似简单的隐写题引出了如此大的学问,要不是这道题,我可能到很久之后还不会了解到有apng这种文件,也更不会想到有这种隐写方式,这道题给我提供了很好的做题以及出题思路,以后做有关png的隐写,可以遇事不决就拖进浏览器看一看了2333

参考文章

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是apng文件
  • 结合本题谈一谈
  • apng与png文件组成对比
    • png的组成
    • apng的组成
  • 总结
  • 参考文章
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档