enc_path = "flag_enc"
out_path = "flag.png"
print(f"Чтение файла: {enc_path}")
data = open(enc_path, "rb").read()
key = data[:16]

# В начале файла программа случайно пишет 256 байт одного и того же ключевого блока.
# Поэтому дальше достаточно просто делать XOR с этими 16 байтами по кругу.
enc_png = data[256:]
dec_png = bytes(enc_png[i] ^ key[i % 16] for i in range(len(enc_png)))

if not dec_png.startswith(b"\x89PNG\r\n\x1a\n"):
	raise ValueError("Не получилось восстановить PNG")

# После настоящего PNG в файле идут нули, поэтому обрежем всё после IEND.
end = dec_png.find(b"IEND")
if end == -1:
	raise ValueError("Не найден конец PNG")


out_path = open(out_path, "wb")
out_path.write(dec_png[:end + 8])
print(f"Готово: {out_path}")
