
Module Ghidra pour le désassemblage, la décompilation et l'analyse du bytecode des contrats intelligents Ethereum. Détecte les instructions non sécurisées, extrait les méthodes cachées et génère des graphes de flux de contrôle pour l'audit de sécurité.

Au cours des dernières années, les attaques contre les contrats intelligents déployés sur la blockchain Ethereum ont entraîné un vol important de fonds en raison d'erreurs de programmation. Comme les contrats intelligents, une fois compilés et déployés, sont complexes à modifier et à mettre à jour, différents praticiens ont suggéré l'importance de vérifier leur sécurité dans la blockchain où seul le bytecode de l'Ethereum Virtual Machine (EVM) est disponible. À cet égard, le rétro-ingénierie par désassemblage et décompilation peut être efficace.
ghidra-EVM est un module Ghidra pour le rétro-ingénierie des contrats intelligents. Il peut être utilisé pour télécharger le bytecode de l'Ethereum Virtual Machine (EVM) depuis la blockchain Ethereum, puis désassembler et décompiler le contrat intelligent. De plus, il peut analyser le code de création, trouver les méthodes du contrat et localiser les instructions non sécurisées.
Il comprend un module de processeur, un chargeur personnalisé et des plugins qui désassemblent le bytecode de l'EVM et génèrent un graphe de flux de contrôle (CFG) d'un contrat intelligent.
La dernière version utilise l'API Ghidra 9.1.2. Elle repose sur la bibliothèque crytic evm_cfg_builder (https://github.com/crytic/evm_cfg_builder) pour assister Ghidra dans le processus de génération du CFG.
Ghidra-evm se compose de :
Le contenu du répertoire ghidra-evm peut être utilisé pour créer un module Ghidra dans Eclipse avec un processeur et un chargeur afin d'étendre ou de déboguer ghidra_evm.

| Script | Description |
|---|---|
| teether | Il marque le chemin critique dans Ghidra avant de générer l'exploit. Nécessite teether. |
Ghidra-evm est sous licence et distribué sous AGPLv3.
| Script | Description |
|---|
| search_codecopy.py | Lors de l'analyse du code de création dans un contrat intelligent, nous ne pouvons voir que la fonction _dispatcher qui utilise CODECOPY pour écrire le code d'exécution en mémoire. Ce script recherche les instructions CODECOPY utiles et trouve les méthodes du contrat intelligent cachées dans la partie runtime du contrat. |
| search_dangerous_instructions.py | Des instructions telles que CALL, CALLCODE, SELFDESTRUCT et DELEGATECALL peuvent parfois être abusées pour transférer des fonds vers un autre contrat. Ce script les trouve et crée une étiquette pour chaque occurrence. |
| load_external_contract.py | Télécharge le byte code d'un contrat intelligent depuis la blockchain dans un fichier .evm_h qui peut être chargé dans ghidra-evm |
| Tutoriel | Description |
|---|
| Utilisation | Instructions simples d'utilisation avec test.evm |
| Analyse du bytecode de création | Utilisation de search_codecopy.py pour analyser le code de création et trouver les méthodes cachées |
| Recherche d'instructions dangereuses | Utilisation de search_dangerous_instructions.py pour analyser une occurrence de SELFDESTRUCT |
| Téléchargement du bytecode d'un contrat intelligent depuis la blockchain dans Ghidra | Utilisation de load_external_contract.py pour télécharger le byte code EVM depuis la blockchain dans un fichier .evm_h |