PROFIL / INDEX© Clément Depernet / 2026

← Retour à la liste

29 oct. 20243 min de lecture

Root-Me — Cryptanalyse & stéganographie : méthodes

Méthodologie de résolution d'une série de challenges Root-Me de cryptanalyse et stéganographie : encodages, cassage de hash, chiffrement par décalage, EXIF, stégano texte. Flags volontairement caviardés.

intro#root-me#cryptographie#steganographie#hashcat#ctf

Mis à jour le 21 sept. 2026

Note. Ce write-up décrit la démarche de résolution. Les flags et mots de passe sont volontairement masqués (██████) : Root-Me demande de ne pas publier de solutions. L’objectif ici est pédagogique — montrer l’approche, pas donner les réponses.

Encodages

ASCII / hexadécimal

Le titre du challenge indique de l’hexadécimal. On repasse en ASCII :

echo "4C652066...<tronqué>" | xxd -r -p

Le flag apparaît en clair dans la sortie décodée → ██████.

UUencode

Le titre évoque « UUencode ». On copie le contenu dans code.txt puis :

uudecode -o code_en_clair.txt code.txt

Si uudecode manque : sudo apt-get install sharutils. Le fichier produit contient PASS = ██████.

Cassage de hash (hashcat)

MD5

Algorithme connu (MD5 → mode 0), on tente un dictionnaire classique :

hashcat -a0 -m0 md5.txt rockyou.txt

DCC / DCC2 (Domain Cached Credentials)

Les hash DCC se trouvent dans la section Dumping cached domain logon information de secretsdump. On isole la ligne de l’administrateur (domain/username:hash), puis on casse avec le mode adapté :

# DCC → mode 1100
hashcat --hash-type 1100 --attack-mode 0 ./h /usr/share/wordlists/rockyou.txt

Le mot de passe récupéré est le flag → ██████.

SHA-2 / SHA-1

Le condensat fourni fait 65 caractères au lieu de 64 : un caractère hors de la plage hexadécimale (0-F) s’y est glissé, on le retire. Une rainbow table (ou un bruteforce) donne le clair ██████, qu’il reste à ré-hacher en SHA-1 pour obtenir le flag attendu.

Chiffrement par décalage (César)

Indice « Tu quoque fili » → César. On teste les 26 décalages. Un petit programme C suffit à parcourir les offsets sur le buffer :

#include <stdio.h>
#include <ctype.h>
#include <string.h>

unsigned char data[] = { /* xxd -i du binaire */ };

int main(void) {
  for (int offset = 0; offset < 26; offset++) {
    printf("Offset: %d\n", offset);
    for (size_t i = 0; i < sizeof(data); i++) {
      int c = (data[i] - offset) % 255;
      printf("%c", isprint(c) ? c : '_');
    }
    printf("\n");
  }
  return 0;
}

Pour la variante « substitution monoalphabétique », un décalage progressif par ligne révèle une comptine connue (un, deux, trois, j’irai dans les bois…). Le flag dérivé est ██████.

Stéganographie

Métadonnées EXIF

Le challenge parle de géolocalisation : on lit les métadonnées.

exiftool ./ch1.png
# GPS Latitude / GPS Longitude ...

On reporte les coordonnées sur une carte → la ville trouvée est la réponse (██████).

Miniature EXIF

Certaines images embarquent une miniature différente de l’image principale :

exiftool -b -ThumbnailImage ch10.jpg > thumbnail.jpg
exiftool -b -ThumbnailImage thumbnail.jpg > thumbnail_2.jpg

Stégano texte (acrostiche)

Le texte « George et Alfred » cache un message : en lisant le premier mot de chaque ligne du poème, on reconstruit la phrase masquée (██████).

Steganomobile

L’énoncé pointe vers un clavier de téléphone : chaque groupe de chiffres correspond à une touche, le nombre de répétitions désignant la lettre (222 → C, 33 → E…). Le mot reconstitué est le flag (██████).

À retenir

  • Le titre d’un challenge est souvent l’indice principal (encodage, algo).
  • Pour les hash, identifier le mode hashcat avant de lancer quoi que ce soit.
  • En stégano, penser systématiquement aux métadonnées (EXIF, miniatures) avant les techniques plus lourdes.
SEC / OPS / CD-01

Astro + Tailwind, conteneurisé, servi derrière Caddy · Inspiration · Thème sonore : Severance (Theodore Shapiro) · Trop mignon le favicon, non ?

PRÊT / CD-01