
Módulo do Ghidra para desmontagem, descompilação e análise de bytecode de contratos inteligentes Ethereum. Detecta instruções inseguras, extrai métodos ocultos e gera grafos de fluxo de controle para auditoria de segurança.

Nos últimos anos, ataques a contratos inteligentes implantados na blockchain Ethereum resultaram em uma quantidade significativa de fundos roubados devido a erros de programação. Como os contratos inteligentes, uma vez compilados e implantados, são complexos de modificar e atualizar, diferentes profissionais sugeriram a importância de revisar sua segurança na blockchain onde apenas o bytecode da Ethereum Virtual Machine (EVM) está disponível. Nesse sentido, a engenharia reversa por meio de desmontagem e descompilação pode ser eficaz.
ghidra-EVM é um módulo Ghidra para engenharia reversa de contratos inteligentes. Ele pode ser usado para baixar o bytecode da Ethereum Virtual Machine (EVM) da blockchain Ethereum e desmontar e descompilar o contrato inteligente. Além disso, pode analisar o código de criação, encontrar métodos de contrato e localizar instruções inseguras.
Ele compreende um módulo de processador, carregador personalizado e plugin(s) que desmonta o bytecode da Ethereum VM (EVM) e gera um grafo de fluxo de controle (CFG) de um contrato inteligente.
A última versão usa a API Ghidra 9.1.2. Ela depende da biblioteca crytic evm_cfg_builder (https://github.com/crytic/evm_cfg_builder) para auxiliar o Ghidra no processo de geração de CFG.
Ghidra-evm consiste em:
O conteúdo do diretório ghidra-evm pode ser usado para criar um módulo Ghidra no Eclipse com processador e carregador, a fim de estender ou depurar ghidra_evm.

Ghidra-evm é licenciado e distribuído sob a AGPLv3.
| Script |
|---|
| Descrição |
|---|
| search_codecopy.py | Ao analisar o código de criação em um contrato inteligente, só podemos ver a função _dispatcher que usa CODECOPY para escrever o código de tempo de execução na memória. Este script procura instruções CODECOPY úteis e encontra os métodos do contrato inteligente ocultos na parte de tempo de execução do contrato. |
| search_dangerous_instructions.py | Instruções como CALL, CALLCODE, SELFDESTRUCT e DELEGATECALL podem às vezes ser abusadas para transferir fundos para outro contrato. Este script as encontra e cria um rótulo para cada ocorrência. |
| load_external_contract.py | Baixa o bytecode do contrato inteligente da blockchain para um arquivo .evm_h que pode ser carregado no ghidra-evm |
| Tutorial | Descrição |
|---|
| Utilização | Instruções simples de utilização com test.evm |
| Analisando bytecode de criação | Usando search_codecopy.py para analisar o código de criação e encontrar métodos ocultos |
| Procurando instruções perigosas | Usando search_dangerous_instructions.py para analisar uma ocorrência de SELFDESTRUCT |
| Baixando bytecode de contrato inteligente da blockchain para o Ghidra | Usando load_external_contract.py para baixar o bytecode EVM da blockchain para um arquivo .evm_h |