[CTF GEMA] Static
CTF GEMA Groupe 2025
Niveau de Difficulté : Medium
Catégorie du Challenge : Reverse
Description :
C'est trop long !
Steps to Solve
Exécution du fichier exécutable

On peut voir qu'au lancement du fichier, il demande une entrée.
Après l'avoir saisie, il affiche "lose", ce qui signifie que l'entrée est incorrecte.
Analyse

Nous allons analyser le fichier en cherchant directement le mot "lose", ce qui facilitera la recherche car la fonction principale est trop longue.

Ici, on voit qu'il compare local_118
et local_138
.
- S'ils sont identiques, il affiche "nice".
- Sinon, il affiche "wrong input".

local_118
est la valeur chiffrée du flag, stockée sous forme de vecteur (tableau).

Dans cette partie, on observe que local_d8
provient de cin, ce qui signifie que c'est l'entrée utilisateur.
Ensuite, cette valeur est transmise à la fonction cypher, qui effectue le chiffrement.
- Cette fonction prend deux paramètres :
- Le premier est l'entrée utilisateur.
- Le second est la clé, qui correspond à
local_30
.
Fonction de chiffrement


Dans la fonction cypher, plusieurs opérations sont appliquées pour chiffrer les données.
Pour retrouver la bonne entrée, nous devons inverser ces opérations.
Les opérations utilisées sont :
- XOR
- Shift (décalage de bits)
Rétro-ingénierie du chiffrement
- Shift :
- Si c'est un décalage à gauche → le convertir en décalage à droite.
- Si c'est un décalage à droite → le convertir en décalage à gauche.
- XOR :
- Pas besoin de modifier l'opération, il suffit d'appliquer l'inverse sur le texte chiffré.
Une fois ces opérations inversées, nous pouvons récupérer le texte déchiffré et l'utiliser pour obtenir le flag.

Flag
FLAG{63n3r4l_3ncryp710n}