Ethereum智能合约的符号执行工具包
项目描述
# Optik
Optik 是一套符号执行工具,用于协助智能合约模糊测试,允许其在 _混合_ 模式下运行。Optik 将我们的智能合约模糊测试工具 [Echidna](https://github.com/crytic/echidna) 与 [Maat](https://github.com/trailofbits/maat) 符号执行器结合在一起,该执行器重新播放模糊测试语料库,并通过添加新的输入来扩展它,从而提高覆盖率。
#### 当前限制
Optik 仍在开发中,不应用于实际审计。当前的限制包括
不支持符号 KECCAK 哈希
尚不支持 CREATE2、CALLCODE 和 DELEGATECALL
未考虑gas
一些echidna选项尚不支持(请参阅 hybrid-echidna -h)
## 混合Echidna
<p align=”center” > <img width=”80%” src=“.resources/hybrid_echidna.png”/> <br> </p>
Optik 允许以 _混合_ 模式运行 [Echidna](https://github.com/crytic/echidna) 智能合约模糊测试。它基本上将 Echidna 与 [Maat](https://github.com/trailofbits/maat) 符号执行器结合在一起,该执行器重新播放 Echidna 语料库,并通过添加新的输入来扩展它,从而提高覆盖率。
hybrid-echidna 以几个 <i>增量播种</i> 步骤开始,其中使用 [Slither](https://github.com/crytic/slither)’s 数据流分析获得的简短事务序列对语料库进行播种,并更加强烈地使用符号执行来解决新输入。序列长度在每个播种步骤中增加。一旦达到一定的长度阈值,hybrid-echidna 将退回到其正常模式,开始限制要解决的符号输入的数量,并停止使用数据流分析为播种语料库。
### 使用方法
混合Echidna可以通过在Echidna命令行中将 echidna-test 替换为 hybrid-echidna 来无缝使用,以替代常规Echidna。例如
` hybrid-echidna MyContract.sol --test-mode assertion --corpus-dir /tmp/test --contract MyContract `
混合模式下还有其他选项可用于控制 hybrid-echidna 的行为
–max-iters:执行模糊测试迭代的最大次数(一次迭代包括一次Echidna战役和一次在语料库上的符号执行器运行)
–solver-timeout:解决每个可能的新输入所花费的最大时间(以毫秒为单位)
–incremental-threshold:要执行的初始增量播种步骤的数量
–no-incremental:跳过初始增量播种
–cov-mode:在解决新输入时增加的覆盖类型。大多数覆盖模式都是为了实验目的而实现的。除非你在开发/破解Optik,否则我们建议保持默认模式
调试、日志记录和终端显示
–debug:将调试信息添加到日志输出中
–logs:将日志写入指定的文件(或 stdout)
–no-display:禁用图形终端显示
## 安装
对于快速安装,运行
`console python3 -m pip install optik-tools `
要跟上最新功能和修复,从其 master 分支安装Optik
`console git clone https://github.com/crytic/optik && cd optik python3 -m pip install . `
您还可以通过Docker运行它
`console git clone https://github.com/crytic/optik && cd optik docker build -t crytic/optik . docker run -it --rm --mount type=bind,source="$(pwd)",target=/workdir crytic/optik # 这将运行Docker容器,将本地目录挂载到/workdir `
项目详情
下载文件
下载适合您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装软件包 的信息。
源分布
构建分布
optik-tools-0.0.2.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | eda23d4b0d0c591d7e665ca9385f00ba6be70c1fba0a0d7c9531421cbfad065f |
|
MD5 | 9bc511ef6cfb4f8296e0aed283a4b208 |
|
BLAKE2b-256 | 89d04388de6881c6107ea8b1b5d7f04b55caabd1c360366a59cfd99e20475b43 |
optik_tools-0.0.2-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c245bfdfb4bb7c3f16a19e4b4e4c33ebeafbe5858f67f9c708e96c9c73d08a72 |
|
MD5 | a793a41f840279e79c5a6508a4bd460d |
|
BLAKE2b-256 | 884482354cf7cac740f51d018b5b478e94063dfb6058c824e0c447e33a7e501f |