[CTF-Misc攻防世界]碎纸机11

发布时间:2024年01月15日

我们从碎纸机里抢救回来了某个关键图片资料,你能帮我们修复它吗?

1.这是一个很经典的图片拼接题,我们写个脚本放文件夹里面跑一下就可以了

?

2.下面有一个脚本需要装这两个库,不然会报错

(.venv) PS D:\Study\Code\python3\LuistinTools> pip install pandaspip install pandas

(.venv) PS D:\Study\Code\python3\LuistinTools> pip install Pillow

3.python代码

import glob
import PIL.Image as Image
import os
import pandas as pd
def list_file():
? ? fileList = []
? ? #for fileName in glob.glob("*.png",key=os.path.getmtime):
? ? ? ? ? # fileList.append(fileName)
? ? fileList=sorted(glob.glob("*.png"),key=os.path.getmtime)
? ? return (fileList)
def image_compose():
? ? to_image = Image.new('RGB', (IMAGE_COLUMN * IMAGE_SIZE, IMAGE_ROW * IMAGE_SIZE)) ?# 创建一个新图
? ? # 循环遍历,把每张图片按顺序粘贴到对应位置上
? ? for y in range(1, IMAGE_ROW + 1):
? ? ? ? for x in range(1, IMAGE_COLUMN + 1):
? ? ? ? ? ? from_image = Image.open(IMAGES_PATH + image_names[IMAGE_COLUMN * (y - 1) + x - 1]).resize(
? ? ? ? ? ? ? ? (IMAGE_SIZE, IMAGE_SIZE), Image.ANTIALIAS)
? ? ? ? ? ? to_image.paste(from_image, ((x - 1) * IMAGE_SIZE, (y - 1) * IMAGE_SIZE))
? ? return to_image.save(IMAGE_SAVE_PATH) ?# 保存新图
def combin(imgs):
? ? img0=Image.open(imgs[0])
? ? width = img0.width ? ? ? #图片的宽
? ? height = img0.height
? ? size=(width*len(imgs),height)#图片的高
? ? saveimg= Image.new("RGB",size)

? ? #saveimg.save('test.png')
? ? savepix=saveimg.load()
? ? for i in range(len(imgs)):
? ? ? ? img=Image.open(imgs[i])
? ? ? ? imgSize = img.size
? ? ? ? width = img.width ? ? ? #图片的宽
? ? ? ? height = img.height ? ? ?#图片的高
? ? ? ? #print(w, h, f)
? ? ? ? img=img.convert("RGB")
? ? ? ? for x in range(width):
? ? ? ? ? ? for y in range(height):

? ? ? ? ? ? ? ? data=(img.getpixel((x,y)))
? ? ? ? ? ? ? ? #print(data)
? ? ? ? ? ? ? ? saveimg.putpixel(((x+i*width),y),data)
? ? saveimg.show()
? ? saveimg.save('test.png')
def savepix():
? ? with open ('2.txt')as f :
? ? ? ? im=f.read()
? ? imgs=im.split()
? ? img0=Image.open(imgs[0])
? ? imgSize = img0.size
? ? data0={}
? ? width = img0.width ? ? ? #图片的宽
? ? height = img0.height
? ? print(width ,height)
? ? for i in range(len(imgs)):
? ? ? ? img=Image.open(imgs[i])
? ? ? ? #img=img.convert("RGB")
? ? ? ? print(imgs[i])
? ? ? ? data0[imgs[i]]=[]
? ? ? ? for x in range(1):
? ? ? ? ? ? for y in range(height):
? ? ? ? ? ? ? ? data=img.getpixel((x,y))
? ? ? ? ? ? ? ? try:
? ? ? ? ? ? ? ? ? ? data=data-data0[imgs[0]][y]
? ? ? ? ? ? ? ? except:
? ? ? ? ? ? ? ? ? ? pass
? ? ? ? ? ? ? ? data0[imgs[i]].append(data)
? ? ? ? data0[imgs[i]+"2"]=[]
? ? ? ? for x in range(img.width-1,img.width):
? ? ? ? ? ? for y in range(height):
? ? ? ? ? ? ? ? data=img.getpixel((x,y))
? ? ? ? ? ? ? ? data0[imgs[i]+"2"].append(data)
? ? s=pd.DataFrame(data0)
? ? s.to_csv(f"save2.csv",encoding="utf_8_sig")
if __name__=="__main__":
? ? imgs=list_file()
? ? combin(imgs)

4.在文件夹打开cmd,运行这个python

4.得到图片

5.发现QR直接扫不出来

6.可能是因为太暗了,二维码一般都是很清楚的,太暗导致扫描不出来,所以我们设置一下这张图片的亮度和对比度,亮度最亮,对比度最低

7.一定要用区域解码,其他的不太可能会出flag

flag{You Can Repair A Picture From Splices Baesd On Entropy}:

文章来源:https://blog.csdn.net/qq_33864392/article/details/135565656
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。