1 points par GN⁺ 2024-08-24 | Aucun commentaire pour le moment. | Partager sur WhatsApp

Extension d’export de fichiers objets pour Ghidra

Cette extension Ghidra permet d’exporter une partie d’un programme sous forme de fichier objet. Ces fichiers objets contiennent des métadonnées valides (symboles, table de relocalisation, etc.) et peuvent donc être réutilisés directement par une toolchain.

Cas d’usage

  • Patching binaire avancé : combiner l’original et les parties modifiées en s’appuyant sur l’éditeur de liens plutôt que sur un travail manuel
  • Portage logiciel : extraire du programme le code indépendant du système et remplacer le reste
  • Conversion de format de fichier : convertir un programme ou un fichier objet vers un autre format de fichier
  • Création de bibliothèque : extraire une partie d’un programme pour la réutiliser dans un autre contexte
  • Projet de décompilation : découper un programme en plusieurs fichiers objets et le réimplémenter

Architectures ISA et formats de fichiers objets pris en charge

  • x86 : COFF (pris en charge), ELF (pris en charge)
  • MIPS : COFF (non pris en charge), ELF (pris en charge)

Build (CLI)

  • Cloner ce dépôt
  • Définir la variable d’environnement GHIDRA_INSTALL_DIR vers le répertoire d’installation de Ghidra
  • Exécuter la commande gradle buildExtension
  • L’archive de l’extension Ghidra est générée dans le répertoire dist/

Installation

  • Télécharger l’extension depuis la page des releases ou la compiler localement
  • Installer l’extension dans une instance Ghidra via File > Install Extensions…
  • Dans la fenêtre CodeBrowser, activer le plugin RelocationTableSynthesizedPlugin via File > Configure

Utilisation

  1. Sélectionner un ensemble d’adresses dans la vue Listing
  2. Exécuter l’analyseur Relocation table synthesizer (utilisable en mode one-shot)
  3. Appeler l’exporteur de fichiers objets relogeables via File > Export Program…
  4. Consulter la table de relocalisation reconstruite dans Window > Relocation table(synthesized)
  • ⚠️ L’analyseur Relocation table synthesizer nécessite une base de données Ghidra entièrement renseignée (symboles, types de données et références correctement déclarés). Des informations inexactes ou manquantes peuvent entraîner des relocalisations erronées ou non détectées pendant l’analyse
  • ⚠️ L’exporteur de fichiers objets dépend des résultats de l’analyseur Relocation table synthesizer. Avant d’exporter un fichier objet, exécutez cet analyseur afin de vous assurer que le contenu de la table de relocalisation est à jour

Fonctionnement

Un fichier objet se compose de trois parties :

  • les octets de section relogeables
  • la table des symboles
  • la table de relocalisation

Quand l’éditeur de liens génère un exécutable à partir de plusieurs fichiers objets :

  • il place les sections en mémoire
  • il calcule l’adresse des symboles dans l’espace d’adressage virtuel
  • il applique aux octets des sections les relocalisations en fonction de l’adresse finale des symboles

En général, après ce processus, la table de relocalisation est supprimée, et la table des symboles l’est aussi sauf si les symboles de débogage sont conservés. Cependant, une analyse minutieuse permet de recréer ces données, ce qui rend possible de delink un programme pour le retransformer en fichier objet.

Résumé de GN⁺

  • Cette extension Ghidra permet d’exporter une partie d’un programme sous forme de fichier objet.
  • Elle couvre divers cas d’usage comme le patching binaire avancé, le portage logiciel et la conversion de formats de fichiers.
  • Une base de données précise est nécessaire, et il est important d’exécuter l’analyseur avant d’exporter le fichier objet.
  • Parmi les projets offrant des fonctionnalités similaires, on peut citer des décompilateurs comme IDA Pro.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.