Oyente:智能合约漏洞检测工具的安装与使用
写在前面
- 当你阅读到这篇 博客 时,大概率你已经阅读并尝试过 Oyente 官方安装指导,甚至可能还在其它地方搜过安装教程,如果没有就当我没说。。。
- 那为什么在有各种版本的教程的情况下我依旧去写一个新的教程呢?这是因为我觉得其它教程解释的不够完整,安装下来容易出现问题。所以我选择花费时间去写一个我认为相对完整一点的安装教程,希望能帮助大家,能让大家少走一点弯路,不要浪费太多时间在工具的安装上。
- 本教程不是唯一的安装方法,可能还有其他的方法。
- 如何在 Docker 中安装就不多说了,比较简单,跟着官方文档走就行了,不需要考虑环境问题。本博客主要介绍在 Ubuntu 中的安装。
- Ubuntu 更换国内软件源,go 和 python 更换国内下载源应该不需要多说吧?
- 使用系统版本:Ubuntu 18.04
几个坑
python 的版本要大于 3.5,很多错误都是由于 python 的版本错误而导致的。如果同时有 python2 和 python3,所有命令使用 python3 和 pip3,不要用python 和 pip/pip2(如果你没安装python2,python 命令就是指代 python3,那你可以选择使用 python 命令。
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
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
安装 老版本的 geth 1.7.3 可能也会带来一个坑,geth 1.7.3 需要 go 的版本大于等于 1.7,但是 go 的版本过高在构建 geth 时也会出现问题,在安装 go-ethereum v1.7.3 部分再详细说明。
Oyente 目前只支持 z3. 4.5.1 。以下是安装高版本运行后的警告提示:
WARNING:root:You are using an untested version of z3. 4.5.1 is the officially tested version
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 ======
参考文章
- enzymefinance/oyente: An Analysis Tool for Smart Contracts (github.com)
- hxy-daniel/oyente-study (github.com)
- oyente—合约漏洞检测工具安装_5imple的博客-CSDN博客
- Oyente搭建,框架结构以及helloworld案例解析(一)_小水的博客-CSDN博客
- 常用linux命令&&Ubuntu安装z3库及使用_Y1seco的博客-CSDN博客
Oyente:智能合约漏洞检测工具的安装与使用相关推荐
- 区块链论文7(oyente智能合约漏洞检测工具)
Making Smart Contracts Smarter 文章路径 参考链接1 参考链接2 参考链接3 Abstract: Cryptocurrencies record transactions ...
- oyente—合约漏洞检测工具安装
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 oyente-合约漏洞检测工具安装 前言 一.oyente是什么? 二.安装 1.在docker安装 2.linux安装 1.首先就是 ...
- 智能合约自动检测工具『链必验』,如何带你解锁Web3.0世界
在我们发布[链必验]新版本之后,目前已有大批开发者前来试用,今天,我们还需要详细介绍这款工具. [链必验]智能合约自动检测工具,可用来检测区块链智能合约漏洞.平台针对每个用户模拟了一条单独的测试链,用 ...
- 基于GNN的智能合约漏洞检测(tmp)方法部分翻译(1)
背景 实在是没办法,不翻译印象不深... 我们的方法 为了解决现有工具在智能合约检测方面的不足,我们提出了一种超出传统基于规则的框架的方法.特别地,我们根据程序中的数据流和控制流关系将智能合约源代码提 ...
- 基于GNN的智能合约漏洞检测(tmp)方法部分翻译(2)
合约图的规范化 大多数图神经网络在信息传播时都是内在的平等的,忽略了某些节点更重要的作用.而且,不同的合约源代码生成不同的图,从而阻碍了图神经网络的训练.因此,我们提出了一种节点消除过程来实现图的规范 ...
- Fabric智能合约安全检测工具 讨论帖
最近闲来无事,思考对Fabric的智能合约进行安全检测,检测手段具有通用性,也应用到其他合约代码.目前考虑支持Golang 智能合约安全检测,搭建Demo发现技术难度不大,解析AST树,匹配相应的ch ...
- secscan-authcheck(越权漏洞检测工具) 安装总结
1.Github地址 https://github.com/ztosec/secscan-authcheck 启动和安装教程github上面有教程,这里不再叙述 2.Burpsuite 插件地址 刚开 ...
- 这些智能合约漏洞,可能会影响你的账户安全!
摘要:区块链联盟链智能合约形式化验证揭秘,解释了我们为什么要对区块链上的智能合约进行形式化验证,以及形式化验证的分类和业界针对每种分类所推出的形式化验证工具,最后作者描述了一下目前形式化验证的种种方法 ...
- truffle (ETH以太坊智能合约集成开发工具) 入门教程
truffle (ETH以太坊智能合约集成开发工具) 入门教程 前言 在你了解区块链开发之前,你有必要了解区块链的一些基础知识,什么是DApp,DApp与传统app的区别, 什么是以太坊,以太坊中的智 ...
最新文章
- ModuleNotFoundError: No module named ‘scipy.spatial.transform._rotation_groups‘
- Windows下安装Z3的Python3版
- P3979 遥远的国度
- hdu 4771 Stealing Harry Potter#39;s Precious(bfs)
- 魅族大数据之流平台设计部署实践--转
- 【笔记 】栈底层 循环队列的处理 链栈 链队列
- Unity将来时:IL2CPP是什么?
- document.getElementsByName 标准
- 操作系统动态库调用过程
- jq如何在打开新的页面 关闭之前同链接的页面_教你如何“抢”其他域名的权重...
- python制作的游戏如何转化为swf_从纯Python中的Flash文件(.swf)获取维度
- hive udaf_Hive自定义函数
- MongoDB数据库(二):增删查改
- 从两个应用突然流行来看,机会永远存在
- paip.模块化与面向对象的关系以及实现
- FreeBSD下使用Blogbio写cnblogs博客
- 《程序员代码面试指南》第五章 字符串问题 字符串匹配问题
- echarts 折线图y轴自定义 使用icon
- 项目过程管理(十七)结项
- 网上订餐系统python程序代码_网上订餐系统源代码