智能合约测试覆盖率终极指南:Slither 与 Manticore 实战
【免费下载链接】publicationsPublications from Trail of Bits项目地址: https://gitcode.com/GitHub_Trending/pu/publications
Trail of Bits 的出版物仓库收录了 Slither 与 Manticore 的智能合约安全工具资料。本文用它们把智能合约测试覆盖率做实:静态扫描加符号执行,命令均可直接复制运行。
一:问题切入
合约一旦部署到链上就无法修改,一条没测过的分支就可能让整池资金归零。从公开审计复盘看,大约八成问题并非代码写错,而是路径根本没被验证过——测试欠的账,最后都要用真金白银来还。所以上线前,先别急着上链,把测试覆盖率当成验收标准而不是加分项。
二:两种分析视角的分工
| 维度 | Slither(静态分析) | Manticore(符号执行) |
|---|---|---|
| 分析方式 | 不执行代码,解析 Solidity 语法与 SlithIR 中间表示,用规则直接推断问题 | 不跑真实交易,用符号输入模拟 EVM,沿所有可行路径穷举状态 |
| 发现阶段 | 编码、提交阶段,秒级出结果 | 编码后期与审计阶段,分钟级 |
| 擅长漏洞类型 | 未初始化变量、危险调用模式、gas 浪费等表面问题 | 整数溢出、重入、越权访问等需要跨函数推理的深层问题 |
| 上手难度 | 低,一条命令即可 | 中,需理解状态与路径概念 |
一句话记忆:Slither 负责"读代码",Manticore 负责"跑代码"。前者快而广,后者深而慢,正好互补。

三:Slither 静态扫描:3 条命令跑通
git clone https://gitcode.com/GitHub_Trending/pu/publicationspip install slither-analyzerslither contracts/MyContract.sol跑完这条命令,你会得到一组带严重等级的告警列表。它的核心能力有三点:
- 内置 20+ 检测器,重入、未检查返回值、危险授权模式开箱即报
- 给出 gas 优化建议,标出浪费 gas 的存储模式
- 提供 Python API,一行
from slither import Slither就能接进自己的工具链

四:Manticore 符号执行:让测试用例自己长出来
符号执行把函数参数当成"未知数"而不是具体数值。它遇到分叉时沿所有分支同时走,每个方向都派一个"影子分身",分身身上记着走到这里需要的条件。当某条路径触发了断言失败,Manticore 再把那组条件反解成具体输入——测试用例是自己长出来的。
from manticore.ethereum import ManticoreEVM m = ManticoreEVM() m.solidity_create_contract("MyContract.sol") m.report()对合约最常见的整数溢出、重入、越权访问,符号执行给出的都是可复现的最小交易序列,而不是一句模糊警告。

五:把两者串进开发闭环
- 编写:合约本地编译通过后再谈分析,用
solc或框架的 build 命令先自检。 - 静态扫描:每个提交先跑
slither .,用它的结果圈出 public 且高危的函数清单。 - 符号执行:只对第 2 步圈出的关键函数写 Manticore 脚本,集中算力穷举参数空间。
- CI 卡点:把 Slither 接进 CI,未过扫描的 PR 禁止合并;同时定期导出扫描结果与符号执行报告,对比未覆盖路径的变化。
六:新手最容易踩的 3 个坑
坑 1:误报泛滥。现象:一跑 Slither 满屏告警,分不清轻重。原因:检测器按"可能"报,不做上下文裁决。解法:用--exclude参数过滤低价值检测器,或对确认为误报的行加// slither-disable-next-line注释逐条豁免。
坑 2:符号执行跑不动。现象:含循环或复杂调用的合约跑超时。原因:可行路径随分支指数爆炸。解法:用--depth参数限制探索深度,先跑浅层看主路径,再逐步加深。
坑 3:覆盖率无法量化。现象:工具都跑了,却说不出提升了多少。原因:只看过报告,没留基线。解法:接入工具前后各记录一次分支覆盖率数字做对比,并把未覆盖路径清单固定为回归检查项。
Slither 管广度、Manticore 管深度,两者接进 CI 之后,智能合约测试覆盖率就从口号变成了每个 PR 都能验证的数字。想看得更深,可以翻仓库里的原始资料:Aave V3 安全审计报告、智能合约审计师入门指南 和 智能合约缺陷分析论文。
【免费下载链接】publicationsPublications from Trail of Bits项目地址: https://gitcode.com/GitHub_Trending/pu/publications
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考