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

攻防世界-glance-50-WriteUp附Python解题脚本

文章目录

        • 题目分析
        • 解题步骤
        • 题目解题脚本分析
        • 总结
题目分析

拿到题目以后题目是一个长条状gif


那么这个题大概率就是分离gif的每一帧然后拼接形成图片得到flag

解题步骤

有了思路以后,步骤也很清晰。就是两步。第一步,分离gif,第二步,拼接gif

  • 步骤

1.分离gif
好多方法都可以分离gif,这里使用python分离一下,上代码:

#分离gif.pyfromPILimportImage savepath="F:\ctf文件\\D-R0s1\\"#保存路径im=Image.open('F:\ctf文件\\1.gif')#从文件加载图像try:im.save(savepath+'{:d}.png'.format(im.tell()))#读取每一帧whileTrue:im.seek(im.tell()+1)#在不同帧之间移动im.save(savepath+'{:d}.png'.format(im.tell()))#保存文件except:pass

分离出来发现有两百多个图像
2.使用python将这两百多个图像拼接起来,上代码:

#拼接图像.pyfromPILimportImage path="F:\\ctf文件\\D-R0s1\\"save_path='F:\\ctf文件\\'im=Image.new('RGBA',(2*201,600))#创建新照片imagefile=[]#存储所有的图像的名称width=0foriinrange(0,201):imagefile.append(Image.open(path+str(i)+'.png'))#遍历,将图像名称存入imagfileforimageinimagefile:im.paste(image,(width,0,2+width,600))#将图片张贴到另一张图片上width=width+2im.save(save_path+'D-R0s1.png')im.show()

拼接后结果

得到flag

题目解题脚本分析

拼接图像.py

  • 第一部分
im=Image.new('RGBA',(2*201,600))#创建新照片

根据图像原来的宽度高度创建一个新图像

  • 第二部分
imagefile=[]#存储所有的图像的名称width=0foriinrange(0,201):imagefile.append(Image.open(path+str(i)+'.png'))#遍历,将图像名称存入imagfile

在文件目录下遍历图像并将图像名称存入inagefile中

  • 第三部分
forimageinimagefile:im.paste(image,(width,0,2+width,600))#将图片张贴到另一张图片上width=width+2

此处需要特别重要的是im.paste()中的值,(width,0,2+width,600)这是图像的一组坐标值。相当于(x1,y1,x2,y2),对应坐标图为:
这样一来这个坐标值就很容易理解了(width,0,2+width,600)
宽度就是2每次加2这样叠加起来,高度就是0-600。图片原始属性的高度。
这样就实现了循环粘贴的目的。

总结

切实提高自己的编码能力,让程序代替搬砖。
关于python脚本处理图片隐写可以参考一下yanzm师傅在i春秋的文章。

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

相关文章:

  • TPIC7710EVM评估板在汽车电子驻车制动系统开发中的实战应用
  • 历史心学数字化:代数系统与可视化技术解析
  • 3 连接mysql 数据库 进行数据的存储和读取
  • 计算机毕业设计之《学生手册》线上考试系统设计与实现
  • 2026年7月荔城区三类防水痛点解析 莆田正规漏水检测维修商家 - 吉林同城获客
  • Flume工具
  • Hermes Agent 入门到深入:会学习的开源 AI Agent 是怎么工作的
  • 智能电视的浏览器革命:TV Bro如何重新定义大屏上网体验
  • 2026吉他选购实测攻略|500-3000元档位拆解,学生党直接抄作业
  • 浏览器端模型推理:ONNX Runtime Web 与 WebGPU 后端
  • Java集合面试题专题
  • NBM7100A芯片与PIC18F微控制器优化IoT设备电池续航
  • 快速找回QQ空间全部历史说说的终极免费工具GetQzonehistory使用指南
  • 时间序列反事实必要性解释:TimePNS框架原理与实战应用
  • C语言—求出现次数超过数组长度一半的数
  • AI+iPaaS解决方案:跨系统业务流程自动化助力企业AI化转型
  • Wayfinder Router:AI应用成本与性能优化的智能路由解决方案
  • Ollama 部署的十个生产环境陷阱:显存不足、并发雪崩与模型版本混乱
  • 2026尤克里里选购指南|告别5大误区,4款高性价比机型实测推荐
  • 如何用MemcardRex终极PS1记忆卡编辑器轻松管理你的经典游戏存档
  • 3个真实场景告诉你:为什么Umi-OCR是处理大量图片文字的神器
  • 2026聊城化妆美甲美睫学校3家精选推荐,影视美妆首选创影 - 速递信息
  • AngularJS通过$sce输出html的方法
  • 最大连续子串
  • PreparedStatement的jdbc相关操作
  • 高效、免费、开源:GetQzonehistory让QQ空间历史说说备份变得简单
  • C++ noexcept关键字:从移动语义到容器性能优化的核心机制
  • 创世战车10K战力装配指南:从部件协同到实战优化
  • 想找优质专利轨道插座生产厂家?这些实用挑选技巧看完再也不踩坑
  • Cloudflare D1免费额度解析与优化技巧