☰
智能合约测试覆盖率终极指南:Slither 与 Manticore 实战
2026/10/23 2:08:27 网站建设 项目流程

智能合约测试覆盖率终极指南: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 负责"跑代码"。前者快而广,后者深而慢,正好互补。

![智能合约测试覆盖率视角:安全与正确性的交集](https://raw.gitcode.com/GitHub_Trending/pu/publications/raw/89940dfbec07ad03b0989e67d78e84250765366b/presentations/Return to the 100 Acre Woods/security-now.png?utm_source=gitcode_repo_files)

三:Slither 静态扫描:3 条命令跑通

git clone https://gitcode.com/GitHub_Trending/pu/publications
pip install slither-analyzer
slither contracts/MyContract.sol

跑完这条命令,你会得到一组带严重等级的告警列表。它的核心能力有三点:

  • 内置 20+ 检测器,重入、未检查返回值、危险授权模式开箱即报
  • 给出 gas 优化建议,标出浪费 gas 的存储模式
  • 提供 Python API,一行from slither import Slither就能接进自己的工具链

![智能合约测试覆盖率中的状态搜索:contract Adder 的符号状态分支展开](https://raw.gitcode.com/GitHub_Trending/pu/publications/raw/89940dfbec07ad03b0989e67d78e84250765366b/presentations/Return to the 100 Acre Woods/statesearch.png?utm_source=gitcode_repo_files)

四:Manticore 符号执行:让测试用例自己长出来

符号执行把函数参数当成"未知数"而不是具体数值。它遇到分叉时沿所有分支同时走,每个方向都派一个"影子分身",分身身上记着走到这里需要的条件。当某条路径触发了断言失败,Manticore 再把那组条件反解成具体输入——测试用例是自己长出来的。

from manticore.ethereum import ManticoreEVM m = ManticoreEVM() m.solidity_create_contract("MyContract.sol") m.report()

对合约最常见的整数溢出、重入、越权访问,符号执行给出的都是可复现的最小交易序列,而不是一句模糊警告。

![智能合约测试覆盖率工具对比:模糊测试与符号执行](https://raw.gitcode.com/GitHub_Trending/pu/publications/raw/89940dfbec07ad03b0989e67d78e84250765366b/presentations/Return to the 100 Acre Woods/deniable-symbex.png?utm_source=gitcode_repo_files)

五:把两者串进开发闭环

  1. 编写:合约本地编译通过后再谈分析,用solc或框架的 build 命令先自检。
  2. 静态扫描:每个提交先跑slither .,用它的结果圈出 public 且高危的函数清单。
  3. 符号执行:只对第 2 步圈出的关键函数写 Manticore 脚本,集中算力穷举参数空间。
  4. 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询