
Modulo Ghidra per disassemblare, decompilare e analizzare il bytecode degli smart contract di Ethereum. Rileva istruzioni non sicure, estrae metodi nascosti e genera grafi di flusso di controllo per l'audit di sicurezza.

Negli ultimi anni, gli attacchi agli smart contract distribuiti sulla blockchain Ethereum hanno portato a una significativa quantità di fondi rubati a causa di errori di programmazione. Poiché gli smart contract, una volta compilati e distribuiti, sono complessi da modificare e aggiornare, diversi professionisti hanno suggerito l'importanza di rivedere la loro sicurezza nella blockchain dove è disponibile solo il bytecode della Ethereum Virtual Machine (EVM). In questo senso, il reverse engineering tramite disassemblaggio e decompilazione può essere efficace.
ghidra-EVM è un modulo Ghidra per il reverse engineering di smart contract. Può essere utilizzato per scaricare il bytecode della Ethereum Virtual Machine (EVM) dalla blockchain Ethereum e disassemblare e decompilare lo smart contract. Inoltre, può analizzare il codice di creazione, trovare metodi del contratto e individuare istruzioni insicure.
Comprende un modulo processore, un caricatore personalizzato e plugin che disassemblano il bytecode della Ethereum VM (EVM) e generano un grafico di controllo di flusso (CFG) di uno smart contract.
L'ultima versione utilizza l'API Ghidra 9.1.2. Si basa sulla libreria crytic evm_cfg_builder (https://github.com/crytic/evm_cfg_builder) per assistere Ghidra nel processo di generazione del CFG.
Ghidra-evm consiste in:
Il contenuto della directory ghidra-evm può essere utilizzato per creare un modulo Ghidra in Eclipse con processore e caricatore per estendere o eseguire il debug di ghidra_evm.

| Script | Descrizione |
|---|---|
| teether | Segna il percorso critico in Ghidra prima di generare l'exploit. Richiede teether. |
Ghidra-evm è concesso in licenza e distribuito sotto AGPLv3.
| Script | Descrizione |
|---|
| search_codecopy.py | Quando si analizza il codice di creazione in uno smart contract possiamo vedere solo la funzione _dispatcher che utilizza CODECOPY per scrivere il codice runtime in memoria. Questo script cerca istruzioni CODECOPY utili e trova i metodi dello smart contract nascosti nella parte runtime del contratto. |
| search_dangerous_instructions.py | Istruzioni come CALL, CALLCODE, SELFDESTRUCT e DELEGATECALL possono talvolta essere abusate per trasferire fondi a un altro contratto. Questo script le trova e crea un'etichetta per ogni occorrenza. |
| load_external_contract.py | Scarica il bytecode dello smart contract dalla blockchain in un file .evm_h che può essere caricato in ghidra-evm |
| Tutorial | Descrizione |
|---|
| Utilizzo | Semplici istruzioni di utilizzo con test.evm |
| Analizzare il bytecode di creazione | Utilizzo di search_codecopy.py per analizzare il codice di creazione e trovare metodi nascosti |
| Cercare istruzioni pericolose | Utilizzo di search_dangerous_instructions.py per analizzare un'occorrenza di SELFDESTRUCT |
| Scaricare il bytecode dello smart contract dalla blockchain in Ghidra | Utilizzo di load_external_contract.py per scaricare il bytecode EVM dalla blockchain in un file .evm_h |