天天看點

xctf攻防世界 MISC高手進階區 glance-50

1. 進入環境,下載下傳附件

打開發現是一個細長又不粗的細線,特麼的啥都看不清,放入photoshop中放大看看,如圖:

xctf攻防世界 MISC高手進階區 glance-50

我們嘗試挪動四個幀,看看有啥變化,如圖:

xctf攻防世界 MISC高手進階區 glance-50

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)      

執行完函數後,結果如圖:

xctf攻防世界 MISC高手進階區 glance-50