
智能合约测试覆盖率终极指南Slither 与 Manticore 实战【免费下载链接】publicationsPublications from Trail of Bits项目地址: https://gitcode.com/GitHub_Trending/pu/publicationsTrail 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),仅供参考