Pour ce chall, il fallait reconstruire une image à partir d'un fichier donné (numbers.txt) et d'un script python afin de comprendre ce qu'il s'est passé avec ces nombres.
Nous allons directement développer un script afin de reconstruire l'image d'origine :
from PIL import Image
import sys
sys.set_int_max_str_digits(50000)
# Utiliser la clé déduite
key = 9140188724517997073
# Recharger le nombre chiffré
with open("number.txt") as f:
encrypted_number = int(f.read().strip())
# Déchiffrement bloc par bloc
decrypted_number = 0
shift = 0
while encrypted_number:
encrypted_block = encrypted_number & 0xFFFFFFFFFFFFFFFF
decrypted_block = encrypted_block ^ key
decrypted_number |= (decrypted_block << shift)
encrypted_number >>= 64
shift += 64
# Conversion du nombre en binaire, puis en pixels
binary_str = bin(decrypted_number)[2:].zfill(400 * 200) # On connaît les dimensions
pixels = [255 if bit == '1' else 0 for bit in binary_str]
# Création de l'image
image = Image.new('L', (400, 200))
image.putdata(pixels)
image_path = "decrypted_flag.png"
image.save(image_path)
image_path
Cela nous reconstruit directement notre image d'origine :