Prise en main de Ghidra
Ghidra est un logiciel libre de rétro-ingénierie développé par la NSA (Agence de sécurité nationale américaine).
Il sert principalement à analyser des fichiers binaires, comme des malwares ou des exécutables, sans les exécuter.
Pour exploiter pleinement le logiciel, des connaissances en assembleur et programmation sont nécessaires.
Cette activité se résumera donc à une prise en main basique de Ghidra.
|
Le code source de Ghidra a été rendu disponible sur GitHub suite à sa déclassification en 2019 après une fuite via WikiLeaks. |
💻 Travail n° 1 Rappels de compilation
🎯 Travail à faire :
-
Visionner les 3 premières vidéos du MOOC “RIP : Rétro-Ingénierie de Programmes” de France Université Numérique
-
Dans Linux, exécuter l’exécutable login1
après l’avoir téléchargé et rendu exécutable (→
chmod +x login). Cet exécutable demande de s’authentifier et affiche un message différent selon que l’authentification a réussi ou non avant de quitter.jdoe@C14-15:~$ ./login1 jdoe@C14-15:~$ ./login1 Please login ! . login : root . password : admin Unknown user. Bye ! (1)1 Le programme quitte en indiquant de l’authentification a échoué. -
Ouvrir l’exécutable
login1avec :-
cat -
xxd(après l’avoir éventuellement installé avecsudo apt install xxd) -
strings -
objdump -s -M intel
…et découvrir l’identifiant et le mot de passe attendus pour parvenir à s’authentifier.
-
💻 Travail n° 2 Installation de Ghidra
L’installation de Ghidra ne nécessite qu’une extraction de l’archive dans lequel il est distribué.
Cependant, Ghidra repose sur une version précise de l’environnement de développement Java (JDK). Il faut donc l’installer au préalable.
|
Des informations supplémentaires sur la procédure d’installation peuvent être trouvées dans le Guide de démarrage |
🎯 Travail à faire :
-
Ouvrir le File Manager et se rendre sur
Diskstationen tapantsmb://Diskstation/install/ghidra. -
S’authentifier en tant qu’utilisateur anonyme
-
Télécharger localement les fichiers :
-
OpenJDK21U-jdk_x64_linux_hotspot_21.0.9_10.tar.gz -
ghidra_12.0_PUBLIC_20251205.zip
-
-
Extraire l’archive
OpenJDK21U-jdk_x64_linux_hotspot_21.0.9_10.tar.gzdans le dossier/opt:sudo tar -xzvf OpenJDK21U-jdk_x64_linux_hotspot_21.0.9_10.tar.gz -C /opt (1)1 /optest le répertoire par défaut pour installer les logiciels ne faisant pas partie de la distribution Linux -
Extraire l’archive de Ghidra également dans
/opt:sudo unzip ghidra_12.0_PUBLIC_20251205.zip -d ../opt -
Ajouter de manière permanente les chemins du JDK et de Ghidra dans la liste des chemins accessibles par défaut (→ variable d’environnement
PATH). Pour cela, ajouter la ligne suivante au fichier~/.bashrc:export PATH=/opt/jdk-21.0.9+10/bin:/opt/ghidra_12.0_PUBLIC:$PATH -
Prendre en compte les modifications en tapant :
source ~/.bashrc (1)1 On peut aussi écrire . ~/.bashrc -
Vérifier que Ghidra s’exécute lorsqu’on lance la commande suivante :
ghidraRun
💻 Travail n° 3 1er analyse statique avec Ghidra
L’objectif de ce travail est d’utiliser Ghidra pour retrouver le mot de passe demandé suite à l’exécution du programme sachant que ce mot de passe est “chiffré” dans le code source.
🎯 Travail à faire :
-
Une fois Ghidra lancé, créer un projet non partagé (Not shared project) nommé
lab-ghidradepuis le menu -
Importer l’exécutable login2
dans Ghidra :
-
soit en le “glissant-déposant” dans le projet
lab_ghidra -
soit en le sélection depuis le menu
-
-
Renseigner la boîte de dialogue qui s’affiche conformément à l’illustration ci-dessous :
L’option “Load libraries From Disk” permet une analyse plus poussée d’un exécutable qui fait appel à des librairies externes.
-
Lorsqu’on valide la boîte de dialogue, l’importation se lance et une fenêtre de compte rendu s’affiche :
-
En s’assurant que l’exécutable
login2est bien sélectionné dans le projet, lancer l’outil Codebrowser soit en cliquant l’icône
soit en double-cliquant sur l’exécutable login2.Ghidra propose alors de lancer son analyse avec ensemble d’options paramétrables.
Garder les options proposées par défaut
-
Dans la fenêtre “Symbol Tree”, cliquer l’identifiant
maindans la catégorie “Functions”. Un listing en pseudo-C s’affiche alors dans la fenêtre “Decompile” :undefined8 main(void) { int iVar1; char local_58 [48]; undefined1 local_28 [32]; printf("Please enter password : "); __isoc99_scanf(&DAT_00102097,local_28); b64_encode(local_28,local_58); iVar1 = strcmp(local_58,appPassword); if (iVar1 != 0) { puts("\nBad password. Bye !"); /* WARNING: Subroutine does not return */ exit(-1); } puts("\nWelcome !"); return 0; } -
Analyser le pseudo-code C et, à partir de celui-ci, tenter de retrouver le mot de passe en clair réclamé par le programme
login2La catégorie “Labels” de la fenêtre “Symbol Tree” permet de se déplacer en mémoire pour examiner le contenu d’objets globaux tels que des variables globales.
-
Vérifier que le mot de passe trouvé est le bon en exécutant
login2depuis la ligne de commande.Ne pas oublier de rendre le fichier exécutable avec :
chmod +x login2
💻 Travail n° 4 Travail de synthèse
L’objectif de ce travail est également de retrouver un mot de passe chiffré dans un exécutable.
Contrairement au travail précédent, le chiffrement est un peu plus…“tordu” 🤪.
🎯 Travail à faire :
-
Ajouter l’exécutable login3
dans le projet existant
lab-ghidradans Ghidra -
Retrouver le mot de passe réclamé par
login3lors de son exécution depuis la ligne de commande
🞄 🞄 🞄



