攻防世界-glance-50-WriteUp附Python解题脚本
📅 2026/7/28 17:01:52
👁️ 阅读次数
📝 编程学习
文章目录
- 题目分析
- 解题步骤
- 题目解题脚本分析
- 总结
题目分析
拿到题目以后题目是一个长条状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春秋的文章。
编程学习
技术分享
实战经验