1 min read

[CTF GEMA] OU

CTF GEMA Groupe 2025

Niveau de Difficulté : Very-Easy

Catégorie du Challenge : Crypto

Description :
Rappel du XOR:
Commutative: A ⊕ B = B ⊕ A
Associative: A ⊕ (B ⊕ C) = (A ⊕ B) ⊕ C
Identity: A ⊕ 0 = A
Self-Inverse: A ⊕ A = 0
Pouvez-vous retrouvez le FLAG ?
KEY1: 662128ceb95393109aa1c01993e3127cae0f93f869412c468cdcd9f9ce65e28c
KEY2 ^ KEY1: cecd246ac69a3790ca35657d29d26f17a7564688b5de1148d8b7c8804f2b4959
KEY2 ^ KEY3: 8f49e299f2b3e135046887795af63a331f0a64ac25058de793c7301513d7e168
FLAG ^ KEY1 ^ KEY3 ^ KEY2: af248b1030b83d77c1f8633f87257c109535a81c7816e5dc

Steps to Solve

  • On retrouve ici un chiffrement XOR avec un rappel de son fonctionnement, de là nous pouvons créer un script python pour ça résolution :
def xor_bytes(a, b):
    """ Fonction XOR entre deux chaînes de bytes """
    return bytes([x ^ y for x, y in zip(a, b)])

KEY1 = bytes.fromhex('662128ceb95393109aa1c01993e3127cae0f93f869412c468cdcd9f9ce65e28c')
KEY2_xor_KEY1 = bytes.fromhex('cecd246ac69a3790ca35657d29d26f17a7564688b5de1148d8b7c8804f2b4959')
KEY2_xor_KEY3 = bytes.fromhex('8f49e299f2b3e135046887795af63a331f0a64ac25058de793c7301513d7e168')
flag_xor_value = bytes.fromhex('af248b1030b83d77c1f8633f87257c109535a81c7816e5dc')

KEY2 = xor_bytes(KEY2_xor_KEY1, KEY1)

KEY3 = xor_bytes(KEY2_xor_KEY3, KEY2)

FLAG = xor_bytes(xor_bytes(xor_bytes(flag_xor_value, KEY1), KEY3), KEY2)

print(f"KEY2: {KEY2.hex()}")
print(f"KEY3: {KEY3.hex()}")
print(f"FLAG: {FLAG.decode()}")

FLAG{XOR_1$_N0T_$0_H4RD}