BaseCTF Week3 Web & Misc 解题复盘
杂项
[Week3] 白丝上的 flag
描述: 某出题人赠送大家 flag 时遭遇了信号干扰,幸好我们在不知名小网站找到了写入 flag 前的图片,尝试还原信息吧!
提示: flag 是单色。
附件:
分析思路:
这道题的核心在于逆向题目给出的混淆逻辑。confuse 函数对像素的 RGBA 值进行了基于全局变量 iv 的加法运算,且每处理一个像素都会更新 iv。由于图像是单色的,我们可以利用这一特性简化验证过程。
原始加密脚本如下:
from PIL import Image
from random import randint
import sys
def ez_add(a, b, c, d):
global iv
h = (a + b + c + d + iv) % 256
e = b
f = c
g = d
iv = (b + c + d + iv) % 256
return e, f, g, h
def confuse(data):
r, g, b, a = data
for _ in range(8):
r, g, b, a = ez_add(r, g, b, a)
return r, g, b, a
def confuse_image(flag):
global iv
iv = flag.getpixel((1, 1))[0]
img = Image.new('RGBA', (flag.width, flag.height))
for w in range(img.width):
h (img.height):
img.putpixel((w, h), confuse(flag.getpixel((w, h))))
img
__name__ == :
iv =
flag = Image.()
img = confuse_image(flag)
img.save()


