FxGuitarPro
đ Introduction
Readme.txt
1
2
3
4
5
6
7
8
9
10
11
README.txt
Aucune stéganographie n'est à effectuer sur les images : elles sont uniquement nécessaires au bon fonctionnement du logiciel.
Votre objectif est de comprendre le fonctionnement de l'algorithme de génération de la clé de licence, afin de retrouver celle de votre ami !
Vous pouvez tester votre réponse directement dans le logiciel pour vérifier si vous avez trouvé la bonne clé de licence ou non.
PS : Le premier groupe qui trouve le flag est priĂ© de mâenvoyer un message privĂ© sur Discord : fxoverflow
(Des petits chocolats vous attendent ! :)
La facture :
đđ Solution
Pour rĂ©soudre ce challenge, nous pouvons essayer de reverse le fichier .exe mais cela sâavĂšre ĂȘtre trop complexe⊠il va falloir ĂȘtre plus stratĂšge !
On peut essayer dâen dĂ©couvrir plus sur le binaire
1
strings {binaire}
Il devient alors possible de récupérer le code source à partir de cet exécutable. Une simple recherche sur Internet permet de découvrir des outils adaptés à cette tùche.
Une rapide recherche permet de dĂ©couvrir lâoutil pyinstxtractor :
1
python3 pyinstxtractor.py ../FxGuitarPro.exe
Cela génÚre un dossier avec plusieurs fichiers, dont des fichiers .pyc. On trouve ainsi le fichier FxGuitarPro.pyc.
On dĂ©couvre alors quâil faut utiliser un dĂ©compilateur pour lire le contenu des fichiers .pyc
. Câest aussi lâoccasion pour les joueurs de comprendre ce quâest un bytecode Python. Malheureusement, de nombreux dĂ©compilateurs classiques (comme uncompyle6 ou decompyle3) ne prennent pas encore en charge la version 3.13.3 de Python.
En effectuant une simple recherche Google, on tombe sur le site PyLingual :
On y téléverse le fichier .pyc extrait précédemment grùce à pyinstxtractor.
GrĂące Ă PyLingual, on rĂ©cupĂšre le code source original de lâapplication :
On dĂ©couvre alors lâalgorithme utilisĂ© pour gĂ©nĂ©rer les clĂ©s de licence : repose sur une date et un secret token.
Reconstitution de la clé
- Secret token :
FxGuitar
- Date dâachat (prĂ©sente sur la facture) :
2025-03-13
- Format attendu : celui de
datetime.now()
(sans espaces, sans séparateurs entre les deux parties)
Je peux maintenant valider mon flag.
đ FLAG : MB{2025-03-13FxGuitar}
đ