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.
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.