oyente—合约漏洞检测工具使用说明

Oyente符号执行工具

该工具是开源项目,支持4种漏洞的检测,具体的如何使用相关信息使用方式可以参考https://github.com/enzymefinance/oyente

该工具分析对象是字节码,对合约的编译器版本有要求,使用docker运行时只能检测出低于solc 0.4.21以下的;源码安装,提高solc的版本不知道是不是可以扩大编译器范围。

漏洞类型

oyente.py :https://pypi.org/project/oyente/#description

该工具有三个版本,最新版本0.2.7可以检测出的漏洞类型比论文给出的多


论文给出了4种漏洞类型

更新版本增加了漏洞类型(能够检测出的漏洞类型)


环境依赖安装

solc&go-ethererum

(1)编译器solc安装,编译器版本不要求可以使用下面命令行

$ sudo add-apt-repository ppa:ethereum/ethereum

$ sudo apt-get update

$ sudo apt-get install solc

$ solc–version


  编译器版本要求多个,可以使用solc版本管理工具

gitclonehttps://github.com/crytic/solc-select.git

./solc-select/scripts/install.sh

具体教程:https://blog.csdn.net/xianyuzhangone/article/details/109724567


(2)Go-ethererum客户端安装

Ubuntu可以使用下面命令行安装

$ sudo apt-getinstall software-properties-common

$ sudo add-apt-repository -y ppa:ethereum/ethereum

$ sudo apt-get update

$ sudo apt-get install ethereum

版本如下:



Z3求解器

    (1)源码下载https://github.com/Z3Prover/z3/releases/tag/z3-4.5.0

    (2)使用python安装(python3.8)

$ python3 scripts/mk_make.py --python

$ cd build

$ make   //这一步时间比较长

$ sudo make install

注:

之前由于python2和python3共存,导致安装老是出现缺包的现象,只用python3也是可以安装z3,并且还能安装web3

编译过程有加载gcc,可能之前也有一个原因没有gcc导致编译不成功


库依赖

安装request、web3包(python3.6.+支持)

$ pip3 install requests

$ pip3 install web3

运行oyente

源码安装运行

oyente支持python2,但是依赖的包支持python3,因此还是要解决python2和python3共存的问题

源码安装还未调试成功,主要的问题是python版本不一致

使用virtualenv,先安装

sudo pip3 install virtualenv

下载源码:https://github.com/enzymefinance/oyente


Docker运行

使用docker运行,不需要单独进行环境依赖的配置

该工具已有封装好的docker容器,直接使用这个方式避免python版本问题,更方便使用

$ docker pull luongnguyen/oyente  //需要进入root,否则会出现权限问题

$ docker run -i -t luongnguyen/oyente

$ cd /oyente/oyente

$ python oyente.py -s greeter.sol

$ python oyente.py --help //可以查看更多指令

检测结果

运行工具给的案例


检测自己的合约

将合约源码文件加入到docker容器中

docker相关命令学习

查看运行的docker容器:docker ps –a

停止容器:docker stop CONTAINER ID

进入容器:docker exec -it 40c35d4e3c48 /bin/bash

从docker复制文件到宿主机

docker

cp containerName:[file path] [path in pc],如下的例子

dockercp agitated_driscoll:/oyente/oyente/greeter.sol Downloads/tools

从宿主机复制文件到容器

例子:agitated_driscoll为容器名

检测自己合约0x000e4b8d275cbe6af5c01a73bab484282317d8bb.sol结果:

你可能感兴趣的:(oyente—合约漏洞检测工具使用说明)