Oyente:智能合约漏洞检测工具的安装与使用
寫在前面
幾個坑
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.19Oyente 目前只支持 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 versionOyente 官方文檔中沒有提到需要安裝 crytic_compile 庫,但是 input_helper 中又引入了這個庫,所以我們需要額外通過 pip3 對其進行安裝。但 crytic-compile 庫安裝版本不可以超過 v0.1.13,否則會出現錯誤:
INFO:CryticCompile:Compilation warnings/errors on *.sol2021.12.14 更新:
? solidity 版本不是 0.4.19, geth 和 evm 版本不是 1.7.3,z3 版本不是 4.5.1 都只是會發(fā)出以上描述的警告提醒,喜歡動手的小伙伴可以測一測用什么版本會出問題。
安裝
安裝 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 --version2. 安裝 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,但是也報上面的錯,猜測是因為后續(xù)版本支持 go mod 有關。 make all# 配置環(huán)境 sudo vim ~/.bashrc# 增加 geth bin 目錄到環(huán)境變量 # 以下路徑根據實際安裝路徑進行修改 export PATH=$PATH:$HOME/go-ethereum/build/bin# 退出并使修改命令生效 source ~/.bashrc# 查看 geth 版本 geth version3. 安裝 z3-solver 4.5.1.0
# 通過 python3 來安裝 z3-solver 4.5.1.0 pip3 install z3-solver==4.5.1.04. 安裝 crytic-compile 0.1.13
pip3 install crytic-compile==0.1.135. (可選)安裝 Requests library
# 這個庫不安裝應該也沒事 pip3 install requests6. (可選)安裝 web3 library
# 這個庫不安裝應該也沒事 pip3 install web37. 下載 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執(zhí)行結果如下:
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 ======參考文章
總結
以上是生活随笔為你收集整理的Oyente:智能合约漏洞检测工具的安装与使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu安装firewalld 防火
- 下一篇: 解决Materialise Magics