
Модуль Ghidra для дизассемблирования, декомпиляции и анализа байт-кода смарт-контрактов Ethereum. Обнаруживает небезопасные инструкции, извлекает скрытые методы и генерирует графы потоков управления для аудита безопасности.

За последние несколько лет атаки на развернутые смарт-контракты в блокчейне Ethereum привели к краже значительных сумм из-за ошибок программирования. Поскольку смарт-контракты после компиляции и развертывания сложны в модификации и обновлении, различные практики подчеркнули важность проверки их безопасности в блокчейне, где доступен только байт-код Ethereum Virtual Machine (EVM). В этом отношении реверс-инжиниринг через дизассемблирование и декомпиляцию может быть эффективным.
ghidra-EVM — это модуль Ghidra для реверс-инжиниринга смарт-контрактов. Его можно использовать для загрузки байт-кода Ethereum Virtual Machine (EVM) из блокчейна Ethereum, а также для дизассемблирования и декомпиляции смарт-контракта. Кроме того, он может анализировать код создания, находить методы контракта и выявлять небезопасные инструкции.
Он включает модуль процессора, собственный загрузчик и плагины, которые дизассемблируют байт-код Ethereum VM (EVM) и генерируют граф потока управления (CFG) смарт-контракта.
Последняя версия использует API Ghidra 9.1.2. Она полагается на библиотеку crytic evm_cfg_builder (https://github.com/crytic/evm_cfg_builder) для помощи Ghidra в процессе генерации CFG.
Ghidra-evm состоит из:
| Скрипт | Описание |
|---|---|
| search_codecopy.py | При анализе кода создания смарт-контракта мы видим только функцию _dispatcher, которая использует CODECOPY для записи кода выполнения в память. Этот скрипт ищет полезные инструкции CODECOPY и находит скрытые методы смарт-контракта в части контракта времени выполнения. |
| search_dangerous_instructions.py | Инструкции, такие как CALL, CALLCODE, SELFDESTRUCT и DELEGATECALL, иногда могут быть использованы для перевода средств на другой контракт. Этот скрипт находит их и создает метку для каждого вхождения. |
| load_external_contract.py | Загружает байт-код смарт-контракта из блокчейна в файл .evm_h, который можно загрузить в ghidra-evm |
Содержимое каталога ghidra-evm можно использовать для создания модуля Ghidra в Eclipse с процессором и загрузчиком для расширения или отладки ghidra_evm.

| Скрипт | Описание |
|---|---|
| teether | Он отмечает критический путь в Ghidra перед генерацией эксплойта. Требуется teether. |
Ghidra-evm лицензирован и распространяется под лицензией AGPLv3.
| Руководство | Описание |
|---|
| Использование | Простые инструкции по использованию с test.evm |
| Анализ байт-кода создания | Использование search_codecopy.py для анализа кода создания и поиска скрытых методов |
| Поиск опасных инструкций | Использование search_dangerous_instructions.py для анализа вхождения SELFDESTRUCT |
| Загрузка байт-кода смарт-контракта из блокчейна в Ghidra | Использование load_external_contract.py для загрузки байт-кода EVM из блокчейна в файл .evm_h |