xctf攻防世界 MISC高手进阶区 glance-50

1. 进入环境,下载附件

打开发现是一个细长又不粗的细线,特么的啥都看不清,放入photoshop中放大看看,如图:
在这里插入图片描述
我们尝试挪动四个帧,看看有啥变化,如图:在这里插入图片描述

2. 问题分析

可以看到这些帧可以合成一张图,那么图中肯定暗含玄机,我们应该想办法搞到合成图,让每一帧图片组合起来,直接上代码:

from PIL import Image
import os


def get_gif_frame(gif_location):
    """
    将gif每一帧抽取出来
    :param gif_location: gif的文件路径
    :return: PIL图像对象和current指针
    """
    im = Image.open(gif_location)
    while True:
        current = im.tell()
        im.save('prtemp/res/' + str(current) + '.png')
        # 为什么-1,是放置文件指针便利到最后一个,+1后空对象
        if current < im.n_frames - 1:
            im.seek(current + 1)
        else:
            break
    return im, current


def image_compose(im, current):
    """
    将每一帧图片组合,得到最终的图片
    :param im: PIL图像对象
    :param current: current指针,为了确定画布的宽度
    :return: 得到最终合成图
    """
    to_image = Image.new('RGB', (im.size[0] * current, im.size[1]))  # 创建一个新图
    # 循环遍历,把每张图片按顺序粘贴到对应位置上
    flag = 0
    for name in img_list:
        ph = Image.open('./prtemp/res/' + name)
        to_image.paste(ph, (flag, 0))
        flag += im.size[0]
    return to_image.save('./prtemp/result.png')  # 保存新图


im, current = get_gif_frame("prtemp/9266eadf353d4ada94ededaeb96d0c50.gif")

# 得到图片的文件序,防止粘贴图片时候拼错
img_list = os.listdir('./prtemp/res')
img_list.sort(key=lambda x: int(x[:-4]))  # 得到帧文件的文件顺序

image_compose(im, current)

执行完函数后,结果如图:
在这里插入图片描述
最终的答案为:TWCTF{Bliss by Charles O’Rear}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

l8947943

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值