
Evmlisa является статическим анализатором, основанным на абстрактной интерпретации для EVM Bytecode интеллектуальных контрактов, развернутых на блокчейне Ethereum, и построенный на LISA. Учитывая смарт-контракт с байт-кодом EVM, Evmlisa создает звуковой и точный график управления смарт-контрактом.
Evmlisa основана на рецензируемой публикации
Vincenzo Arceri, Saverio Mattia Merenda, Greta Dolcetti, Luca Negrini, Luca Olivieri, Enea Zaffanella. «На пути к звуковой конструкции графиков управления потоком EVM» . В материалах 26-го международного семинара ACM по формальным методам для программ, подобных Java (FTFJP 2024), совместно с Ecoop 2024.
Компиляция evmlisa требует:
Вам нужно:
git clone https://github.com/lisa-analyzer/evm-lisa.git
cd evm-lisaПеред запуском Evmlisa убедитесь, что вы настроили переменную среды с вашим ключом API Etherscan. Следуйте приведенным ниже шагам, чтобы настроить переменную среды:
.env в проекте Evmlisa..env добавьте следующую строку: ETHERSCAN_API_KEY=<your_etherscan_api_key>
<your_etherscan_api_key> на ключ API Etherscan.Здесь вы можете найти, как генерировать ключ API Etherscan.
После того, как вы настроили переменную среды, вы можете запустить evmlisa через Docker или через Bash.
Создайте контейнер:
mkdir -p execution/docker &&
docker build -t evm-lisa:latest .
Тогда вы можете запустить evmlisa с:
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 : установить файл .env .-v $(pwd)/execution/docker:/app/execution/results : поделиться папкой результатов.Замените
<smart_contract_address>на адрес интеллектуального контракта Ethereum, который вы хотите проанализировать.
Создайте проект:
./gradlew buildСоздать распределение Zip:
./gradlew distZipРаспределить распределение:
unzip build/distributions/evm-lisa.zip -d executionТогда вы можете запустить evmlisa с:
./execution/evm-lisa/bin/evm-lisa
-a < smart_contract_address > [options]Замените
<smart_contract_address>на адрес интеллектуального контракта Ethereum, который вы хотите проанализировать.
Эта команда инициирует процесс анализа указанного смарт -контракта, предоставляя понимание и результаты на основе байт -кода EVM договора.
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
В анализе программ EVM Bytecode, Evmlisa использует домен наборов абстрактных стеков для повышения точности, особенно когда в исходном коде встречаются петли.
Evmlisa представляет домен Abstract Stack Powerset
Вот пример того, как запустить evmlisa. В этом примере мы проанализируем интеллектуальный контракт по адресу 0x7c21C4Bbd63D05Fa9F788e38d14e18FC52E9557B с конкретными параметрами для размера стека, размера стека, использованием живого хранилища и дампа 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-storageИспользуйте
docker run -a stderrчтобы сбросить только отчет JSON в качестве стандартного вывода.
Ожидаемый результат заключается в следующем:
# #############
Total opcodes : 344
Total jumps : 45
Resolved jumps : 44
Definitely unreachable jumps : 1
Maybe unreachable jumps : 0
Unsound jumps : 0
Maybe unsound jumps : 0
# #############