Oyente:智能合约漏洞检测工具的安装与使用

写在前面

  1. 当你阅读到这篇 博客 时,大概率你已经阅读并尝试过 Oyente 官方安装指导,甚至可能还在其它地方搜过安装教程,如果没有就当我没说。。。
  2. 那为什么在有各种版本的教程的情况下我依旧去写一个新的教程呢?这是因为我觉得其它教程解释的不够完整,安装下来容易出现问题。所以我选择花费时间去写一个我认为相对完整一点的安装教程,希望能帮助大家,能让大家少走一点弯路,不要浪费太多时间在工具的安装上。
  3. 本教程不是唯一的安装方法,可能还有其他的方法。
  4. 如何在 Docker 中安装就不多说了,比较简单,跟着官方文档走就行了,不需要考虑环境问题。本博客主要介绍在 Ubuntu 中的安装。
  5. Ubuntu 更换国内软件源,go 和 python 更换国内下载源应该不需要多说吧?
  6. 使用系统版本:Ubuntu 18.04

几个坑

  1. python 的版本要大于 3.5,很多错误都是由于 python 的版本错误而导致的。如果同时有 python2 和 python3,所有命令使用 python3 和 pip3,不要用python 和 pip/pip2(如果你没安装python2,python 命令就是指代 python3,那你可以选择使用 python 命令。

  2. Oyente 目前只支持 0.4.19 以下的 solidity 版本,所以直接按照官方文档指导的方法来安装是不行的,最好的办法是使用 solc-select 来管理安装不同版本的solidity。以下是安装高版本运行后的警告提示:

    WARNING:root:You are using solc version 0.8.10, The latest supported version is 0.4.19
    
  3. Oyente 目前只支持 geth 1.7.3 和 evm 1.7.3 。以下是安装高版本运行后的警告提示:

    WARNING:root:You are using evm version 1.10.14. The supported version is 1.7.3
    
  4. 安装 老版本的 geth 1.7.3 可能也会带来一个坑,geth 1.7.3 需要 go 的版本大于等于 1.7,但是 go 的版本过高在构建 geth 时也会出现问题,在安装 go-ethereum v1.7.3 部分再详细说明。

  5. Oyente 目前只支持 z3. 4.5.1 。以下是安装高版本运行后的警告提示:

    WARNING:root:You are using an untested version of z3. 4.5.1 is the officially tested version
    
  6. Oyente 官方文档中没有提到需要安装 crytic_compile 库,但是 input_helper 中又引入了这个库,所以我们需要额外通过 pip3 对其进行安装。但 crytic-compile 库安装版本不可以超过 v0.1.13,否则会出现错误:

    INFO:CryticCompile:Compilation warnings/errors on *.sol
    

    2021.12.14 更新:

    ​ solidity 版本不是 0.4.19, geth 和 evm 版本不是 1.7.3,z3 版本不是 4.5.1 都只是会发出以上描述的警告提醒,喜欢动手的小伙伴可以测一测用什么版本会出问题。

安装

安装 python3、go 等应该不需要强调了吧。。。

1. 安装 solc 0.4.19

# 安装 solc-select
pip3 install solc-select

# 使用 solc-select 安装 solc 0.4.19
solc-select install 0.4.19

# 使用 solc 0.4.19 版本
solc-select use 0.4.19

# 查看 solc 版本,验证是否安装成功(如果无法查看,关闭终端重新打开)
solc --version 

2. 安装 go-ethereum v1.7.3

# 克隆 go-ethereum
git clone https://github.com/ethereum/go-ethereum.git

# 切换分支
git checkout v1.7.3

# 构建 geth(使用 make geth 指令不会构建 evm)
# 如果这里报错,让你升级 go 版本,但你的 go 版本明明大于 1.7,那么可以重新安装个 go 1.7,安装方法自行百度。
# 就像我明明使用的是 go 1.17.3,远大于 go 1.7,但是也报上面的错,猜测是因为后续版本支持 go mod 有关。
make all

# 配置环境
sudo vim ~/.bashrc

#  增加 geth bin 目录到环境变量
# 以下路径根据实际安装路径进行修改
export PATH=$PATH:$HOME/go-ethereum/build/bin

# 退出并使修改命令生效
source ~/.bashrc

# 查看 geth 版本
geth version

3. 安装 z3-solver 4.5.1.0

# 通过 python3 来安装 z3-solver 4.5.1.0
pip3 install z3-solver==4.5.1.0

4. 安装 crytic-compile 0.1.13

pip3 install crytic-compile==0.1.13

5. (可选)安装 Requests library

# 这个库不安装应该也没事
pip3 install requests

6. (可选)安装 web3 library

# 这个库不安装应该也没事
pip3 install web3

7. 下载 Oyente

git clone https://github.com/enzymefinance/oyente.git

测试使用

1. 新建一个合约

# 新建目录
mkdir ~/test

# 新建 .sol 智能合约
vim ~/test/test.sol

【注】这里不在 oyente/oyente 目录中直接新建一个合约进行测试是因为会报错,原因不明,有研究的小伙伴可以指点下。

test.sol 合约

pragma solidity >=0.4.19;

contract test {
    function helloworld() pure public returns (string)
    {
        return "hello world";
    }
}

2. 测试

# 进入 oyente 目录
cd ~/oyente/oyente

# 评估本地合约
python3 oyente.py -s ~/test/test.sol

执行结果如下:

INFO:root:contract /home/jie/test/test.sol:test:
INFO:symExec:   ============ Results ===========
INFO:symExec:     EVM Code Coverage:                     99.5%
INFO:symExec:     Integer Underflow:                     False
INFO:symExec:     Integer Overflow:                      False
INFO:symExec:     Parity Multisig Bug 2:                 False
INFO:symExec:     Callstack Depth Attack Vulnerability:  False
INFO:symExec:     Transaction-Ordering Dependence (TOD): False
INFO:symExec:     Timestamp Dependency:                  False
INFO:symExec:     Re-Entrancy Vulnerability:             False
INFO:symExec:   ====== Analysis Completed ======

参考文章

  1. enzymefinance/oyente: An Analysis Tool for Smart Contracts (github.com)
  2. hxy-daniel/oyente-study (github.com)
  3. oyente—合约漏洞检测工具安装_5imple的博客-CSDN博客
  4. Oyente搭建,框架结构以及helloworld案例解析(一)_小水的博客-CSDN博客
  5. 常用linux命令&&Ubuntu安装z3库及使用_Y1seco的博客-CSDN博客
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
智能合约漏洞检测工具是用于检测智能合约中潜在漏洞的软件工具。目前市场上有多种智能合约漏洞检测工具,包括但不限于:Mythril、SmartCheck、Securify、Oyente、Solhint、Slither等。下面对这些工具进行简要分析和比较: 1. Mythril:一种基于Python的智能合约漏洞检测工具,可以自动检测以太坊智能合约中的漏洞。Mythril使用静态分析技术来检测合约中的漏洞,并支持多种漏洞类型的检测。 2. SmartCheck:一种基于Solidity的智能合约漏洞检测工具使用了一种基于符号执行的技术来检测合约中的漏洞。SmartCheck还支持自定义规则和插件。 3. Securify:一种基于静态分析的智能合约漏洞检测工具,支持检测多种漏洞类型。Securify使用了一种基于抽象解释的方法来检测合约中的漏洞。 4. Oyente:一种基于Python的智能合约漏洞检测工具使用了一种基于符号执行的技术来检测合约中的漏洞Oyente支持多种漏洞类型的检测,并提供了一种基于可视化的方式来展示检测结果。 5. Solhint:一种用于Solidity代码规范检查的工具,可以检查合约中的代码是否符合Solidity代码规范。Solhint支持多种代码规范,并可以自定义规范。 6. Slither:一种基于静态分析的智能合约漏洞检测工具,支持多种漏洞类型的检测。Slither使用了一种基于数据流分析的方法来检测合约中的漏洞。 综上所述,不同的智能合约漏洞检测工具使用了不同的技术和方法来检测合约中的漏洞,每种工具都有其独特的优势和劣势。在选择合适的工具时,需要根据具体的需求和场景进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值