Teycir/smartcontractpatternfinder
GitHub: Teycir/smartcontractpatternfinder
基于Rust的高性能智能合约安全漏洞扫描工具,支持YAML模板自定义模式、CI/CD集成和SARIF输出。
Stars: 0 | Forks: 0
# 智能合约模式查找器 (SCPF)
🔍 用于检测以太坊智能合约中安全漏洞和模式的高性能工具。
**工作原理:** 在 YAML 模板中定义模式 → SCPF 扫描智能合约 → 查找匹配的模式 → 报告漏洞
[](https://www.rust-lang.org/)
[](LICENSE)
[](https://crates.io/crates/scpf-cli)
[](https://docs.rs/scpf-core)
[](https://github.com/Teycir/smartcontractpatternfinder/actions/workflows/ci.yml)
**标签:** `rust` `smart-contracts` `security` `scanner` `ethereum` `blockchain` `vulnerability-detection` `pattern-matching` `defi` `web3` `solidity` `static-analysis` `open-source` `mit`
## 📑 目录
- [智能合约模式查找器 (SCPF)](#smart-contract-pattern-finder-scpf)
- [📑 目录](#-table-of-contents)
- [✨ 功能特性](#-features)
- [💡 使用场景](#-use-cases)
- [安全审计](#security-auditing)
- [DeFi 研究](#defi-research)
- [漏洞赏金狩猎](#bug-bounty-hunting)
- [开发与 CI/CD](#development--cicd)
- [教育与培训](#education--training)
- [🚀 快速开始](#-quick-start)
- [工作原理](#how-it-works)
- [安装说明](#installation)
- [初始化项目](#initialize-project)
- [扫描合约](#scan-a-contract)
- [📋 模板示例](#-template-example)
- [🏗️ 架构设计](#️-architecture)
- [模块概览](#module-overview)
- [🛠️ CLI 命令](#️-cli-commands)
- [`scpf scan`](#scpf-scan)
- [`scpf init`](#scpf-init)
- [🎯 支持的链](#-supported-chains)
- [🔧 配置说明](#-configuration)
- [获取 API Keys](#getting-api-keys)
- [📊 输出格式](#-output-formats)
- [🧪 开发指南](#-development)
- [📝 创建模板](#-creating-templates)
- [模板工作原理](#how-templates-work)
- [创建模板](#creating-a-template)
- [🤝 参与贡献](#-contributing)
- [贡献指南](#contribution-guidelines)
- [📄 许可证](#-license)
- [👤 作者](#-author)
- [🔗 链接](#-links)
## ✨ 功能特性
- 🌐 **以太坊支持** - 通过 Etherscan API 扫描主网合约
- 📁 **本地项目扫描** - 扫描工作区中的 .sol 文件
- 🔄 **Git Diff 扫描** - 仅扫描 PR 中变更的文件
- 🤖 **CI/CD 集成** - 支持 GitHub Actions, GitLab CI, Bitbucket Pipelines
- 📝 **YAML 模板** - 易于编写的模式定义
- ✅ **ERC 合规性** - 检测 ERC-20/721/1155 实现
- 📊 **基于大小的风险评分加权** - 按 100KB 归一化,消除大小偏差
- 🧠 **上下文感知过滤** - 通过语义和上下文过滤器减少明显的误报
- ⚡ **分块扫描** - 处理大型源代码而不耗尽内存
- 💾 **智能缓存** - 避免冗余 API 调用
- 🔑 **级联 API Key 系统** - 支持多达 6 个 Key,自动滚动回退
- 🎯 **模块化架构** - CLI、核心引擎、服务器和 Web UI 组件
- 🔒 **安全聚焦** - 专为漏洞分类、报告和基于 SARIF 的代码扫描而构建
- 🚀 **高性能** - 使用 Rust 构建,速度极快
- 🔧 **可扩展** - 轻松添加自定义模式
- 🌐 **可选 Web UI** - `scpf-server` 和 `frontend/` 提供仪表板驱动的工作流
## 💡 使用场景
### 安全审计
- **自动化漏洞检测** - 扫描合约中的常见漏洞(重入攻击、delegatecall、未检查调用)
- **部署前检查** - 在主网部署前验证合约
- **持续监控** - 监控新部署的易受攻击合约
### DeFi 研究
- **模式分析** - 识别 DeFi 协议中的常见模式
- **协议比较** - 比较不同项目的安全实现
- **风险评估** - 评估智能合约风险概况
### 漏洞赏金狩猎
- **自动化侦察** - 快速扫描多个合约以查找漏洞
- **模式发现** - 查找重复出现的漏洞模式
- **批量分析** - 一次扫描整个协议
### 开发与 CI/CD
- **Pre-commit 钩子** - 在提交前验证合约
- **CI/CD 集成** - 在流水线中进行自动化安全检查
- **代码审查** - 通过自动化发现辅助人工代码审查
### 教育与培训
- **学习工具** - 了解常见的智能合约漏洞
- **模板库** - 研究真实世界的漏洞模式
- **安全培训** - 培训开发人员掌握安全编码实践
## 🚀 快速开始
### 工作原理
1. **创建模板** - 在 YAML 文件中定义漏洞模式
2. **加载模板** - SCPF 读取您的模式定义
3. **获取合约** - 从区块链浏览器检索智能合约源代码
4. **扫描与匹配** - 应用正则表达式模式查找漏洞
5. **报告结果** - 显示带有严重级别和上下文的发现
### 安装说明
```
git clone https://github.com/Teycir/smartcontractpatternfinder.git
cd smartcontractpatternfinder
cargo build --release
```
### 初始化项目
```
scpf init
```
### 扫描合约
```
# 扫描 blockchain contract
scpf scan 0x1234567890abcdef --chains ethereum
# 扫描本地项目(自动检测 .sol 文件)
scpf scan
# 仅扫描更改的文件(用于 PR)
scpf scan --diff main..HEAD
# 使用自定义模板扫描
scpf scan --templates ./my-templates
# 扫描多个合约
scpf scan 0xabc... 0xdef... 0x123... --chains ethereum
# 导出到 JSON/SARIF
scpf scan --output json > results.json
scpf scan --output sarif > results.sarif
# 将结果限制为 critical findings
scpf scan --min-severity critical
```
## 📋 模板示例
模板定义了在智能合约中搜索的模式。SCPF 加载这些模板并将它们与合约源代码进行匹配。
```
id: reentrancy-basic
name: Basic Reentrancy Pattern
description: Detects potential reentrancy vulnerabilities
severity: high
tags:
- security
- reentrancy
patterns:
- id: external-call-with-value
pattern: '\.call\{value:'
message: External call with value transfer detected
- id: delegatecall-usage
pattern: '\.delegatecall\('
message: Delegatecall usage detected
```
**执行流程:**
1. SCPF 从 `templates/reentrancy.yaml` 加载此模板
2. 从区块链浏览器获取合约源代码
3. 搜索 `.call{value:` 和 `.delegatecall(` 模式
4. 报告任何匹配项及其行号和上下文
## 🏗️ 架构设计
```
smartcontractpatternfinder/
├── crates/
│ ├── scpf-types/ # Core types and data structures
│ ├── scpf-core/ # Scanning, semantic analysis, caching
│ ├── scpf-cli/ # Command-line interface
│ └── scpf-server/ # Web server and scan orchestration
├── frontend/ # Optional web dashboard
├── templates/ # Pattern detection templates
├── benchmarks/ # Accuracy and SARIF benchmark tooling
├── scripts/ # Utility scripts (.sh, .py)
├── docs/ # Project documentation
├── sol/ # Solidity test files
└── action.yml # GitHub Marketplace action definition
```
### 模块概览
- **scpf-types**: 核心数据结构(Template, Pattern, Match, ScanResult)
- **scpf-core**: 业务逻辑(Scanner, TemplateLoader, ContractFetcher, Cache, AST 和语义验证)
- **scpf-cli**: 用户界面(CLI 命令、输出格式化)
- **scpf-server**: 用于编排扫描和流式传输进度的 HTTP 服务器
- **frontend**: 用于启动扫描和审查结果的浏览器 UI
## 🛠️ CLI 命令
### `scpf scan`
扫描智能合约中的模式。
```
scpf scan [OPTIONS] [ADDRESSES]...
Options:
-n, --chains Comma-separated chain list
-t, --templates Templates directory
-o, --output
标签:DeFi, EVM, Rust, SARIF, Solidity, Web3, YAML配置, 云安全监控, 以太坊, 区块链, 可视化界面, 文档安全, 智能合约安全, 模式匹配, 网络流量审计, 自动化资产收集, 静态分析