当前位置: 首页 > news >正文

攻防世界-happy_puzzle

⭕、知识点

1、PNG文件结构深入理解
2、脚本编写

一、题目

image

二、解题

1、观察属性,日期全部相同,都是data结尾

2、打开info.txt,提示如下
image

3、应该是要构造400x400的图片,常用的图片有png、jpg

但是根据题目的数据,多个一样大的data文件不太可能是jpg图片的数据,因为jpg图片数据相关性高,极难拆分,而且没有哈夫曼表无法恢复jpg图片。因此推测应该是要恢复成png图片

image

这里的5kb可以推断是最后一个idat段

4、png图片格式的理解

png图片格式有四个部分是必须的:

  • 前8字节魔术字:89 50 4E 47 0D 0A 1A 0A 这是PNG图片固定
  • IHDR段:包含图片的宽高、位深度、色域、扫描模式等信息
  • IDAT段若干:真正的图片数据(题目的.data就是这里的idat段的数据)
  • IEND段:文件结束标志

5、上脚本

import binasciihead = "89 50 4E 47 0D 0A 1A 0A"
tail = "00 00 00 00 49 45 4E 44 AE 42 60 82"
idat = "49 44 41 54"def create_png_head():with open("flag.png", "wb") as f:f.write(binascii.unhexlify("".join(head.split(" "))))def create_png_ihdr():ihdr = binascii.unhexlify("".join("49 48 44 52".split(" ")))height=400wight = 400bits = 8color_space_type = 2compare_methon = 0filter_method = 0interface_method =0data = b""data+=wight.to_bytes(4, "big")data+=height.to_bytes(4, "big")data+=bits.to_bytes(1, "big")data+=color_space_type.to_bytes(1, "big")data+=compare_methon.to_bytes(1, "big")data+=filter_method.to_bytes(1, "big")data+=interface_method.to_bytes(1, "big")crc = binascii.crc32(ihdr+data).to_bytes(4, "big")with open("flag.png","ab") as f:f.write(len(data).to_bytes(4, "big"))f.write(ihdr+data+crc)def create_png_tail():with open("flag.png", "ab") as f:f.write(binascii.unhexlify("".join(tail.split(" "))))def read_and_create_png_idat(path):idat = binascii.unhexlify("".join("49 44 41 54".split(" ")))with open(path, "rb") as f:data = f.read()length = len(data).to_bytes(4,"big")crc = binascii.crc32(idat+data).to_bytes(4, "big")with open("flag.png","ab") as f:f.write(length+idat+data+crc)def create_png():create_png_head()create_png_ihdr()for file_path in ["./puzzle/yvxmeawg.data", "./puzzle/rnydeiho.data", "./puzzle/uozjmdnl.data","./puzzle/fhnkotmb.data","./puzzle/jlxphwfm.data", "./puzzle/yscijlzx.data", "./puzzle/ciaoxptf.data","./puzzle/blczioav.data","./puzzle/jtxsbevz.data", "./puzzle/lstjobzi.data", "./puzzle/pyusgabf.data","./puzzle/wgkapjbh.data","./puzzle/xufbyndk.data", "./puzzle/csizrgxn.data", "./puzzle/oaeqnubi.data","./puzzle/gpiuezjw.data","./puzzle/tihzkoyu.data", "./puzzle/hbctmwqj.data", "./puzzle/ycqzmbrw.data","./puzzle/fkjhepcs.data","./puzzle/kczwtlrd.data", "./puzzle/dwelszrk.data", "./puzzle/uilqywot.data","./puzzle/xufnmacj.data","./puzzle/jrbiznkl.data", "./puzzle/mrxtfkzj.data"]:read_and_create_png_idat(file_path)create_png_tail()if __name__ == "__main__":create_png()

每一层的顺序是试出来的,如果前面的idat层拼对了,图片就会加载出对应层
image

6、得到flag
image

三、答案

unctf{312bbd92c1b291e1827ba519326b6688}

攻防世界答案设置错了:unctf{312bbd92c1b891e1827ba519326b6688}

四、总结

为此专门重温并深入学习了一下png图片文件的结构格式

http://www.jsqmd.com/news/358908/

相关文章:

  • 招聘:AI工程师 vs. 数据工程师
  • 用OpenClaw组建你的创业团队
  • 2二、u-boot移植 - 指南
  • 从概念到代码:4A架构(业务架构、数据架构、应用架构、手艺架构)全景落地指南
  • File.prototype.stream() 和 ReadableStream.getReader()的浏览器兼容性如何?
  • 【YOLOv10多模态创新改进】联合Mamba创新首发| SCI 一 2025| 引入CMFM 跨模态特征融合Mamba模块,实现 RGB与红外等多模态特征的高效融合,含多种创新改进,顶会顶刊发文热点
  • 2月8号
  • 聚焦墙面基底需求,严选山西靠谱腻子粉 - 速递信息
  • 移动端h5路由过渡动画实现教程
  • Error creating bean with name ‘ragController‘: Injection of resource dependencies failed
  • Doris并发控制机制:高并发查询的应对策略
  • 6343456345
  • 45545634
  • USACO历年黄金组真题解析 | 2003年3月
  • 2026 外卖省钱首选美团外卖 50 + 品牌大额券加持完胜其他平台 - Top品牌推荐
  • USACO历年黄金组真题解析 | 2003年11月
  • 2026年麒麟大口茶、益禾堂等12大品牌在哪点更便宜?美团更便宜!6.9元起+半价周末+春节专属福利,下单路径一文看懂 - Top品牌推荐
  • 2026年麒麟大口茶美团多重福利狂欢!6.9元起薅羊毛,认准美团点单更便宜 - Top品牌推荐
  • 效果-Stardust粒子
  • 学习进度 23
  • HBase集群部署指南:高可用大数据存储方案
  • 明星同款外卖点单攻略出炉!郭麒麟/陈赫/鹿晗/张元英同款,美团点单最划算+营销活动路径详解 - Top品牌推荐
  • 麦当劳怎么点才更便宜?美团外卖“半价周末”等系列活动帮你省钱攻略 - Top品牌推荐
  • WordPress中if语句判断字段是否存在并输出内容
  • 明星同款外卖点单攻略:美团外卖最划算,多重福利+清晰路径解锁同款美味 - Top品牌推荐
  • [英语基础]形容词/副词
  • embedding模型对比分析——paraphrase-multilingual-MiniLM-L12-v2与bge-embedding
  • 注册中心宕机后,RPC调用还能成功吗?主流框架实测级分析
  • 明星同款外卖点单攻略:美团外卖解锁最划算路径,多重福利叠加更省钱 - Top品牌推荐
  • GitHub Pages 技术文档站点搭建实践指南