
Rattle adalah kerangka analisis statis Biner EVM yang dirancang untuk bekerja pada kontrak pintar yang digunakan. Rattle mengambil string byte EVM, menggunakan analisis aliran-sensitif untuk memulihkan grafik aliran kontrol asli, mengangkat grafik aliran kontrol ke dalam bentuk register SSA/Infinite, dan mengoptimalkan SSA-menghapus dup, swap, dorongan, dan muncul. Konversi dari mesin tumpukan ke formulir SSA menghapus 60%+ dari semua instruksi EVM dan menyajikan antarmuka yang lebih ramah kepada mereka yang ingin membaca kontrak pintar yang mereka berinteraksi.
python3 rattle-cli.py --input inputs/kingofether/KingOfTheEtherThrone.bin -OAkan menghasilkan output mesin register seperti ini:

Fungsi dipulihkan dan dibagi. Selain itu, argumen fungsi, lokasi memori, dan lokasi penyimpanan dipulihkan.
Rattle berjalan pada string hex kontrak runtime.
Jika Anda menjalankan rattle pada kontrak, Anda dapat dikompilasi dengan soliditas, gunakan opsi --bin-runtime dan lepaskan header:
$ solc --bin-runtime KingOfTheEtherThrone.sol 2> /dev/null | tail -n1 > contract.bin Untuk menginstal dependensi Python, jalankan perintah ini:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtUntuk menginstal GraphViz, jalankan perintah berikut:
Linux:
sudo apt-get graphvisMacOS:
brew install graphvizJika Anda mendapatkan kesalahan sintaksis seperti ini:
File "rattle-cli.py" , line 16
def main () -> None :
^
SyntaxError : invalid syntaxAnda kemungkinan berlari mainan dengan python2 bukan python3.
Untuk detail lebih lanjut tentang desain dan fitur mainan, lihat presentasi Recon Montreal saya, yang dianotasi di sini.
Rattle dilisensikan dan didistribusikan di bawah lisensi AGPLV3. Hubungi kami jika Anda mencari pengecualian untuk persyaratan.