Solution de 4idenP pour Guessy

intro reverse linux x86/x64

5 janvier 2024

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

image-3

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 :

image-4

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.

image-1

1. Fonction main

On affiche ensuite le code désassemblé de la fonction main :

image-2

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 :