AAfroCodeurs
Hacker culturelTerminée200 points

Le Collier de la Reine Mère

Imaginée par @ludcoding · 1 résolution(s)

La Reine Mère a confié à son griot un collier d’ébène. Pour le retrouver, il faut d’abord comprendre le langage des racines du baobab. Le griot a laissé deux fichiers. Le second est inutile sans le premier.

Fichiers fournis :

  • racine.dat
  • collier.bin

ÉTAPE 1 – Le chiffre des racines (OBLIGATOIRE)

Le fichier racine.dat appartient à l’utilisateur 1001 et au groupe 100. Ses permissions sont 000 (vous ne pouvez pas lire son contenu directement). Mais il possède un attribut étendu nommé user.sel qui cache un petit nombre.

  1. Lisez l’attribut étendu avec la commande : getfattr -n user.sel racine.dat Vous obtiendrez une valeur entière (par exemple "7").

  2. Récupérez l'UID (propriétaire) et le GID (groupe) avec : stat -c "%u %g" racine.dat

  3. Calculez la clé K avec la formule suivante : K = (UID × 3) − (GID × 2) + (valeur de user.sel)

    K est un nombre entier. Pour la suite, on utilisera uniquement sa partie modulo 256 (c’est-à-dire K % 256).

👉 Sans cette clé K, l’étape 2 sera impossible a trouver.

ÉTAPE 2 – Le déchiffrement du collier

Le fichier collier.bin est un texte chiffré octet par octet. Chaque octet du fichier a été XORé avec la clé K (modulo 256) calculée à l’étape 1.

Pour obtenir le message final :

  • Écrivez un petit script (Python, C, ou même une ligne de shell avec xxd et bc) qui lit collier.bin, applique un XOR avec (K % 256) sur chaque octet, et écrit le résultat dans un fichier message.txt.

  • Le résultat est un proverbe africain en français. C’est votre solution.

Explication de la solution

Objectif : Déchiffrer le fichier collier.bin en passant obligatoirement par l'étape 1 pour obtenir la clé K.

ÉTAPE 1 – Récupération de la clé K (extraction des métadonnées)

  1. Récupérer l'UID et le GID du fichier racine.dat

    Commande : $ stat -c "%u %g" racine.dat

    Exemple de sortie (données fournies dans l'énigme) : 1001 100

    → UID = 1001 → GID = 100

  2. Lire l'attribut étendu user.sel

    Commande : $ getfattr -n user.sel racine.dat

    Exemple de sortie :

    file: racine.dat

    user.sel="7"

    → user.sel = 7

  3. Calculer K avec la formule donnée

    K = (UID × 3) − (GID × 2) + (user.sel)

    Application numérique : K = (1001 × 3) − (100 × 2) + 7 K = 3003 − 200 + 7 K = 2810

  4. Réduire K modulo 256 (car le XOR s'applique sur des octets)

    K_mod = 2810 % 256 256 × 10 = 2560, reste 2810 − 2560 = 50 → K_mod = 50

NB : Vérification : si vous trouvez une autre valeur, vérifiez vos données. Dans cet exemple, la clé de déchiffrement est 50.

ÉTAPE 2 – Déchiffrement de collier.bin

Le fichier collier.bin contient un texte chiffré octet par octet avec un XOR utilisant la clé K_mod (50).

Méthode avec un script Python (recommandée) :

$ python3 -c " key = 50 data = open('collier.bin', 'rb').read() decrypted = bytes([b ^ key for b in data]) open('message.txt', 'wb').write(decrypted) print('Déchiffrement terminé. Résultat dans message.txt') "

Méthode avec une ligne de commande shell (si xxd et bc sont installés) :

$ xxd -p collier.bin | tr -d '\n' | while read -N2 hex; do printf "%02x" $((0x$hex ^ 50)) done | xxd -r -p > message.txt

Méthode en C (pour les puristes) :

#include <stdio.h> int main() { int c; FILE *in=fopen("collier.bin","rb"), *out=fopen("message.txt","wb"); while ((c=fgetc(in)) != EOF) fputc(c ^ 50, out); fclose(in); fclose(out); return 0; } (Compiler avec gcc -o decrypt decrypt.c && ./decrypt)

RÉSULTAT FINAL

Après exécution, le fichier message.txt contient le proverbe africain suivant :

"L’arbre qui tombe fait plus de bruit que la forêt qui pousse."

C'est la phrase secrète que la Reine Mère avait confiée au griot.

Classement du défi

  1. #1@ludcoding200 pts · 1 tentative(s)