
イーサリアムスマートコントラクトのバイトコードを逆アセンブル、逆コンパイル、解析するためのGhidraモジュール。安全でない命令を検出し、隠されたメソッドを抽出し、セキュリティ監査のための制御フローグラフを生成します。

過去数年、イーサリアムブロックチェーンにデプロイされたスマートコントラクトへの攻撃により、プログラミングのミスによって多額の資金が盗難される結果となっています。スマートコントラクトは一度コンパイルされてデプロイされると、修正や更新が複雑であるため、多くの実務者が、イーサリアム仮想マシン(EVM)のバイトコードのみが利用可能なブロックチェーン上でそのセキュリティをレビューすることの重要性を提唱しています。この点において、逆アセンブルと逆コンパイルによるリバースエンジニアリングは効果的です。
ghidra-EVMは、スマートコントラクトのリバースエンジニアリングのためのGhidraモジュールです。イーサリアムブロックチェーンからEVMバイトコードをダウンロードし、スマートコントラクトを逆アセンブルおよび逆コンパイルするために使用できます。さらに、作成コードの分析、コントラクトメソッドの発見、安全でない命令の特定を行うことができます。
プロセッサモジュール、カスタムローダー、およびEVMバイトコードを逆アセンブルしスマートコントラクトの制御フローグラフ(CFG)を生成するプラグインで構成されています。
最新バージョンはGhidra 9.1.2 APIを使用しています。CFG生成プロセスでGhidraを支援するために、crytic evm_cfg_builderライブラリ(https://github.com/crytic/evm_cfg_builder)に依存しています。
Ghidra-evmは以下で構成されています:
| Script | Description |
|---|---|
| search_codecopy.py | スマートコントラクトの作成コードを分析する際、CODECOPYを使用してランタイムコードをメモリに書き込むディスパッチャ関数のみ表示されます。このスクリプトは有用なCODECOPY命令を探し、コントラクトのランタイム部分に隠されたスマートコントラクトメソッドを見つけます。 |
| search_dangerous_instructions.py | CALL、CALLCODE、SELFDESTRUCT、DELEGATECALLなどの命令は、別のコントラクトに資金を転送するために悪用される可能性があります。このスクリプトはそれらを見つけ、各出現にラベルを作成します。 |
| load_external_contract.py | ブロックチェーンからスマートコントラクトのバイトコードをダウンロードし、ghidra-evmにロード可能な.evm_hファイルに保存します。 |
ghidra-evmディレクトリの内容は、ghidra_evmを拡張またはデバッグするために、Eclipseでプロセッサとローダーを持つGhidraモジュールを作成するために使用できます。

Ghidra-evmはAGPLv3の下でライセンスされ配布されています。
| Tutorial | Description |
|---|
| 利用方法 | test.evmを使用した簡単な利用手順 |
| 作成バイトコードの分析 | search_codecopy.pyを使用した作成コードの分析と隠されたメソッドの発見 |
| 危険な命令の検索 | search_dangerous_instructions.pyを使用したSELFDESTRUCT発生の分析 |
| ブロックチェーンからGhidraへのスマートコントラクトバイトコードのダウンロード | load_external_contract.pyを使用したブロックチェーンから.evm_hファイルへのEVMバイトコードのダウンロード |