BaseCTF Week3 Web 与杂项解题复盘
[Week3] 白丝上的 flag
题目描述 出题人在发送 flag 时遭遇信号干扰,好在不知名小网站找到了写入前的图片。提示 flag 为单色图像。
解题思路
附件中的 task.py 展示了混淆逻辑:通过自定义的 ez_add 函数对像素 RGB 值进行循环加法运算。由于是单色图,RGB 分量一致,我们可以逆向推导还原过程。
- 逆向混淆函数:原函数是累加,解密时需做减法并更新 IV(初始向量)。
- 处理单色特性:利用单色图特点简化计算,直接还原像素点。
参考脚本
from PIL import Image
def ez_sub(h, e, f, g):
global iv
# 逆向运算:h - e - f - g - iv
a = (h - e - f - g - iv) % 256
iv = (e + f + g + iv) % 256
return a
def unconfuse(data):
r, g, b, a = data
for _ in range(8):
r = ez_sub(r, g, b, a)
return r, g, b, a
def unconfuse_image(img):
global iv
# 从特定位置获取初始 IV
iv = img.getpixel((1, 1))[0]
flag = Image.new('RGBA', (img.width, img.height))
for w in range(img.width):
for h in range(img.height):
flag.putpixel((w, h), unconfuse(img.getpixel((w, h))))
return flag
if __name__ == :
iv =
img = Image.()
flag = unconfuse_image(img)
flag.save()


