Avant-propos
Nous allons à travers cette solution résoudre l’épreuve Guessy
en réalisant une analyse statique du fichier via l’outil Radare2
.
Reconnaissance
Avant tout, nous commençons par déterminer le type du fichier qui nous est fourni :
$ file guessy
guessy: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, not stripped
On voit qu’on a affaire à un éxecutable, mais rien de bien probant. Essayons alors de lancer le programme pour voir ce qu’il fait :
chmod +x guessy
Ainsi le programme semble attendre de nous qu’on lui fournisse le flag, voyons ce qu’il se passe si on lui fournit le peu qu’on connaisse du drapeau attendu :
Super ! Maintenant il ne nous reste plus qu’à deviner les 8 prochains caractères du drapeau. Malheureusement, je ne suis pas magicien et le brute force n’est pas autorisé.
Alors faisons les choses proprement et lançons notre analyse statique avec Radare2
.
Analyse statique via Radare2
Nous commençons la rétro-ingénierie de notre éxecutable en précisant l’option aaaa
pour révéler le plus de détails possibles de l’architecture du programme.
1. Fonction main
On affiche ensuite le code désassemblé de la fonction main
:
On voit dans la fonction que le programme attend une entrée de l’utilisateur via la fonction fgets
et que suite à ça une fonction sym.validate
est appelée pour vraisemblablement valider l’entrée de l’utilisateur.
Il n’y a rien d’autre de très intéressant, nous passons alors à l’analyse de la fonction sym.validate
.
2. Fonction sym.validate
Voyons ce qu’elle contient :