Nursca/Contract-Auditor

GitHub: Nursca/Contract-Auditor

一款结合确定性静态规则与 LLM 推理的 Solidity 智能合约安全审计工具,可在数秒内输出按严重程度排名的漏洞报告。

Stars: 0 | Forks: 0

# 合约审计工具 **专为 Solidity 开发者打造的 AI 驱动智能合约安全审计工具。** 粘贴一段合约,几秒钟即可获得按严重程度排名的漏洞报告 —— 结合了确定性静态分析与基于 LLM 的推理能力,能够捕获静态规则无法发现的逻辑层缺陷。 为 **Web3LadiesBuildWithAI Ship It Challenge** 专属打造。 ## 工作原理 ``` Frontend (paste contract) │ ▼ API orchestrator (/api/analyze) │ ┌────┴────┐ ▼ ▼ Static LLM scanner analysis engine (7 rules) (Claude API) │ │ └────┬────┘ ▼ Report generator (dedupe, rank by severity, risk score) │ ▼ Results screen ``` 静态扫描器和 LLM 引擎是**并发**执行的,而非顺序执行,以将总分析时间控制在约 15 秒以内。如果 LLM 调用失败或超时,应用会优雅降级为仅显示静态分析结果,而不会报错 —— 这已经过测试并确认正常工作(API 响应中的 `meta.partial: true`)。 ## 功能特性 - **混合分析**:7 条确定性静态规则(重入攻击、`tx.origin` 身份验证、未检查的调用、缺少访问控制、无限制的 `selfdestruct`、浮动 pragma、无限循环)+ 一个专门设定以捕获支付/退款/算术错误的 LLM 引擎 - **按严重程度排名的报告**:严重 → 高 → 中 → 低 → 信息,并附带 0–100 的加权风险评分 - **置信度信号**:被静态扫描器和 AI 引擎*同时*捕获的发现将被标记为 `static+ai` —— 这是一个直接在 UI 中展示的更高置信度信号 - **优雅降级**:如果 AI 分析失败或超时,您仍会获得静态分析结果,而不会遇到页面崩溃 - **无数据持久化**:合约在内存中进行分析,绝不记录或存储 —— 当人们粘贴真实的、未经审计的代码时,这是一种值得具备的隐私默认设置 ## 技术栈 | 层级 | 选择 | |---|---| | 前端 | Next.js (App Router) + TypeScript + Tailwind | | 静态扫描器 | 自定义基于正则表达式的规则引擎,零外部依赖 | | AI 引擎 | Claude API (`claude-sonnet-4-6`),结构化 JSON 输出 | | 字体 | JetBrains Mono (代码/技术文本),Inter (正文/UI) | | 部署 | Vercel | ## 透明地使用 AI 构建 本项目同时也是一个展示在整个开发流程中进行 AI 辅助开发的演示: - **[Antigravity](https://antigravity.google)** — 实现了核心引擎(数据 schema、静态扫描器规则、LLM 引擎封装、报告生成器、API 协调器)以及完整的前端,基于书面的实施计划和设计系统构建,在人工审查的逐步监督下完成任务 - **[Stitch](https://stitch.withgoogle.com)** — 生成了 UI 设计系统和界面设计(输入、加载、结果、错误状态),导出为 `design/DESIGN.md` 并在前端实施期间直接被 Antigravity 所使用 - **Claude (Anthropic)** — 不仅在开发期间使用,还为应用程序本身的实时漏洞分析引擎提供支持,此外还参与了指导构建的架构/PRD 规划和实施计划编写 ## 快速开始 ### 前置条件 - Node.js 18+ - 一个 [Anthropic API 密钥](https://console.anthropic.com/) ### 安装 ``` git clone https://github.com/Nursca/Contract-Auditor.git cd Contract-Auditor npm install ``` ### 环境变量 在项目根目录下创建一个 `.env.local` 文件: ``` ANTHROPIC_API_KEY=your_key_here ``` ### 本地运行 ``` npm run dev ``` 打开 [http://localhost:3000](http://localhost:3000)。 ## 使用方法 1. 将 Solidity 合约源码粘贴到文本框中(如果启用,也可以上传 `.sol` 文件) 2. 点击 **Analyze Contract** 3. 查看按严重程度排名的漏洞发现 —— 每一项都包含代码行参考、通俗易懂的描述以及建议的修复方案 ### API 核心分析作为单个 endpoint 暴露: ``` POST /api/analyze Content-Type: application/json { "source": "" } ``` 返回一个 `AnalysisReport`: ``` { "summary": { "total_findings": 4, "by_severity": { "critical": 1, "high": 1, "medium": 2, "low": 0, "informational": 0 }, "risk_score": 56 }, "findings": [ { "id": "…", "source": "static+ai", "severity": "critical", "category": "reentrancy", "line": 42, "title": "Reentrancy in withdraw()", "description": "…", "suggested_fix": "…", "confidence": "high" } ], "meta": { "analyzed_at": "2026-07-04T12:00:00.000Z", "contract_length_lines": 118, "analysis_duration_ms": 4230, "partial": false } } ``` 输入上限为 50KB,以控制延迟和 API 成本。 ## 项目结构 ``` Contract-Auditor/ ├── app/ │ ├── page.tsx # Main flow: input → loading → results │ └── api/analyze/route.ts # API orchestrator ├── components/ │ ├── InputScreen.tsx │ ├── LoadingState.tsx │ ├── ResultsScreen.tsx │ └── ui/ │ ├── Button.tsx │ ├── SeverityBadge.tsx │ └── FindingCard.tsx ├── lib/ │ ├── types.ts # Shared Finding / AnalysisReport schema │ ├── staticScanner.ts # 7 deterministic vulnerability rules │ ├── llmEngine.ts # Claude API wrapper + prompt │ └── reportGenerator.ts # Merge, dedupe, rank, risk score ├── design/ │ ├── DESIGN.md # Design system (Stitch export) │ └── stitch-reference/ # Reference markup for screens └── .agents/ └── CONTEXT.md # Persistent context for Antigravity ``` ## 已知限制(实事求是,刻意为之) - 静态扫描器使用正则表达式/字符串匹配,而非完整的 AST 解析 —— 速度快且无依赖,但可能会漏掉 AST 遍历能发现的深层嵌套或混淆模式 - 即使在低 temperature 下,LLM 的发现在不同运行之间的措辞也可能略有不同;被标记的潜在漏洞应保持一致,但确切表述可能不会 - 仅支持单文件分析 —— 尚不支持跨合约或多文件项目分析 - 没有用户账户或保存的历史记录 —— 每次分析都是无状态的,这是设计使然 ## 路线图 - 基于 AST 的静态分析,以实现更准确的规则匹配 - GitHub URL / repo 级别分析(多文件) - 可下载的 PDF 报告导出 - 自定义规则配置(允许团队添加自己的静态模式) ## 鸣谢 由 [@DeFiNursca](https://x.com/DeFiNursca) 为 Web3LadiesBuildWithAI Ship It Challenge 构建。
标签:Solidity, Web3, 云安全监控, 人工智能, 后端开发, 智能合约, 用户模式Hook绕过, 静态分析