Reverse puis ROT : annuler l'inversion de chaîne et ROT13
Le défi
Un crackme affiche cette chaîne brouillée quand on saisit la mauvaise clé. Le désassemblage montre qu'il construit la vraie valeur en inversant une chaîne stockée puis en appliquant ROT13 aux lettres. Annulez les deux étapes dans l'atelier et soumettez le flag (HDNA{...}).
Ce que tu vas apprendre
- Reconnaître ROT13 grâce aux caractères qu'il laisse intacts
- Comprendre pourquoi ROT13 et l'inversion de chaîne sont chacun leur propre inverse
- Ordonner correctement deux transformations symétriques pour récupérer le texte en clair
- Écarter base64 et hexadécimal quand l'entrée n'en a pas la structure
- Expliquer pourquoi un brouillage sans clé n'est pas du chiffrement
Compétences testées
Prérequis
- Savoir ce que font ROT13 et l'inversion de chaîne
- Connaissance de base de la lecture de la sortie d'un crackme
Comment ça marche
ROT13 décale chaque lettre de 13 positions dans l'alphabet. Comme l'alphabet compte 26 lettres, l'appliquer deux fois redonne l'original : ROT13 est donc sa propre inverse et ne nécessite aucune clé. L'inversion de chaîne suit la même logique : inverser deux fois vous ramène au point de départ. Les crackmes et les 'protections' légères adorent ces techniques car elles paraissent obfusquées mais ne coûtent rien à appliquer.
L'indice qui révèle une rotation de lettres plutôt qu'un chiffre d'octets, c'est ce qu'elle laisse intact. ROT ne décale que a-z et A-Z ; les chiffres, les accolades et les tirets bas passent tels quels. Dans la chaîne brouillée, on voit déjà {, } et _ parmi les lettres, simplement au mauvais endroit car l'ensemble est aussi inversé. Cela écarte base64 (pas de padding, structure de casse mixte) et l'hexadécimal (tous les caractères ne sont pas hexadécimaux), et oriente directement vers reverse plus ROT.
L'ordre compte quand on annule des transformations empilées : on annule d'abord la dernière effectuée. Le crackme a inversé la chaîne puis lui a appliqué ROT13, donc on annule dans l'ordre inverse : ajoutez Reverse, puis ROT avec le décalage par défaut de 13. Le flag apparaît en direct. Les autres opérations (atbash, base64, hex, Vigenère, XOR, URL-decode) sont des leurres ; atbash est le piège le plus proche, mais il fait correspondre chaque lettre à son miroir plutôt que de la décaler de 13, ce qui produit un résultat incompréhensible ici.
Erreurs fréquentes
- Se tourner vers base64 ou hex. La chaîne n'est ni du base64 ni de l'hexadécimal valide : ces opérations ne produisent que du charabia.
- Utiliser atbash au lieu de ROT. Atbash fait un miroir de l'alphabet ; ROT13 décale de 13. Seul ROT13 récupère le flag ici.
- Modifier le décalage de ROT. ROT13 est la valeur par défaut et la bonne : d'autres décalages ne donneront pas de texte lisible.
- Appliquer les étapes dans le mauvais ordre. Reverse et ROT13 commutent sur ces données, mais par habitude, annulez d'abord la dernière transformation appliquée.
Comment s'en protéger
Pour les défenseurs et les reverse engineers, la leçon est qu'un brouillage sans clé comme ROT13 ou l'inversion est purement récréatif : cela cache une chaîne au premier coup d'œil et rien de plus. Si un crackme ou un binaire réel 'protège' une valeur de cette façon, traitez-la comme du texte en clair et lisez-la directement.
- N'utilisez jamais ROT13, l'inversion ou toute autre transformation sans clé pour cacher des secrets dans le code : elles ne protègent rien.
- Lors du reverse, reconnaissez instantanément les rotations de lettres grâce aux caractères non alphabétiques laissés intacts.
- Essayez d'abord les transformations les moins coûteuses (reverse, ROT, atbash) avant de supposer un vrai chiffrement.
- Stockez les vrais secrets en dehors du binaire, récupérés via une authentification appropriée, et non intégrés de façon obfusquée.