如何用 Slither 与 Manticore 搭建 Solidity 合约的测试验证流程

发布时间:2026/10/23 4:18:51

如何用 Slither 与 Manticore 搭建 Solidity 合约的测试验证流程 如何用 Slither 与 Manticore 搭建 Solidity 合约的测试验证流程【免费下载链接】publicationsPublications from Trail of Bits项目地址: https://gitcode.com/GitHub_Trending/pu/publicationspublications 仓库收录了 Trail of Bits 的安全工具与研究资料。这篇文章讲 Slither 和 Manticore 的用法先用 Slither 做静态扫描定位已知问题再用 Manticore 做符号执行探测试图覆盖不到的执行路径最后借助仓库里的审计发现数据集交叉核对检测范围。适合准备上线合约的 Solidity 开发者也适合想入门智能合约安全工具的新手。 适用场景与读者对象适合 Solidity 开发者在合约部署前想自己跑一轮验证而不是只依赖人工审查。适合想学习符号执行、静态分析概念的新手仓库自带可运行的工作坊样例可以边读边跑。当收到安全审查报告、想确认某类发现能否被自动化工具检出时用仓库内的审计发现数据集做对照。适合想把自动化检查纳入合约开发流程的小团队作为 CI 里的扫描步骤。当手写的单元测试总是漏掉某些边界输入时用 Manticore 自动生成符号输入补位。 核心能力拆解能力维度承担者落到实际的用途静态检查SlitherSolidity 先被转换进 SlithIR 中间表示再在其上跑内置安全检测器找已知漏洞模式和 gas 优化点动态验证Manticore符号执行自动构造输入逐个探索合约可能状态把手写测试没覆盖的路径跑出来自定义规则Slither Python API基于框架写自己的分析脚本比如枚举所有 public 函数做专项审查报告输出Slither printers输出人类可读的摘要配合代码评审使用练习支持仓库工作坊workshops/下提供成对的 .py 驱动脚本和 .sol 合约样例可直接跟练交叉验证数据审计发现数据集datasets/smart_contract_audit_findings/按类型、严重度、是否可被静态/动态分析检出对历史发现做了分类Slither 的关键在于 SlithIR源码先转成中间表示污点跟踪这类通用程序分析技术才能在上面稳定运行而不是停留在关键字匹配的层面。Manticore 则按状态逐个搜索合约执行过程下图是状态搜索的基本形态![Manticore 符号执行状态搜索树示意图红框表示 value 等于 1 的可达状态分支](https://raw.gitcode.com/GitHub_Trending/pu/publications/raw/89940dfbec07ad03b0989e67d78e84250765366b/presentations/Return to the 100 Acre Woods/statesearch.png?utm_sourcegitcode_repo_files)图中根节点是合约入口每个 stack 分支代表一种输入取值红色标记的是满足state.can_be_true(value 1)判定的目标状态——这正是符号执行找某条路径是否可达的典型用法。 推荐工作流克隆仓库拿到练习样例执行git clone https://gitcode.com/GitHub_Trending/pu/publications进入workshops/Using Manticore and Symbolic Execution to Find Smart Contracts Bugs - Devcon 4。目的先在有标准答案的小样例上熟悉流程。判断结果目录下examples/与exercises/中各有成对的 .py 和 .sol 文件缺文件说明拉取不完整。安装两个工具pip install slither-analyzer pip3 install manticore --user目的完成本地环境准备。判断结果两条命令均无报错输出Manticore 侧建议先跑通工作坊样例再碰真实合约。先跑 Slither 扫描slither contracts/MyContract.sol --checklist目的用内置检测器快速筛出已知漏洞模式。判断结果出现高严重度发现就先修复再进入动态验证只有低严重度提示则可直接进入第 4 步。用 Manticore 做符号执行from manticore.ethereum import ManticoreEVM m ManticoreEVM() contract m.solidity_create_contract(MyContract.sol) m.run()目的让工具自动构造输入、枚举执行路径看是否存在触发异常或违反不变量的路径。判断结果把可达的异常状态固化为一条回归测试用例跑通后重跑确认消失。用发现数据集核对覆盖范围打开datasets/smart_contract_audit_findings/initial_findings.csv。目的确认你关心的发现类型在static、dynamic字段中的检出能力标注。判断结果标注为当前自动化手段难以检出的类型保留人工审查环节不要假设工具能兜底。按需加自定义检查参考presentations/Write Better Smart Contracts By Checking Them With Slithers Python API/里的detect.py与AlarmClock.sol样例。目的按项目风险点写自己的 Slither 规则并挂进 CI。判断结果规则在你的目标合约上能稳定命中预期对象再合入流程。✅ 快速验证要点是否跑通过工作坊样例exercises/里的脚本能在本地 Manticore 环境里出结果说明环境没问题。是否出现误报抑制效果在对应行加// slither-disable-next-line注释后该条 Slither 发现是否消失。是否能定位状态Manticore 跑完后能否用状态判定如图中的state.can_be_true(value 1)确认某条件可达或不可达。是否对得上检测边界你合约涉及的发现类型在initial_findings.csv中static/dynamic字段的标注是否符合你的预期。是否量化了覆盖变化用coverage.py对比引入符号执行前后的分支覆盖率变化是否落在你新增的测试路径上。 常见误判与排障误报怎么判Slither 的每一条发现不等于真实漏洞先看报告指向的具体行判断输入是否真的来自不可信来源再决定是否处理。确认是误报时用--exclude排除对应检测器或只用// slither-disable-next-line忽略单行避免整类关闭后漏掉真实问题。Manticore 跑得慢慢通常是分支爆炸用--depth限制探索深度或缩小入口函数的分析范围。先在小样例上确认基线耗时再上真实合约避免把环境问题和状态爆炸混在一起排查。报告怎么读Slither 输出按严重度从高分开始读优化类提示统一放到最后批量处理。Manticore 的状态输出不好读时换某条件能否为真的判定方式去验证具体路径。覆盖率的数字变化要能对应到具体新增路径对应不上时先检查测试是否真的进了那条分支。 仓库资源与延伸阅读Slither 演讲资料presentations/Slither: A Static Analysis Framework for Smart Contracts/内含2019-03-07-Slither_EthCC.pdf讲清了 SlithIR 设计与四大用途。Manticore 工作坊workshops/Using Manticore and Symbolic Execution to Find Smart Contracts Bugs - Devcon 4/含exercises.pdf、manticore_api.pdf和可运行样例。Slither Python API 实操presentations/Write Better Smart Contracts By Checking Them With Slithers Python API/detect.py展示了自定义检测的写法。审计发现数据集datasets/smart_contract_audit_findings/CSV 字段含义见同目录README.md。背景论文papers/smart_contract_flaws_fc2020.pdf、papers/manticore.pdf以及 presentations/How to Become a Smart Contract Auditor/HowToBecomeASmartContractAuditor.pdf。先在workshops/的样例合约上把这套流程完整跑一遍再把自己要上线的合约接进来扫一轮。【免费下载链接】publicationsPublications from Trail of Bits项目地址: https://gitcode.com/GitHub_Trending/pu/publications创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/23 4:18:51

React+Vite开发学信网学籍学历查询系统-支持任意修改内容信息

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/23 4:13:51

随心撤销重做:visual-json History类实现undo/redo机制源码走读

【免费下载链接】visual-json The Visual JSON Editor. Schema-aware, embeddable, extensible. 项目地址: https://gitcode.com/gh_mirrors/vis/visual-json 点击查看 免费下载 visual-json 是一款支持 Schema 感知、可嵌入、可扩展的可视化 JSON 编辑器&#xff…

2026/10/23 5:29:00

Linux进程间关系与守护进程:从会话隔离到systemd部署实践

【Linux网络】进程间关系与守护进程提到 Linux 网络运维和后台服务开发,进程间关系与守护进程是一道绕不过去的坎。很多朋友在写网络服务时,明明程序跑得好好的,一关终端服务就断,或者启动了一堆“僵尸”进程挂在后台无人认养&…

2026/10/23 5:29:00

Kali Linux 单引导安装与 LVM 全盘加密实战避坑指南

简介:这份PDF面向准备入门网络安全与渗透测试的学习者,以及需要在虚拟机或裸机上部署Kali Linux的运维与安全从业者,帮助解决从镜像准备到系统安装完成的完整流程问题。资源包共1个PDF文件,大小约2.07MB,内容以图文步骤…

2026/10/23 5:29:00

SpringBoot+Vue+MySQL选课系统:从零到部署的完整实战拆解

选课系统这名字,在高校里几乎是每个学生都绕不开的东西,同时也是无数计算机专业同学的大作业和毕业设计首选。我自己也帮别人调试过不少这类项目,说实话,市面上的选课系统源码鱼龙混杂,能“拿到手就直接跑起来”的还真…

2026/10/23 5:29:00

Windows下Redis后台启动:注册服务与配置文件实战指南

1. 为什么必须解决“后台启动”这件事几个月前我在本地调一个微服务 demo 时,养成一个特别别扭的习惯:先把 Redis 窗口打开,再去启动后端,调试完还要记得把窗口关掉。有一次 Windows 自动更新重启机器,我顺手把所有黑色…

2026/10/23 5:23:59

制造业AI落地实战:三大场景、代码与案例全解析

刚过去的这一年,制造业里的AI声音比往年大了不少。但说实话,很多工厂试了AI之后又悄悄退回老路,原因不外乎三个:场景选得太虚、数据根本喂不动模型、算法做出来但车间不认账。我手里也做过几个制造方向的AI落地项目,从…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑