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

题目分析

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

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

解题步骤

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

  • 步骤

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

#分离gif.py
from PIL import Image

savepath = "F:\ctf文件\\D-R0s1\\" #保存路径

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

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

#拼接图像.py
from PIL import Image
path = "F:\\ctf文件\\D-R0s1\\"
save_path = 'F:\\ctf文件\\'

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

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

for image in imagefile:
    im.paste(image,(width,0,2+width,600)) #将图片张贴到另一张图片上
    width = width +2
im.save(save_path+'D-R0s1.png')
im.show()

拼接后结果
在这里插入图片描述
得到flag

题目解题脚本分析

拼接图像.py

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

根据图像原来的宽度高度创建一个新图像
在这里插入图片描述

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

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

  • 第三部分
for image in imagefile:
    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春秋的文章

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值