首页 > 其他分享 >ConFuzzius复现过程

ConFuzzius复现过程

时间:2024-09-08 17:51:21浏览次数:11  
标签:ConFuzzius Python 安装 sudo solc apt 复现 install 过程

模糊测试: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

相关文章

  • helm chart rollback实现过程是什么?
    HelmChart的回滚(rollback)功能允许用户将应用程序恢复到先前的版本。这一过程涉及多个步骤和关键组件。以下是HelmChart回滚的实现过程:1.Release版本管理每次安装或升级Chart时,Helm会为该Release创建一个新的版本,并将其状态保存在Kubernetes集群中。每个版本包含:......
  • Linux 下 C/C++ 程序编译的过程
    目录一、GCC工具链二、编译过程1、预处理2、编译3、汇编4、链接本文将介绍如何将C/C++语言编写的程序转换成为处理器能够执行的二进制代码的过程,包括四个步骤:预处理(Preprocessing)编译(Compilation)汇编(Assembly)链接(Linking)。在此之前,首先来看一下GCC工具链。......
  • linux启动过程
    当按下电源按钮启动Linux时,幕后发生了什么?一个名为BIOS或UEFI的程序会启动运行;改程序的基本用途是让计算机所有主要部分做好操作准备(这些部分包括:键盘,屏幕硬盘等)POST检查;测试可确保在安全打开所有设备之前,所有不同的硬件都正常工作;如果POST发现问题,通常会在屏幕上显示错误......
  • 研发管理过程案例分析-不文明文字短信事件
    背景     测试工程师因为项目没有部署测试环境,在生产环境编写测试短信,因为测试测试时使用了真实手机号码,使用了不文明测试文字短信发送到客户手机上。最终造成不良影响。对于这个事件责任判定应该是如何?除了测试工程师有主要责任,技术负责人有责任吗?项目经理有责任吗?责任判......
  • 从计组中从重温C中浮点数表示及C程序翻译过程
    目录移码​编辑 传统浮点表示格式浮点数的存储(ieee754)->修炼内功例子:  ​编辑浮点数取的过程  C程序翻译过程移码 传统浮点表示格式浮点数的存储(ieee754)->修炼内功根据国际标准IEEE(电⽓和电⼦⼯程协会) 32位例子:  64位  IEEE754对有效......
  • 「漏洞复现」全程云OA AttachFile/UploadFile 任意文件上传漏洞
    0x01 免责声明请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作者无关,需......
  • Mininet MAC地址学习:通过Mininet模拟二层交换机和两个主机,通过两个主机通信来了解交换
    一.MAC地址学习1.登录我们创建mininet的虚拟机,创建一个线型拓扑,控制器设置为无。2.查看全部节点,查看链路信息,然后查看节点信息3.再打开一个终端(Terminal窗口2),然后打开交换机s1和交换机s2的二层(因为交换机s1和交换机s2是两个SDN交换机,在启动Mininet时没有指定任何控制器,交......
  • 结合Transformer的YOLOv8多模态 融合可见光+红外光(RGB+IR)双输入 完美复现论文【附代
    文章目录前言视频效果代码获取文章概述必要环境一、模型训练1、定义数据1.1、数据集结构1.2、定义data.yaml2、运行方法运行效果二、模型验证运行方法运行效果三、模型推理1.参数定义2.运行方法运行效果四、效果展示白天夜间总结前言这期博客是在上期博......
  • 不同node上的Pod之间的通信过程
    在Kubernetes(K8s)中,不同节点上的Pod之间的通信是通过一套复杂的网络机制实现的。以下是不同节点上Pod之间通信的主要过程:1.网络模型K8s遵循“每个Pod都有一个唯一IP地址”的网络模型,确保集群内的Pod可以直接通过IP地址互相访问。这意味着无论Pod位于哪个节点,它们都可以通过其分......
  • 简述Pod创建过程
    在Kubernetes(K8s)中,Pod是最基本的部署单位,其创建过程涉及多个步骤。以下是Pod创建的简要流程:1.定义Pod规范用户通过YAML或JSON文件定义Pod的规格(spec),包括容器镜像、环境变量、存储卷等信息。2.提交请求用户使用kubectl命令行工具或K8sAPI将Pod的定义提交给Kubernetes集群。......