
Evmlisa هو محلل ثابت يعتمد على التفسير التجريدي لبرنامج EVM bytecode للعقود الذكية المنتشرة على ethereum blockchain ومبني على ليزا. بالنظر إلى عقد SMART EVM BYTECODE ، يقوم EVMLISA بإنشاء رسم بياني صوتي ودقيق للتدفق للعقد الذكي.
يعتمد Evmlisa على المنشور الذي استعرضه النظراء
Vincenzo Arceri ، Saverio Mattia Merenda ، Greta Dolcetti ، Luca Negrini ، Luca Olivieri ، Enea Zaffanella. "نحو بناء صوتي للرسوم البيانية لتدفق التحكم في تدفق EVM Bytecode" . في وقائع ورشة عمل 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> بمفتاح eTherscan API الخاص بك.هنا يمكنك العثور على كيفية إنشاء مفتاح 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]
.env -v $(pwd)/.env:/app/.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 Bytecode للعقد.
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 مجال 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
# #############