加入 Empire Hacking Slack
<sub><i>- 讨论和支持 </i></sub>
Slither 是一个用 Python3 编写的 Solidity 和 Vyper 静态分析框架。它运行一套漏洞检测器,打印合约细节的可视化信息,并提供 API 以便轻松编写自定义分析。Slither 使开发者能够发现漏洞、增强代码理解,并快速原型化自定义分析。
在 Hardhat/Foundry/Dapp/Brownie 应用程序上运行 Slither:
slither .
如果您的项目有依赖项,这是首选选项,因为 Slither 依赖于底层编译框架来编译源代码。
然而,您可以在不导入依赖项的单个文件上运行 Slither:
slither tests/uninitialized.sol
注意 <br /> Slither 需要 Python 3.8+。 如果您不打算使用支持的编译框架之一,您需要 solc,Solidity 编译器;我们建议使用 solc-select 方便地在 solc 版本之间切换。
python3 -m pip install slither-analyzer
git clone https://github.com/crytic/slither.git && cd slither python3 -m pip install .
如果您更喜欢通过 git 安装 Slither,我们建议使用 Python 虚拟环境,详见开发者安装说明。
使用 eth-security-toolbox Docker 镜像。它包含了我们所有的安全工具和每个主要版本的 Solidity,全部集成在一个镜像中。/home/share 将被挂载到容器中的 /share。
docker pull trailofbits/eth-security-toolbox
要在容器中共享目录:
docker run -it -v /home/share:/share trailofbits/eth-security-toolbox
slither [target] --checklist。slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/(替换 ORG、REPO、COMMIT)| 序号 | 检测器 | 检测内容 | 影响 | 置信度 |
|---|---|---|---|---|
| 1 | abiencoderv2-array | 存储 abiencoderv2 数组 | 高 | 高 |
| 2 | arbitrary-send-erc20 | transferFrom 使用任意 from | 高 | 高 |
| 3 | array-by-reference | 通过值修改存储数组 | 高 | 高 |
| 4 | encode-packed-collision | ABI encodePacked 冲突 | 高 | 高 |
| 5 | incorrect-shift | 移位指令中参数顺序不正确 | 高 | 高 |
| 6 | multiple-constructors | 多个构造函数方案 | 高 | 高 |
| 7 | name-reused | 合约名称重复使用 | 高 | 高 |
| 8 | protected-vars | 检测到未受保护的变量 | 高 | 高 |
| 9 | public-mappings-nested | 带嵌套变量的公共映射 | 高 | 高 |
| 10 | rtlo | 使用了从右到左覆盖控制字符 | 高 | 高 |
| 11 | shadowing-state | 状态变量遮蔽 | 高 | 高 |
| 12 | suicidal | 允许任何人销毁合约的函数 | 高 | 高 |
| 13 | uninitialized-state | 未初始化的状态变量 | 高 | 高 |
| 14 | uninitialized-storage | 未初始化的存储变量 | 高 | 高 |
| 15 | unprotected-upgrade | 未受保护的可升级合约 | 高 | 高 |
| 16 | codex | 使用 Codex 查找漏洞 | 高 | 低 |
| 17 | arbitrary-send-erc20-permit | transferFrom 使用带许可的任意 from | 高 | 中 |
| 18 | arbitrary-send-eth | 向任意目标发送以太币的函数 | 高 | 中 |
| 19 | controlled-array-length | 受污染的数组长度赋值 | 高 | 中 |
| 20 | controlled-delegatecall | 受控的 delegatecall 目标 | 高 | 中 |
| 21 | delegatecall-loop | 循环内使用 delegatecall 的可支付函数 | 高 | 中 |
| 22 | incorrect-exp | 不正确的指数运算 | 高 | 中 |
| 23 | incorrect-return | 在汇编模式下错误使用 return | 高 | 中 |
| 24 | msg-value-loop | 循环内使用 msg.value | 高 | 中 |
| 25 | reentrancy-eth | 重入漏洞(以太币盗取) | 高 | 中 |
| 26 | return-leave | 使用 return 而不是 leave | 高 | 中 |
| 27 | storage-array | 有符号存储整数数组编译器错误 | 高 | 中 |
| 28 | unchecked-transfer | 未检查的代币转账 | 高 | 中 |
| 29 | weak-prng | 弱伪随机数生成器 | 高 | 中 |
| 30 | domain-separator-collision | 检测具有与 EIP-2612 的 DOMAIN_SEPARATOR() 签名冲突的函数的 ERC20 代币 | 中 | 高 |
| 31 | enum-conversion | 检测危险的枚举转换 | 中 | 高 |
| 32 | erc20-interface | 不正确的 ERC20 接口 | 中 | 高 |
| 33 | erc721-interface | 不正确的 ERC721 接口 | 中 | 高 |
| 34 | incorrect-equality | 危险的严格相等 | 中 | 高 |
| 35 | locked-ether | 锁定以太币的合约 | 中 | 高 |
| 36 | mapping-deletion | 删除包含结构的映射 | 中 | 高 |
| 37 | shadowing-abstract | 抽象合约中的状态变量遮蔽 | 中 | 高 |
| 38 | tautological-compare | 将变量与自身比较总是返回真或假,取决于比较方式 | 中 | 高 |
| 39 | tautology | 同义反复或矛盾 | 中等 | 高 |
| 40 | write-after-write | 未使用的写入 | 中等 | 高 |
| 41 | boolean-cst | 布尔常量误用 | 中等 | 中等 |
| 42 | constant-function-asm | 使用汇编代码的常量函数 | 中等 | 中等 |
| 43 | constant-function-state | 改变状态的常量函数 | 中等 | 中等 |
| 44 | divide-before-multiply | 不精确的算术运算顺序 | 中等 | 中等 |
| 45 | out-of-order-retryable | 乱序可重试交易 | 中等 | 中等 |
| 46 | reentrancy-no-eth | 重入漏洞(不涉及以太币盗窃) | 中等 | 中等 |
| 47 | reused-constructor | 重用基础构造函数 | 中等 | 中等 |
| 48 | tx-origin | 危险使用 tx.origin | 中等 | 中等 |
| 49 | unchecked-lowlevel | 未检查的低级调用 | 中等 | 中等 |
| 50 | unchecked-send | 未检查的发送 | 中等 | 中等 |
| 51 | uninitialized-local | 未初始化的局部变量 | 中等 | 中等 |
| 52 | unused-return | 未使用的返回值 | 中等 | 中等 |
| 53 | incorrect-modifier | 可能返回默认值的修饰符 | 低 | 高 |
| 54 | shadowing-builtin | 内置符号遮蔽 | 低 | 高 |
| 55 | shadowing-local | 局部变量遮蔽 | 低 | 高 |
| 56 | uninitialized-fptr-cst | 构造函数中未初始化的函数指针调用 | 低 | 高 |
| 57 | variable-scope | 在声明前使用的局部变量 | 低 | 高 |
| 58 | void-cst | 调用未实现的构造函数 | 低 | 高 |
| 59 | calls-loop | 循环中的多次调用 | 低 | 中等 |
| 60 | events-access | 缺少事件访问控制 | 低 | 中等 |
| 61 | events-maths | 缺少事件算术 | 低 | 中等 |
| 62 | incorrect-unary |