CTFshow萌新赛-千字文

打开靶机

 

 

 下载完成后,为一张二维码图片

 

 

 使用StegSolve 解出隐写图像

 

 

保存后使用PS或其他工具去除白边

 然后使用脚本分割这个图像(25*25)

from PIL import Imageim = Image.open(solved.bmp)id = 0for i in range(0, 25): for j in range(0, 25): box = (25 * i, 25 * j, 25 * (i + 1), 25 * (j + 1)) im.crop(box).resize((500, 500), Image.ANTIALIAS).save(./1/%03d.png % id) id += 1

 

 

 分割完成后使用pyzbar识别二维码信息,并输出

import pyzbar.pyzbar as pyzbarfor i in range(625): # im = Image.open() s = ./1/%03d.png % i print(pyzbar.decode(Image.open(s))[0].data.decode())

 

 成功拿到flag

 

使用后输出很多信息,而且需要两个脚本

我把两个脚本进行了整合

 1 #! /usr/bin/env python3 2 # _*_ coding:utf-8 _*_ 3 import pyzbar.pyzbar as pyzbar 4 from PIL import Image 5  6 def main(): 7  fg() 8 print("图片分割已完成") 9  dq()10 11 def fg():12 #源文件名13 im = Image.open(3.png)14 id = 015 for i in range(0, 25):16 for j in range(0, 25):17 box = (25 * i, 25 * j, 25 * (i + 1), 25 * (j + 1))18 #分割后存储路径和文件名19 im.crop(box).resize((500, 500), Image.ANTIALIAS).save(./1/%03d.png % id)20 id += 121 22 def dq():23 for i in range(625):24 #分割后单个二维码图片路径25 s = ./1/%03d.png % i26 str_image = str(pyzbar.decode(Image.open(s))[0].data.decode())27 if "flag" in str_image:28 print(str_image)29 30 if __name__ == "__main__":31 main()

运行情况

 

相关文章