Recon-Fuzz/recon-extension
GitHub: Recon-Fuzz/recon-extension
Recon是一款VS Code扩展,通过集成Echidna、Medusa和Halmos模糊测试工具,简化智能合约不变性测试的搭建、执行和调试流程。
Stars: 34 | Forks: 18
# Recon - 智能合约模糊测试扩展
使用 Medusa、Echidna 和 Halmos 脚手架搭建并运行不变性测试,利用 Foundry 自动调试破坏的属性
## 功能特性 Recon 扩展是一个 VS Code 扩展,通过提供以下功能来简化智能合约测试: - **一键设置**:自动安装和配置 [Chimera](https://github.com/Recon-Fuzz/chimera) 模板 - **集成模糊测试**:直接从 VS Code 运行 [Echidna](https://github.com/crytic/echidna)、[Medusa](https://github.com/crytic/medusa) 和 [Halmos](https://github.com/a16z/halmos) - **合约浏览器**:浏览并选择目标合约和函数 - **Fuzzer 集成**:直接通过扩展快速访问模糊测试工具 - **覆盖率可视化**:查看并分析来自 Fuzzer 的代码覆盖率 - **测试生成**:根据 Fuzzer 发现的破坏属性的调用序列生成 Foundry 单元测试 - **日志转 Foundry 复现转换器**:将 Echidna 和 Medusa 日志转换为 Foundry 测试复现,支持自定义 VM 选项 - **链接库 (实验性)**:自动检测并配置 Echidna 和 Medusa 的库依赖 - **Mock/TargetFunctions 生成**:轻松创建用于测试的模拟合约和目标函数 - **CodeLens 集成**:直接在编辑器中运行测试和修改函数行为 ## 安装说明 ### 前置条件 - Visual Studio Code 1.88.0 或更高版本 - Foundry 工具链 (forge, cast, anvil) - Echidna (可选) - Medusa (可选) - Halmos (可选) ### 从 VS Code Marketplace 安装 官方链接:https://marketplace.visualstudio.com/items?itemName=Recon-Fuzz.recon 1. 打开 VS Code 2. 进入扩展 (Ctrl+Shift+X) 3. 搜索 "Recon" 4. 点击 "Install" ### 手动安装 1. 从 [最新版本](https://github.com/Recon-Fuzz/recon-extension/releases/latest) 下载 `.vsix` 文件 2. 在 VS Code 中,进入扩展 3. 点击 "..." 菜单并选择 "Install from VSIX..." 4. 选择下载的文件 ## 快速入门 1. 在 VS Code 中打开一个 Foundry 项目 2. 点击活动栏中的 Recon 图标 3. 在 Cockpit 视图中,点击 "Scaffold" 使用 [create-chimera-app](https://github.com/Recon-Fuzz/create-chimera-app/tree/main) 模板设置项目 4. 在 Contracts 视图中选择目标合约和函数 5. 从状态栏或 Cockpit 视图运行 Echidna 或 Medusa ## 使用方法 有关如何在模糊测试工作流中使用该扩展的全面概述,请参阅 [Recon Book](https://book.getrecon.xyz/free_recon_tools/recon_extension.html)。 ### 脚手架搭建项目 Recon Cockpit 视图中的 "Scaffold" 按钮将: - 将 Chimera 作为 Foundry 子模块依赖安装 - 使用必要的依赖映射更新 `remappings.txt` - 在 test/recon 目录中创建模板文件 - 配置您的项目以进行模糊测试 ### 选择目标合约和函数 在 Contracts 视图中,您可以: 1. 启用您想要测试的合约 2. 对于每个合约,选择要包含在生成的 [`TargetFunctions`](https://book.getrecon.xyz/tutorial/chimera_framework.html#targetfunctions) 合约中的函数 3. 配置函数属性: - Actor(执行者):普通用户或管理员 - Mode(模式):正常执行、预期失败或捕获异常 ### 运行 Fuzzer - 使用状态栏按钮快速访问 Echidna 和 Medusa - 在 Cockpit 视图中设置默认的 Fuzzer 和配置 - 在输出面板中查看实时的模糊测试进度 ### 查看覆盖率 在启用覆盖率的情况下运行 Fuzzer 后: 1. 进入 Coverage Reports 视图 2. 选择一个覆盖率报告进行查看 3. 点击外部图标以在浏览器视图中打开报告 4. 使用 "Clean up Coverage Report" 命令以提高可读性 ### 生成 Mock 右键单击合约的 JSON 构件(默认位于 `out/` 目录中)或 Solidity 文件,然后选择 "Generate Solidity Mock" 以创建合约的模拟实现。 ### 将日志转换为 Foundry 测试 Log to Foundry 转换器帮助您从 Fuzzer 输出创建可复现的 Foundry 测试: 1. 在 Recon Cockpit 视图中,点击 "Tools" 并选择 "Log to Foundry" 2. 选择您的 Fuzzer (Echidna 或 Medusa) 3. 将 Fuzzer 日志输出粘贴到文本区域中 4. 点击 "Convert" 处理日志 5. 对于发现的每个被破坏的属性: - 独立切换 VM 选项 (vm.prank, vm.roll, vm.warp) - 查看带有语法高亮的生成 Foundry 测试代码 - 单独复制属性或一次复制所有属性 - 如有需要,查看原始 trace ## 配置选项 可以通过 VS Code 设置配置 Recon: ### 通用设置 - `recon.defaultFuzzer`:在 Echidna 和 Medusa 之间选择 - `recon.showAllFiles`:在 Contracts 视图中显示或隐藏测试和库文件 - `recon.foundryConfigPath`:foundry.toml 的路径(相对于工作区根目录) ### Echidna 设置 - `recon.echidna.mode`:配置 [测试模式](https://secure-contracts.com/program-analysis/echidna/configuration.html#testmode) (assertion, property 等) - `recon.echidna.testLimit`:运行的最大测试用例数 - `recon.echidna.workers`:并行 worker 的数量 ### Medusa 设置 - `recon.medusa.testLimit`:运行的最大测试用例数 - `recon.medusa.workers`:并行 worker 的数量 ### Forge 设置 - `recon.forge.buildArgs`:forge build 的附加参数 - `recon.forge.testVerbosity`:forge test 输出的详细程度 ## 故障排除 ### 常见问题 - **找不到 Fuzzer**:确保 Echidna/Medusa 已安装并在您的 PATH 中 - **编译错误**:手动运行 `forge build` 以识别问题 - **没有显示合约**:检查 `out/` 目录是否存在且包含已编译的合约 - Halmos 日志解析器可能存在一些错误 - Vyper/foundry 编译器集成没有路径,因此您必须手动修复它们 ## 许可证 https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt标签:Chimera, Echidna, Foundry, Fuzzing, Halmos, Medusa, Recon-Fuzz, SOC Prime, Solidity, VS Code 扩展, Web3 安全, 不变量测试, 以太坊, 区块链, 单元测试生成, 开发工具, 智能合约安全, 自动化攻击, 自动化攻击, 覆盖率分析