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结果: