import random
from secret import flag
key = [random.randint(1, 256) for _ in range(len(flag))]
xorban = []
enc = []
for i, v in enumerate(key):
k = 1
for j in range(i, 0, -1):
k ^= key[j]
xorban.append(k)
enc.append(flag[i] ^ v)
with open("output.txt", "w") as f:
f.write(f"{xorban=}\n")
f.write(f"{enc=}\n")
Pada soal ini, basicnya adalah xor. Kita hanya perlu memahami hubungan antara xorban dengan plaintext. Setelah melakukan eksplorasi, saya menemukan fakta berikut (angka di bawah tidak ada hubungannya dengan soal, karena saya mencoba menjalankan chall.py sendiri).
Untuk elemen kedua dan seterusnya dari xorban, berlaku bahwa key xor yang digunakan pada index i adalah: xorban[i] ^ xorban [i-1]. Langsung saja, berikut adalah kode solver yang saya gunakan.