
Ghidra 모듈로 이더리움 스마트 계약 바이트코드를 디스어셈블링, 디컴파일링, 분석합니다. 안전하지 않은 명령어를 탐지하고, 숨겨진 메서드를 추출하며, 보안 감사를 위한 제어 흐름 그래프를 생성합니다.

지난 몇 년 동안 이더리움 블록체인에 배포된 스마트 컨트랙트에 대한 공격은 프로그래밍 실수로 인해 상당한 양의 자금이 도난당하는 결과를 초래했습니다. 스마트 컨트랙트는 한 번 컴파일되어 배포되면 수정 및 업데이트가 복잡하기 때문에, 다양한 실무자들은 이더리움 가상 머신(EVM) 바이트코드만 사용할 수 있는 블록체인에서 보안을 검토하는 것의 중요성을 제안해 왔습니다. 이러한 측면에서 디스어셈블 및 디컴파일을 통한 리버스 엔지니어링이 효과적일 수 있습니다.
ghidra-EVM은 스마트 컨트랙트 리버스 엔지니어링을 위한 Ghidra 모듈입니다. 이를 사용하여 이더리움 블록체인에서 이더리움 가상 머신(EVM) 바이트코드를 다운로드하고 스마트 컨트랙트를 디스어셈블 및 디컴파일할 수 있습니다. 또한 생성 코드를 분석하고, 컨트랙트 메서드를 찾고, 안전하지 않은 명령어를 찾을 수 있습니다.
프로세서 모듈, 사용자 정의 로더 및 플러그인으로 구성되어 있으며, 이더리움 VM(EVM) 바이트코드를 디스어셈블하고 스마트 컨트랙트의 제어 흐름 그래프(CFG)를 생성합니다.
최신 버전은 Ghidra 9.1.2 API를 사용합니다. CFG 생성 과정에서 Ghidra를 지원하기 위해 crytic evm_cfg_builder 라이브러리(https://github.com/crytic/evm_cfg_builder)에 의존합니다.
Ghidra-evm은 다음으로 구성됩니다:
| 스크립트 | 설명 |
|---|---|
| search_codecopy.py | 스마트 컨트랙트의 생성 코드를 분석할 때, CODECOPY를 사용하여 런타임 코드를 메모리에 쓰는 _dispatcher 함수만 볼 수 있습니다. 이 스크립트는 유용한 CODECOPY 명령어를 찾고 컨트랙트의 런타임 부분에 숨겨진 스마트 컨트랙트 메서드를 찾습니다. |
| search_dangerous_instructions.py | CALL, CALLCODE, SELFDESTRUCT 및 DELEGATECALL과 같은 명령어는 때때로 다른 컨트랙트로 자금을 이체하는 데 악용될 수 있습니다. 이 스크립트는 이러한 명령어를 찾고 각 발생에 대해 레이블을 생성합니다. |
| load_external_contract.py | 블록체인에서 스마트 컨트랙트 바이트 코드를 다운로드하여 ghidra-evm에 로드할 수 있는 .evm_h 파일로 저장합니다. |
ghidra-evm 디렉터리의 내용을 사용하여 ghidra_evm을 확장하거나 디버그하기 위해 Eclipse에서 프로세서 및 로더가 포함된 Ghidra 모듈을 생성할 수 있습니다.

Ghidra-evm은 AGPLv3에 따라 라이선스가 부여되며 배포됩니다.
| 튜토리얼 | 설명 |
|---|
| 사용법 | test.evm을 사용한 간단한 사용법 |
| 생성 바이트코드 분석 | search_codecopy.py를 사용하여 생성 코드를 분석하고 숨겨진 메서드 찾기 |
| 위험한 명령어 찾기 | search_dangerous_instructions.py를 사용하여 SELFDESTRUCT 발생 분석 |
| 블록체인에서 Ghidra로 스마트 컨트랙트 바이트코드 다운로드 | load_external_contract.py를 사용하여 블록체인에서 EVM 바이트 코드를 다운로드하여 .evm_h 파일로 저장 |