
Módulo de Ghidra para desensamblar, descompilar y analizar bytecode de contratos inteligentes de Ethereum. Detecta instrucciones inseguras, extrae métodos ocultos y genera gráficos de flujo de control para auditorías de seguridad.

En los últimos años, los ataques a contratos inteligentes desplegados en la cadena de bloques de Ethereum han resultado en una cantidad significativa de fondos robados debido a errores de programación. Dado que los contratos inteligentes, una vez compilados y desplegados, son complejos de modificar y actualizar, diferentes profesionales han sugerido la importancia de revisar su seguridad en la cadena de bloques donde solo está disponible el bytecode de la Máquina Virtual de Ethereum (EVM). En este sentido, la ingeniería inversa mediante desensamblado y descompilación puede ser efectiva.
ghidra-EVM es un módulo de Ghidra para la ingeniería inversa de contratos inteligentes. Se puede utilizar para descargar bytecode de la Máquina Virtual de Ethereum (EVM) de la cadena de bloques de Ethereum y desensamblar y descompilar el contrato inteligente. Además, puede analizar el código de creación, encontrar métodos del contrato y localizar instrucciones inseguras.
Comprende un módulo de procesador, un cargador personalizado y complemento(s) que desensamblan bytecode de la Máquina Virtual de Ethereum (EVM) y generan un gráfico de flujo de control (CFG) de un contrato inteligente.
La última versión usa la API de Ghidra 9.1.2. Se basa en la biblioteca crytic evm_cfg_builder (https://github.com/crytic/evm_cfg_builder) para ayudar a Ghidra en el proceso de generación de CFG.
Ghidra-evm consiste en:
El contenido del directorio ghidra-evm se puede utilizar para crear un módulo de Ghidra en Eclipse con procesador y cargador con el fin de extender o depurar ghidra_evm.

| Script | Descripción |
|---|---|
| teether | Marca la ruta crítica en Ghidra antes de generar el exploit. Requiere teether. |
Ghidra-evm está licenciado y distribuido bajo AGPLv3.
| Script | Descripción |
|---|
| search_codecopy.py | Al analizar el código de creación en un contrato inteligente, solo podemos ver la función _dispatcher que usa CODECOPY para escribir el código de tiempo de ejecución en la memoria. Este script busca instrucciones CODECOPY útiles y encuentra los métodos del contrato inteligente ocultos en la parte de tiempo de ejecución del contrato. |
| search_dangerous_instructions.py | Instrucciones como CALL, CALLCODE, SELFDESTRUCT y DELEGATECALL a veces pueden ser abusadas para transferir fondos a otro contrato. Este script las encuentra y crea una etiqueta para cada ocurrencia. |
| load_external_contract.py | Descarga el código de bytes de un contrato inteligente de la cadena de bloques a un archivo .evm_h que se puede cargar en ghidra-evm |
| Tutorial | Descripción |
|---|
| Utilization | Instrucciones simples de utilización con test.evm |
| Analyzing creation bytecode | Usando search_codecopy.py para analizar código de creación y encontrar métodos ocultos |
| Looking for dangerous instructions | Usando search_dangerous_instructions.py para analizar una ocurrencia de SELFDESTRUCT |
| Downloading smart contract bytecode from the blockchain into Ghidra | Usando load_external_contract.py para descargar código de bytes EVM de la cadena de bloques a un archivo .evm_h |