Extension de l'exportateur de fichiers objets pour Ghidra
Cette extension Ghidra permet d'exporter des parties d'un programme sous forme de fichiers objets. Ces fichiers objets ont des métadonnées valides (symboles, tables de relocalisation…) et à ce titre peuvent être réutilisés directement par une chaîne d'outils pour un traitement ultérieur.
Les cas d'utilisation incluent :
- Correction binaire avancée, en tirant parti de l'éditeur de liens pour réparer les parties originales et modifiées ensemble au lieu de faire ce travail à la main ;
- Portages logiciels, en isolant le code indépendant du système d'un programme et en remplaçant le reste ;
- Conversion de programmes ou de fichiers objets d'un format de fichier à un autre ;
- Créer des bibliothèques, en extrayant des parties d'un programme et en les réutilisant dans un autre contexte ;
- Projets de décompilation, en divisant un programme en plusieurs fichiers objets et en réimplémentant ceux-ci à la manière de Ship of Theseus ;
- …
Matrice des architectures de jeux d'instructions et des fichiers objets pris en charge :
Bâtiment (CLI)
- Cloner ce dépôt ;
- Définissez la variable d'environnement
GHIDRA_INSTALL_DIR
pour pointer vers votre répertoire d'installation Ghidra ; - Exécutez
gradle buildExtension
.
L'archive de l'extension Ghidra sera créée dans le répertoire dist/
.
Installation
- Téléchargez l'extension depuis la page des versions ou construisez-la localement ;
- Installez l'extension dans votre instance Ghidra avec
File > Install Extensions…
; - Activez le plugin
RelocationTableSynthesizedPlugin
avec File > Configure
dans une fenêtre CodeBrowser.
Usage
- Sélectionnez un ensemble d'adresses dans la vue Liste ;
- Lancer l'analyseur
Relocation table synthesizer
(disponible en mode one-shot) ; - Appelez un exportateur de fichiers objets déplaçables avec
File > Export Program…
Les relocalisations reconstruites peuvent être visualisées avec Window > Relocation table (synthesized)
.
- ️ L'analyseur synthétiseur de table de relocalisation s'appuie sur une base de données Ghidra entièrement remplie (avec des symboles, des types de données et des références correctement déclarés) pour fonctionner. Des informations incorrectes ou manquantes peuvent entraîner des relocalisations interrompues ou non découvertes au cours de l'analyse.
- ️ Les exportateurs de fichiers objets s'appuient sur les résultats de l'analyseur synthétiseur de table de relocalisation pour fonctionner. En cas de doute, exécutez cet analyseur juste avant d'exporter un fichier objet pour vous assurer que le contenu de la table de relocalisation est à jour avec l'état actuel du programme.
Comment ça marche ?
Les fichiers objets sont constitués de trois parties :
- Octets de section déplaçables ;
- Une table de symboles ;
- Une table de déménagement.
Lorsqu'un éditeur de liens est invoqué pour générer un exécutable à partir d'un ensemble de fichiers objets, il :
- Disposez leurs sections en mémoire ;
- Calculer les adresses des symboles dans l'espace d'adressage virtuel ;
- Appliquez les relocalisations en fonction des adresses finales des symboles sur les octets de section.
Normalement, la table de relocalisation est supprimée après ce processus, ainsi que la table des symboles si les symboles de débogage ne sont pas conservés, ne laissant que les octets de section non relocalisables. Cependant, grâce à une analyse minutieuse, ces données peuvent être recréées, ce qui nous permet ensuite de dissocier efficacement le programme des fichiers objets.