rattle
1.0.0

Rattleは、展開されたスマートコントラクトに取り組むように設計されたEVMバイナリ静的分析フレームワークです。 RattleはEVMバイト文字列を取り、フロー依存分析を使用して元のコントロールフローグラフを回復し、制御フローグラフをSSA/Infiniteレジスタフォームに持ち上げ、SSAを最適化し、DUP、スワップ、プッシュ、ポップを削除します。スタックマシンからSSAフォームへの変換は、すべてのEVM命令の60%以上を削除し、やり取りしているスマートコントラクトを読みたい人にはるかに友好的なインターフェイスを提示します。
python3 rattle-cli.py --input inputs/kingofether/KingOfTheEtherThrone.bin -O次のようなレジスタマシン出力を生成します:

関数は回復され、分割されます。さらに、関数引数、メモリの場所、およびストレージの場所が回復します。
ラトルは、ランタイムコントラクトヘックスストリングで実行されます。
契約でガラガラを実行している場合は、Solidityでコンパイルできます。 --bin-runtimeオプションを使用して、ヘッダーから取り除きます。
$ solc --bin-runtime KingOfTheEtherThrone.sol 2> /dev/null | tail -n1 > contract.bin Python依存関係をインストールするには、これらのコマンドを実行します。
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtGraphVizをインストールするには、次のコマンドを実行します。
Linux:
sudo apt-get graphvismacos:
brew install graphvizこのような構文エラーが発生した場合:
File "rattle-cli.py" , line 16
def main () -> None :
^
SyntaxError : invalid syntaxPython3の代わりにPython2を使用してRattleを実行した可能性があります。
ガラガラのデザインと機能の詳細については、ここで注釈が付けられている私の偵察モントリオールのプレゼンテーションを参照してください。
Rattleは、AGPLV3ライセンスの下でライセンスおよび配布されています。用語の例外を探している場合は、お問い合わせください。