
Ghidra-Modul zum Disassemblieren, Dekompilieren und Analysieren von Ethereum-Smart-Contract-Bytecode. Erkennt unsichere Anweisungen, extrahiert versteckte Methoden und erstellt Kontrollflussgraphen für die Sicherheitsprüfung.

In den letzten Jahren haben Angriffe auf bereitgestellte Smart Contracts in der Ethereum-Blockchain aufgrund von Programmierfehlern zu erheblichen Diebstählen von Geldern geführt. Da Smart Contracts nach der Kompilierung und Bereitstellung schwer zu ändern und zu aktualisieren sind, haben verschiedene Praktiker die Bedeutung der Überprüfung ihrer Sicherheit in der Blockchain betont, wo nur der Bytecode der Ethereum Virtual Machine (EVM) verfügbar ist. In dieser Hinsicht kann Reverse Engineering durch Disassemblierung und Dekompilierung effektiv sein.
ghidra-EVM ist ein Ghidra-Modul für das Reverse Engineering von Smart Contracts. Es kann verwendet werden, um Ethereum Virtual Machine (EVM) Bytecode aus der Ethereum-Blockchain herunterzuladen und den Smart Contract zu disassemblieren und zu dekompilieren. Darüber hinaus kann es Erstellungs-Code analysieren, Vertragsmethoden finden und unsichere Anweisungen lokalisieren.
Es besteht aus einem Prozessormodul, einem benutzerdefinierten Lader und Plugins, die Ethereum VM (EVM) Bytecode disassemblieren und einen Kontrollflussgraphen (CFG) eines Smart Contracts generieren.
Die letzte Version verwendet die Ghidra 9.1.2 API. Sie basiert auf der crytic evm_cfg_builder-Bibliothek (https://github.com/crytic/evm_cfg_builder), um Ghidra beim CFG-Erstellungsprozess zu unterstützen.
Ghidra-evm besteht aus:
Der Inhalt des ghidra-evm-Verzeichnisses kann verwendet werden, um ein Ghidra-Modul in Eclipse mit Prozessor und Lader zu erstellen, um ghidra_evm zu erweitern oder zu debuggen.

| Skript | Beschreibung |
|---|---|
| teether | Es markiert den kritischen Pfad in Ghidra, bevor der Exploit generiert wird. Erfordert teether. |
Ghidra-evm ist unter der AGPLv3 lizenziert und verbreitet.
| Skript | Beschreibung |
|---|
| search_codecopy.py | Bei der Analyse des Erstellungs-Codes in einem Smart Contract sehen wir nur die _dispatcher-Funktion, die CODECOPY verwendet, um den Laufzeitcode in den Speicher zu schreiben. Dieses Skript sucht nach nützlichen CODECOPY-Befehlen und findet die Smart Contract-Methoden, die im Laufzeitteil des Vertrags versteckt sind. |
| search_dangerous_instructions.py | Anweisungen wie CALL, CALLCODE, SELFDESTRUCT und DELEGATECALL können manchmal missbraucht werden, um Gelder auf einen anderen Vertrag zu übertragen. Dieses Skript findet sie und erstellt für jedes Vorkommen eine Markierung. |
| load_external_contract.py | Lädt Smart Contract Bytecode aus der Blockchain in eine .evm_h-Datei herunter, die in ghidra-evm geladen werden kann. |
| Tutorial | Beschreibung |
|---|
| Nutzung | Einfache Nutzungsanweisungen mit test.evm |
| Analyse des Erstellungs-Bytecodes | Verwendung von search_codecopy.py zur Analyse des Erstellungs-Codes und zum Auffinden verborgener Methoden |
| Suche nach gefährlichen Anweisungen | Verwendung von search_dangerous_instructions.py zur Analyse eines SELFDESTRUCT-Vorkommnisses |
| Herunterladen von Smart Contract Bytecode aus der Blockchain in Ghidra | Verwendung von load_external_contract.py zum Herunterladen von EVM-Bytecode aus der Blockchain in eine .evm_h-Datei |