前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一道少见的与zlib块相关的题

记一道少见的与zlib块相关的题

作者头像
回天
发布2023-04-25 14:19:42
3610
发布2023-04-25 14:19:42
举报
文章被收录于专栏:Ga1@xy's W0r1dGa1@xy's W0r1d

通过这道题可以加深对png结构的了解,相关考点在国内很少见,是很不错的一道题 ~

SuSeC CTF perceptron

附件链接:https://pan.baidu.com/s/1oyXUbwRP0EFALdR6A-ZWjA 提取码:vurw

题目描述

代码语言:javascript
复制
Simulating the human brain is currently impossible, but perceptron is trying to do that!

Hint 1:There are many same sizes IDAT chunks in perceptron, are all of them necessary?

Hint 2:There are other PNGs too. Try to recover them.

题目详解

下载附件得到一张png图片,按照惯例先分析图片,用zsteg分析

可以发现zlib区块,当我们用zsteg分析正常的图片的时候,是不会得到这个信息的(如下图)

由此说明题中所给的图片有一些问题

再用010editor查看图片的信息,我们查找789C,可以发现在这个图片中存在三个789C

先来补充一下相关的知识(感谢夏风师傅的指点):

  • IDAT块是储存图像数据的块,在这个块中存放在图像真正的数据信息,也就是说没有它就看不到图像
  • 完整的图像数据由一个单独的zlib datastream表示,它储存在一个IDAT块中
  • 一个png文件中无论有多少个IDAT区块,在IDAT块中只会出现一个zlib
  • 789C在png文件中为zlib的标志位
  • 一个zlib数据块只有一个标志位,即只会出现一次789C

到这里就会发现问题了,在这个png文件中有三个789C,也就是说在这个图片中还隐藏着另外两张图片的信息

由于IDAT中出现多个zlib块时只会识别第一个,所以我们尝试将第一个zlib块删去,使其识别第二个块

删去从29h3047h的第一个zlib部分,观察得到的图片效果

出现这种情况我们考虑是否图片的宽高出现了问题,用FzWjScJ师傅的脚本爆破一下,将宽高有可能的图片全部生成(此处建议在一个单独的文件夹中跑程序,因为会生成很多图片……)

代码语言:javascript
复制
#python3
import binascii
from Crypto.Util import number
p = open('2.png','rb').read()
# print(p[0x14:0x17]+chr(0xaf).encode()[-1:])
count = 0
for a in range(0x00,0xff):
    data = p[:0x12] + chr(0x04).encode() + chr(a).encode()[-1:] + p[0x14:0x16] + chr(0x00).encode() + chr(0xa0).encode()[-1:]
    # print(binascii.crc32(data))
    p2 = p[:0x12] + chr(0x04).encode() + chr(a).encode()[-1:] + p[0x14:0x16] + chr(0x00).encode() + chr(0xa0).encode()[-1:] + p[0x18:0x1d] + number.long_to_bytes(binascii.crc32(data)&0xffffffff) + p[0x21:]
    p1 = open(str(count)+'.png','wb')
    count += 1
    p1.write(p2)
    p1.close()

这里的宽高并非是图片本身的宽高,如果校验CRC32你会发现宽高是错误的,图片的核心数据部分是IDAT,这里我们只是借用了png的其他区块让图片显示而已。

当分辨率为1132x160时可以成功看到图片

当然这并不是flag,但是证明了我们方法没有问题,下面我们再用同样的方法处理第三个zlib

当分辨率为1084x160时得到第二个图片

而真正的flag就是这个图片的内容:SUSEC{7he_r3aL_flag_iZ_tH15}

总结

想要做出这道题,需要对png文件结构有一定的了解,而这道题也可以帮助我们更好的了解png的结构,了解这种比较少见的png图片隐写方式,总的来说是一道非常不错的题!

这个比赛的另一道misc题也很不错,想要了解的话可以戳这里~

参考文章

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SuSeC CTF perceptron
    • 题目描述
      • 题目详解
        • 总结
          • 参考文章
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档