模糊测试:ConFuzzius:A data dependency-aware hybrid fuzzer for Ethereum smart contracts
1. 安装系统依赖
1.1 更新系统包
首先,更新系统包管理器的索引:
输入指令:
sudo apt-get update
安装 Python 3.8 Ubuntu 18.04 默认没有 Python 3.8,需要手动添加存储库并安装:
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.8 python3.8-dev python3.8-distutils
将 Python 3.8 设置为默认 更新 update-alternatives 以使用 Python 3.8:
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
sudo update-alternatives --config python3
安装 pip(Python 包管理器):
sudo apt-get install python3-pip
2 安装 Solidity 编译器
ConFuzzius 依赖 Solidity 编译器来编译智能合约。安装特定版本的 Solidity 编译器 v0.4.26:
2.1 添加 Ethereum PPA 仓库
首先,你需要添加 Ethereum 的 PPA 仓库,这个仓库包含不同版本的 Solidity 编译器。
sudo add-apt-repository ppa:ethereum/ethereum
(apt_pkg 模块存在于 Python 2.7 和 Python 3.6 的 dist-packages 目录中,没有针对 Python 3.8 的版本,Ubuntu 18.04.6 默认安装的 Python 版本是 Python 3.6,Python 3.8 环境下无法识别 apt_pkg 模块,apt_pkg 模块与 Python 3.8 不完全兼容,所以为了为了确保系统工具正常运行,建议临时切换回 Python 3.6,执行系统相关操作,再切回 Python 3.8)
2.1.1 临时切换回 Python 3.6
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
sudo update-alternatives --config python3
选择 Python 3.6 为默认版本。
2.1.2 添加 PPA
和上述指令一样
2.1.3 安装所需软件
sudo apt-get update
sudo apt-get install solc
2.2 安装特定版本的 Solidity
安装 0.4.26 版本的 Solidity 编译器:
sudo apt-get install solc=0.4.26-1ubuntu1
2.3锁定 Solidity 版本
为了避免意外升级到较新的 Solidity 版本,可以通过以下命令将该版本锁定:
sudo apt-mark hold solc
2.4验证安装
solc --version
(另一种方法:
使用 solc-select 来管理多个版本的 Solidity 编译器
1. 安装 solc-select
sudo apt-get install python3-pip
sudo pip3 install solc-select(这个可能会超时,建议使用国内的PyPI镜像源,本人使用的清华源:sudo pip3 install solc-select -i https://pypi.tuna.tsinghua.edu.cn/simple)
2. 使用 solc-select 安装 Solidity 0.4.26
sudo solc-select install 0.4.26
3. 选择0.4.26 作为当前使用的版本:
sudo solc-select use 0.4.26
4. 验证安装的版本
solc --version
(
执行solc --version之后会可能会出现bash: /usr/bin/solc: 没有那个文件或目录的错误,是因为solc-select 安装的位置没有被正确配置到系统的 PATH 中。
4.1 使用 find 命令查找
运行以下命令,查找 solc 文件:
sudo find / -name solc 2>/dev/null
这里的 2>/dev/null 是为了忽略权限不足的错误信息。
我输入指令出现的这个:
Ubuntu@ubuntu-virtual-machine:~$ sudo find / -name solc 2>/dev/null
/usr/local/bin/solc
证明我找到了 solc 的路径在 /usr/local/bin/solc。接下来,就可以用以下步骤来确保系统能够找到并使用它:
4.2 确保 /usr/local/bin 在 PATH 中
你需要确认 /usr/local/bin 是否在你的 PATH 环境变量中。如果不在,你可以添加它:
编辑 ~/.bashrc 文件:
nano ~/.bashrc
在文件末尾添加以下行:
export PATH=$PATH:/usr/local/bin(我的路径是/usr/local/bin)
保存并退出编辑器(保存:ctrl+o,保存之后点击enter,退出:ctrl+x)
然后重新加载 ~/.bashrc:
source ~/.bashrc
4.3 确认 solc 可用
重新加载配置文件后,确认 solc 命令是否有效:
solc --version
)
(
使用 solc-select 时,可以直接进行安装和版本选择,无需额外添加 Ethereum 的 PPA。
1.安装 solc-select。
2.使用 solc-select 安装并切换到指定版本的 Solidity。
如果准备使用 apt 来管理 Solidity 版本,那么需要添加 Ethereum PPA 并使用 apt-get install solc=<version> 来安装特定版本。)
安装完成后切换回 Python 3.8
完成操作后,可以将 Python 版本切换回 3.8:
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2
sudo update-alternatives --config python3
3. 安装 Z3 Prover
3.1 下载 Z3 4.8.5 版本源码:
wget https://github.com/Z3Prover/z3/archive/z3-4.8.5.tar.gz
tar -xvzf z3-4.8.5.tar.gz
cd z3-z3-4.8.5
3.2 编译并安装 Z3:
python3 scripts/mk_make.py --python
cd build
make
sudo make install
4. 安装 Fuzzer 和依赖
4.1 克隆 ConFuzzius 项目 如果没有项目代码,请先克隆 ConFuzzius 仓库:
git clone https://github.com/christoftorres/ConFuzzius.git
cd ConFuzzius
4.2 安装 requirements.txt 中的依赖 安装 requirements.txt 中列出的依赖:
pip3 install web3==4.8.3 py-evm==0.3.0a1 py-solc-x==1.1.1 z3-solver==4.8.5.0 psutil==5.7.2(会出现网络延迟,推荐使用阿里云镜像)
可能会出现cytoolz 包在构建过程中需要 Cython的错误
解决办法:
使用其他镜像源来安装 Cython。例如,使用清华大学的镜像源:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple cython
再次执行命令
pip3 install web3==4.8.3 py-evm==0.3.0a1 py-solc-x==1.1.1 z3-solver==4.8.5.0 psutil==5.7.2
5. 运行 ConFuzzius
使用以下命令运行 ConFuzzius 进行本地 fuzzing(离链)测试:
python3 fuzzer/main.py -s examples/TokenSale/contracts/TokenSale.sol -c TokenSale --solc v0.4.26 --evm byzantium
出现confuzzius标志证明运行成功:
再次打开vm的时候会遇到终端打不开的问题,是因为有两个python环境导致的,所以可以在主目录内右键confuzzius文件选择在终端内打开conffuzzius文件。
标签:ConFuzzius,Python,安装,sudo,solc,apt,复现,install,过程 From: https://blog.csdn.net/kiligcdn/article/details/142030229