
EVMLISA는 이더 리움 블록 체인에 배치되어 LISA에 구축 된 스마트 계약의 EVM 바이트 코드에 대한 추상 해석을 기반으로 한 정적 분석기입니다. EVM Bytecode 스마트 계약이 주어지면 EVMLISA는 스마트 계약의 사운드 및 정확한 제어 흐름 그래프를 구축합니다.
EVMLISA는 동료 검토 출판물을 기반으로합니다
Vincenzo Arceri, Saverio Mattia Merenda, Greta Dolcetti, Luca Negrini, Luca Olivieri, Enea Zaffanella. "EVM 바이트 코드 제어 흐름 그래프의 사운드 구성을 향해" . ECOOP 2024와 공동으로 배치 된 Java와 같은 프로그램 (FTFJP 2024)에 대한 공식적인 기술에 관한 26 번째 ACM 국제 워크숍의 절차.
EVMLISA를 컴파일해야합니다.
당신은 필요합니다 :
git clone https://github.com/lisa-analyzer/evm-lisa.git
cd evm-lisaEVMLISA를 실행하기 전에 Etherscan API 키로 환경 변수를 설정했는지 확인하십시오. 아래 단계를 따라 환경 변수를 설정하십시오.
.env 라는 파일을 만들어 시작하십시오..env 파일 내부에 다음 줄을 추가하십시오. ETHERSCAN_API_KEY=<your_etherscan_api_key>
<your_etherscan_api_key> 교체하십시오.여기에서 Etherscan API 키를 생성하는 방법을 찾을 수 있습니다.
환경 변수를 설정하면 Docker 또는 Bash를 통해 EVMLISA를 실행할 수 있습니다.
컨테이너 빌드 :
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>분석하려는 이더 리움 스마트 계약의 주소로 교체하십시오.
프로젝트 구축 :
./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>분석하려는 이더 리움 스마트 계약의 주소로 교체하십시오.
이 명령은 지정된 스마트 계약의 분석 프로세스를 시작하여 계약의 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 바이트 코드 프로그램의 분석에서 EVMLISA는 특히 소스 코드에서 루프가 발생할 때 정밀도를 향상시키기 위해 초록 스택 세트의 도메인을 사용합니다.
EVMLISA는 추상 스택 파워 세트 도메인을 소개합니다
다음은 EVMLISA를 실행하는 방법의 예입니다. 이 예에서는 스택 크기, 스택 세트 크기, 라이브 스토리지 사용 및 CFG 덤프에 대한 특정 옵션을 사용하여 주소 0x7c21C4Bbd63D05Fa9F788e38d14e18FC52E9557B 에서 스마트 계약을 분석합니다.
./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
# #############