An artifact repository for EVM decompilation research.
- EVMpress: Precise Type Inference for Next-Generation EVM Decompilation: (link)
We open-source our dataset to facilitate research in EVM decompilation (link). This includes:
- Compiled bytecode for each contract.
- Metadata about each contract, including its bytecode and compilation details
- Ground truth mappings between source code and bytecode, including function and type information.
We do not include the collected source codes due to licensing restrictions and they are available via the collection step.
- Ubuntu 22.04+
- Dotnet 9+
- Python 3.8+
First, you can clone the repository using
git clone https://github.com/SoftSec-KAIST/EVMpress-artifact.git --recurse-submodules
💡 You can skip this step if you already have collected the source codes.
To build the dataset, you need to collect the contract source codes. We provide a script to automate this process, which downloads the codes from Etherscan. See this directory.
💡 You can skip this step if you already have downloaded the dataset.
Using the downloaded codes, you can compile the source codes and generate the ground truth mappings.
We provide a script to compile the Solidity compilers, which will modify the compilers to output the necessary information for ground truth generation (link). You can use this docker file to collect and compile the compiler source codes.
After compiling the compilers, you can use the provided scripts to compile the collected contract codes to generate the bytecode and the necessary information for ground truth generation. See this file.
After compiling the codes, you can use the provided scripts to generate the ground truth mappings. See this directory.
We provide evaluation scripts for the generated ground truth mappings. We compare EVMpress against other state-of-the-art decompilation tools such as Gigahorse and VarLifter.
For reproducibility, we use the commit 18ce2685 for Gigahorse, and the commit
47f9e681 for VarLifter. Especially, VarLifter has no support for executing
multiple instances at once, so we provide its modified version that allows for
parallel execution.
To run EVMpress, you can find this file.
To evaluate its result, you can find this file.
To run Gigahorse, you can use the following instruction:
python3 ./Implementation/Gigahorse/gigahorse.py --disable-inline -w {{output_dir}} {{hex_dir}}
To evaluate Gigahorse, you can find this file.
To run VarLifter, you can find this file.
To evaluate VarLifter, you can find this file.