Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
GhidraEmu — Émulateur natif de Pcode | Kitploit
Outils/GitHubGitHub/nalen98/ghidraemu
Analyse Dynamique de Code (DAST)Rétro-ingénierieDébogueursAnalyse de Binaires
GitHubnalen98/ghidraemu

GhidraEmu

Émulateur natif de Pcode

Voir le dépôt
305236il y a 2 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

GhidraEmu



Ce plugin expérimental pour Ghidra vous permet de gérer facilement l'émulation native de pcode. Plus aucun script n'est nécessaire, utilisez-le simplement directement depuis Ghidra. Il peut être particulièrement utile pour travailler avec une variété de processeurs exotiques qui ne sont pas pris en charge par les émulateurs courants.

Si le processeur/la VM est pris en charge par Ghidra pour la rétro-ingénierie, il peut être émulé ! Par exemple, l'émulation d'instructions eBPF est démontrée ci-dessous :

GhidraEmu

Ce qu'il peut faire

En substance, le plugin est un wrapper étendu autour des classes du package ghidra.app.emulator. Voici ce qui a été implémenté :

  • Fonctionne avec toutes les architectures prises en charge par Ghidra, vous pouvez donc ajouter des processeurs exotiques et les émuler
  • Émulation du contexte CPU, de la pile et du tas
  • Application d'octets patchés via l'interface graphique de Ghidra pour modifier le cours de l'émulation
  • Points d'arrêt pour contrôler le processus d'émulation
  • Affichage des octets modifiés pendant l'émulation dans le ByteViewer
  • Hooking de certaines fonctions libc (bien que cela reste limité)

Bien que l'émulation PCode implique idéalement une unification, la plupart des processeurs nécessitent leur propre approche. N'hésitez pas à signaler tout problème rencontré. J'aimerais vraiment tester tous les processeurs, mais c'est difficilement possible.

Ce qu'il ne peut pas faire

  • Entrer pas à pas dans les fonctions de bibliothèques externes (restrictions d'EmulatorHelper)
  • Émulation des appels système

Toutes les fenêtres du plugin en un seul ensemble

GhidraEmu

Fonctionnalités

Fenêtre Menu

Contient toutes les fenêtres du plugin : Stack view, Registers, Breakpoints view et Main Window.

GhidraEmu menu

Fenêtre contextuelle

Contient les raccourcis clavier pour définir le début et la fin de l'émulation, les points d'arrêt, et appliquer les octets modifiés à l'état de l'émulateur.

Vue des registres

Modifiez les registres comme vous le souhaitez. Définir le registre de liaison (flèche verte) aidera l'émulateur à comprendre quel registre contient l'adresse de retour. Le plugin sait comment cela fonctionne via la pile, le registre lr et les registres AARCH64 et MIPS. Si vous en avez un exotique, sélectionnez le registre de liaison et appuyez sur le bouton.

Vue de la pile

Lorsque vous ouvrez votre programme dans le CodeBrowser, GhidraEmu mappera automatiquement l'espace de la pile. Le pointeur de pile sera placé au milieu de la plage de pile. Cela vous permet de définir des valeurs en haut ou en bas des cadres de pile. Faites-la défiler si vous rencontrez des blocages lors de la mise à jour ou de la réinitialisation. Pendant le processus d'émulation, si le programme a besoin de plus d'espace pour la pile, le plugin l'allouera automatiquement.

Vue des points d'arrêt

Vue RAM

Si des octets changent pendant l'émulation, vous les verrez dans le ByteViewer classique. Ne vous inquiétez pas, ils seront réinitialisés à leurs valeurs d'origine après avoir appuyé sur le bouton « Reset ».

Appliquer les octets patchés

Si vous avez effectué des modifications, informez l'émulateur des octets modifiés (la pile se met à jour automatiquement, pas besoin de le faire). Après modification, sélectionnez-les (ils seront en vert), puis utilisez cette option (ou utilisez le raccourci « M »).

GhidraEmu applique les octets patchés

Console

Ici, le plugin affiche des informations de sortie. Par exemple, des messages d'erreur d'émulation comme celui-ci :

Console GhidraEmu

Nouvelle fonctionnalité - Jump Over

La fonctionnalité « Jump Over » vous permet de sauter une instruction si vous ne souhaitez pas émuler celle en cours pour une raison quelconque. Étant donné que le processus d'émulation sera interrompu si une tentative de lecture de mémoire non initialisée est détectée, cette fonctionnalité vous permet de contourner ce problème. Regardez un exemple. Voici l'une des premières instructions de nombreux programmes x86_64, la sauvegarde du canari de pile :

MOV RAX, qword ptr FS:[0x28]

Nous allons simplement essayer de tricher un peu et de sauter par-dessus en augmentant la valeur du PC. Pour ce faire, arrêtez-vous sur l'instruction que vous ne voulez pas émuler et appuyez sur la touche J. Sinon, continuer à avancer pas à pas entraînerait une erreur de lecture de mémoire non initialisée.

Jump Over

Nouvelle fonctionnalité - Step Over

Si vous vous arrêtez sur une instruction qui mène à une sous-routine (appel interne) et que vous souhaitez émuler tout le code jusqu'à l'instruction suivante (« step over » classique), appuyez sur la touche F6, et cela se produira certainement :

Step Over

Avant de commencer

Quelques points importants à prendre en compte :

  • N'oubliez pas d'analyser votre programme dans Ghidra, l'émulateur en dépend.
  • Comme déjà mentionné, définissez le registre de liaison si vous avez un processeur/une VM exotique.
  • Si le processeur de votre binaire nécessite certains segments mémoire conformément à la spécification, n'oubliez pas de les créer dans la fenêtre MemoryMap de Ghidra et de les initialiser avec des zéros. Sinon, l'émulateur signalera des espaces mémoire inconnus lors des opérations de lecture/écriture et arrêtera le processus d'émulation. Si un bloc mémoire existe mais n'est pas initialisé avec des zéros et que l'émulateur en a besoin, le plugin tentera de l'initialiser afin que l'émulation continue.
  • Si vous avez modifié des octets via le ByteViewer, le plugin ne les restaurera pas à leurs valeurs d'origine lors de la réinitialisation de l'état de l'émulation.
  • Avant de fermer le projet dans Ghidra, vous devez appuyer sur le bouton « Reset » et réinitialiser l'état de la dernière émulation si cela n'a pas déjà été fait. C'est important car au moment de la fermeture, les transactions de repeinture des instructions tracées dans le Listing ne seront pas exécutées, pas plus que les transactions de restauration des octets du programme après l'émulation. Cela peut non seulement conduire à voir le « vieux perroquet jaune », ce qui est le moindre des problèmes, mais aussi au fait que les octets modifiés restent tels quels et ne retrouvent pas leurs valeurs d'origine (sauf si le projet est restauré dans Ghidra, bien sûr).

Installation

  1. Utilisez gradle pour compiler l'extension : GHIDRA_INSTALL_DIR=${GHIDRA_HOME} gradle puis utilisez Ghidra pour l'installer : File → Install Extensions...

  2. Dans le CodeBrowser, allez dans File → Configure → Miscellaneous et cochez la case du plugin GhidraEmu.

Retour

Vous avez rencontré des bogues en utilisant le plugin ou vous avez des idées d'amélioration ? N'hésitez pas à ouvrir un nouveau ticket et je m'en occuperai.

Travaux futurs

Les restrictions d'EmulatorHelper ne permettent pas d'utiliser l'espace programme dans un autre. Ainsi, votre bibliothèque partagée externe, par exemple, ne connaîtra jamais l'espace mémoire du programme, et vice versa. Vous ne pouvez donc pas l'émuler comme un seul processus avec un seul espace mémoire. Dites-moi si quelque chose m'échappe ici.

Télécharger l’outil