TP3 : Rétro-ingénierie de code
Objectifs
• Approfondir l'utilisation de GDB.
• Découvrir les bases de la rétro-ingénierie de code.
• Résoudre des énigmes à partir d'un programme binaire partiellement fourni.
1. Introduction à la rétro-ingénierie
Définition
D'après Wikipedia :
La rétro-ingénierie est une méthode permettant d'analyser et de comprendre un système
sans en connaître précisément le fonctionnement interne.
En informatique, cela consiste à étudier un programme binaire pour en déduire son comportement,
notamment lorsque son code source est partiellement ou totalement absent.
Contexte légal
Cette activité est encadrée par la loi en France et en Europe. Assurez-vous d'agir dans un cadre légal
et pédagogique.
2. Étude du programme mysterioso
Dans le dossier src, vous trouverez :
• L'exécutable mysterioso
• Une partie de son code source dans [Link]
Étapes à franchir
Le programme vous demande de passer 4 étapes en fournissant des chaînes de caractères validées
par des fonctions dont le code source est absent. Votre objectif est de :
1. Trouver une chaîne acceptée.
2. Comprendre le fonctionnement de la vérification.
Ressources utiles
• Gestion des chaînes de caractères en Go.
• Fonction [Link] de la bibliothèque standard.
3. Exploration avec GDB
Chargement et analyse
Lancez GDB sur le binaire :
gdb -tui ./mysterioso
Commencez par lister les symboles disponibles :
info functions
Points d'arrêt
Ajoutez un point d'arrêt à la fonction de validation d'une étape :
b validateStep1
run
Utilisez les commandes suivantes pour avancer pas à pas et analyser l'exécution :
• stepi (si), nexti (ni), step (s), next (n)
• info registers : Afficher les registres
• x/s <adresse> : Lire une chaîne de caractères en mémoire
Exercice 1
• Trouvez une chaîne qui valide l'étape 1.
• Analysez la fonction de validation et expliquez son mécanisme.
4. Analyse des données en mémoire
Accéder aux variables
Utilisez print et x/ pour examiner les données :
print buffer
x/20bx &buffer # Affiche 20 octets à partir de l'adresse de buffer
Exercice 2
• Trouvez où est stockée la chaîne fournie en entrée.
• Analysez comment elle est traitée et comparée dans le programme.
5. Décryptage des étapes suivantes
Avancer dans l'analyse
Une fois l’étape 1 franchie, répétez le processus pour les suivantes :
1. Identifiez la fonction de validation.
2. Déterminez la logique de vérification.
3. Trouvez une chaîne acceptée.
Exercice 3
• Documentez la logique de chaque étape.
• Proposez une caractérisation des entrées valides.
6. Conclusion
Ce TP vous a permis d'explorer un programme binaire inconnu à l'aide de GDB et de techniques de
rétro-ingénierie. L'objectif était de vous familiariser avec les outils et méthodes utilisés dans ce
domaine, tout en développant votre capacité à analyser un code sans en avoir la source complète.