
EVMLISA adalah penganalisa statis berdasarkan interpretasi abstrak untuk EVM bytecode kontrak pintar yang digunakan pada blockchain Ethereum dan dibangun di atas LISA. Diberikan kontrak pintar EVM Bytecode, EVMLISA membangun grafik kontrol yang tepat dan tepat dari kontrak pintar.
EVMLISA didasarkan pada publikasi peer-reviewed
Vincenzo Arceri, Saverio Mattia Merenda, Greta Dolcetti, Luca Negrini, Luca Olivieri, Enea Zaffanella. "Menuju Konstruksi Suara Grafik Alat Kontrol Bytecode EVM" . Dalam Prosiding Lokakarya Internasional ACM ke-26 tentang Teknik Formal untuk Program Seperti Java (FTFJP 2024), yang ditempatkan bersama dengan ECOOP 2024.
Mengkompilasi Evmlisa membutuhkan:
Anda perlu:
git clone https://github.com/lisa-analyzer/evm-lisa.git
cd evm-lisaSebelum menjalankan EVMLISA, pastikan Anda telah mengatur variabel lingkungan dengan kunci API Etherscan Anda. Ikuti langkah -langkah di bawah ini untuk mengatur variabel lingkungan:
.env dalam proyek EVMLISA..env , tambahkan baris berikut: ETHERSCAN_API_KEY=<your_etherscan_api_key>
<your_etherscan_api_key> dengan kunci API Etherscan Anda.Di sini Anda dapat menemukan cara menghasilkan kunci API Etherscan.
Setelah Anda mengatur variabel lingkungan, Anda dapat menjalankan EVMLISA melalui Docker atau melalui Bash.
Bangun wadah:
mkdir -p execution/docker &&
docker build -t evm-lisa:latest .
Maka Anda dapat menjalankan evmlisa dengan:
docker run --rm -it
-v $(pwd)/.env:/app/.env
-v $(pwd)/execution/docker:/app/execution/results
evm-lisa:latest
-a <smart_contract_address> [options]
-v $(pwd)/.env:/app/.env : pasang file .env .-v $(pwd)/execution/docker:/app/execution/results : Bagikan folder hasilnya.Ganti
<smart_contract_address>dengan alamat kontrak pintar Ethereum yang ingin Anda analisis.
Bangun proyek:
./gradlew buildBuat zip distribusi:
./gradlew distZipUnzip distribusi:
unzip build/distributions/evm-lisa.zip -d executionMaka Anda dapat menjalankan evmlisa dengan:
./execution/evm-lisa/bin/evm-lisa
-a < smart_contract_address > [options]Ganti
<smart_contract_address>dengan alamat kontrak pintar Ethereum yang ingin Anda analisis.
Perintah ini akan memulai proses analisis untuk kontrak pintar yang ditentukan, memberikan wawasan dan hasil berdasarkan bytecode EVM dari kontrak.
Options:
-a,--address <arg> address of an Ethereum smart contract
-b,--benchmark <arg> filepath of the benchmark suite (i.e., a list of smart contract addresses)
-C,--cores <arg> number of cores to use
-c,--dump-cfg dump the CFG
-d,--dump-analysis <arg> dump the analysis (html, dot)
-D,--download-bytecode download the bytecode, without analyzing it
-f,--filepath <arg> filepath of an EVM bytecode smart contract
-o,--output <arg> output directory path
-q,--stack-size <arg> maximal height of stack
-s,--dump-stats dump statistics
-S,--use-live-storage use the live storage in SLOAD
-w,--stack-set-size <arg> maximal size of stack sets
Dalam analisis program bytecode EVM, EVMLISA menggunakan domain set tumpukan abstrak untuk meningkatkan presisi, terutama ketika loop ditemui dalam kode sumber.
Evmlisa memperkenalkan domain Powerset Stack Abstrak
Berikut adalah contoh cara menjalankan EVMLISA. Dalam contoh ini, kami akan menganalisis kontrak pintar di alamat 0x7c21C4Bbd63D05Fa9F788e38d14e18FC52E9557B dengan opsi spesifik untuk ukuran tumpukan, ukuran set stack, penggunaan penyimpanan langsung dan pembangkit CFG:
./execution/evm-lisa/bin/evm-lisa
-a 0x7c21C4Bbd63D05Fa9F788e38d14e18FC52E9557B
--stack-size 64
--stack-set-size 10
--dump-stats
--use-live-storagedocker run --rm -it
-v $( pwd ) /.env:/app/.env
-v $( pwd ) /execution/docker:/app/execution/results
evm-lisa:latest
-a 0x7c21C4Bbd63D05Fa9F788e38d14e18FC52E9557B
--stack-size 64
--stack-set-size 10
--dump-stats
--use-live-storageGunakan
docker run -a stderruntuk membuang hanya laporan JSON sebagai output standar.
Output yang diharapkan adalah sebagai berikut:
# #############
Total opcodes : 344
Total jumps : 45
Resolved jumps : 44
Definitely unreachable jumps : 1
Maybe unreachable jumps : 0
Unsound jumps : 0
Maybe unsound jumps : 0
# #############