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

攻防世界-glance-50-WriteUp附Python解题脚本 文章目录题目分析解题步骤题目解题脚本分析总结题目分析拿到题目以后题目是一个长条状gif那么这个题大概率就是分离gif的每一帧然后拼接形成图片得到flag解题步骤有了思路以后步骤也很清晰。就是两步。第一步分离gif第二步拼接gif步骤1.分离gif好多方法都可以分离gif这里使用python分离一下上代码#分离gif.pyfromPILimportImage savepathF:\ctf文件\\D-R0s1\\#保存路径imImage.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 pathF:\\ctf文件\\D-R0s1\\save_pathF:\\ctf文件\\imImage.new(RGBA,(2*201,600))#创建新照片imagefile[]#存储所有的图像的名称width0foriinrange(0,201):imagefile.append(Image.open(pathstr(i).png))#遍历将图像名称存入imagfileforimageinimagefile:im.paste(image,(width,0,2width,600))#将图片张贴到另一张图片上widthwidth2im.save(save_pathD-R0s1.png)im.show()拼接后结果得到flag题目解题脚本分析拼接图像.py第一部分imImage.new(RGBA,(2*201,600))#创建新照片根据图像原来的宽度高度创建一个新图像第二部分imagefile[]#存储所有的图像的名称width0foriinrange(0,201):imagefile.append(Image.open(pathstr(i).png))#遍历将图像名称存入imagfile在文件目录下遍历图像并将图像名称存入inagefile中第三部分forimageinimagefile:im.paste(image,(width,0,2width,600))#将图片张贴到另一张图片上widthwidth2此处需要特别重要的是im.paste()中的值(width,0,2width,600)这是图像的一组坐标值。相当于(x1,y1,x2,y2)对应坐标图为这样一来这个坐标值就很容易理解了(width,0,2width,600)宽度就是2每次加2这样叠加起来高度就是0-600。图片原始属性的高度。这样就实现了循环粘贴的目的。总结切实提高自己的编码能力让程序代替搬砖。关于python脚本处理图片隐写可以参考一下yanzm师傅在i春秋的文章。