th13vn/w3goaudit
GitHub: th13vn/w3goaudit
一个基于 Go 的 Solidity 智能合约安全审计工具,通过 WQL 查询语言和规则模板实现自动化的漏洞模式扫描与报告生成。
Stars: 0 | Forks: 0
# W3GoAudit
[](./LICENSE)
[](https://pkg.go.dev/github.com/th13vn/w3goaudit)
一个基于 Go 的 CLI 和 SDK,用于通过基于规则的模板和 WQL 查询语言审计 Solidity 智能合约。
## 快速开始
```
# Install (templates download on first run; embedded pack is the offline fallback)
go install github.com/th13vn/w3goaudit/cmd/w3goaudit@latest
# Scan contracts → writes a ./contracts-audit result folder
# (the "-audit" suffix is the collision guard: the output can't overwrite the scanned dir)
w3goaudit ./contracts/
# Scan one file into a named folder
w3goaudit Token.sol -o audit/
# Use a custom template directory
w3goaudit ./contracts/ -t ./my-templates/
# Only high + critical findings
w3goaudit ./contracts/ -s high,critical
# Print the summary only, write nothing
w3goaudit ./contracts/ -q
# Build database
w3goaudit build ./contracts/ -o database.json
# Extract contract info — every extract subcommand can build from a source
# path (like the scan) or load a pre-built database with --db
w3goaudit extract main ./contracts/
w3goaudit extract inheritance MyToken ./contracts/
w3goaudit extract entry MyToken --db database.json
```
控制台输出示例:
```
▶ Reading sources: ./contracts/
▶ Building database: 74 files, 164 contracts, 1203 functions
▶ Scanning: 25 templates (~/.w3goaudit/templates)
▶ Writing report: ./contracts-audit
81 findings: 65 HIGH, 16 MEDIUM · scanned 74 contracts in 51ms
── Findings ──────────────────────────────────────────────
🟠 HIGH (65 findings)
1. Arbitrary transferFrom Call
2. Unchecked ERC20 transfer / transferFrom Return Value
... (titles only on console; full detail in findings.md, or use --verbose)
📂 Results written to: ./contracts-audit
```
结果将生成在一个文件夹中 —— `README.md`(落地页)、`summary.md`、
`overview.md`、`findings.md`、`results.sarif`、`run.log`,一个机器可读的
`data/` 文件夹(JSON + 数据库 + manifest 索引),以及一个 `contracts/` 树(每个主合约一个子文件夹,映射源码路径),其中包含针对每个入口的工作流文件和状态更改报告。请参阅[结果文件夹布局](#result-folder-layout)。
`overview.md` 是报告索引,并链接到详细的产出物。
## 功能
- **AST 解析** - 使用 [solast-go](https://github.com/th13vn/solast-go) 解析 Solidity
- **合约数据库** - 包含继承关系、入口点、调用图的全面数据库
- **语义类型事实** - 参数、状态变量、局部变量、类型转换和调用接收者携带轻量级的类型事实,因此 WQL 可以保持简单,同时调用分类变得更加精确
- **C3 线性化** - 正确的 Solidity 继承解析
- **函数标识** - `Function.Selector` 存储规范文本,例如
`transfer(address,uint256)`;`Function.Signature` 存储其四字节的
Keccak 值,例如 `a9059cbb`
- **调用图** - 过滤内置函数并进行优化样式的递归追踪
- **精确标识** - 内部合约使用 `absPath#Contract`;函数使用
`absPath#Contract.selector(types)`。精确的 C3 `LinearizedBaseIDs` 和已解析的导入来源可防止不同文件中的重名发生交叉串联。
- **精确位置** - 从 1 开始、半开的 Unicode 码点列,以及从 0 开始、半开的 UTF-8 字节偏移量。SARIF 声明
`columnKind: unicodeCodePoints`,并且绝不将字节偏移量作为
`charOffset`/`charLength` 发出。这些不是 LSP 位置;LSP 的行和字符是从 0 开始的,并且通常使用 UTF-16 码元。
- **WQL 模板** - 用于安全模式匹配的强大查询语言,具备加载时验证(正则表达式、预设名称、过滤器/匹配器放置),确保拼写错误能快速失败,而不是默默地产生零结果的扫描。包含一个用于罕见原始来源谓词的源码范围 `regex` 匹配器,以及用于同合约局部/继承组合规则的合约范围 AST 匹配。
- **结果文件夹** - 每次扫描生成一个专属文件夹:一个 `README.md` 落地页,`summary.md`,`overview.md`(指标 + 范围内合约索引),`findings.md`,始终生成的 `results.sarif` + `run.log`,一个机器可读的 `data/`(`manifest.json`、可重用的 `database.json`、findings/overview、始终生成的 `diagnostics.json`,以及用于编辑器扩展的 nav/explorer/xref 数据),以及一个映射源码路径的 `contracts/` 树。可选择通过 `--html` 开启**完全离线**的 HTML 镜像(内嵌图形库 —— 无 CDN 请求)。
- **针对每个入口的工作流文件** - 为每个入口函数提供一个独立的上下文块(签名、认证 / 访问控制、守卫与检查、分支条件、传递的状态影响、Mermaid 调用工作流)—— 专为提供给人类或 AI 审计员而构建。
- **状态更改矩阵** - 针对每个合约,将每个状态变量映射到对其进行写入的函数,以及能够到达写入操作的入口点(反向调用图遍历)。
- **自提供模板** - 首次运行时下载最新的 [`w3goaudit-templates`](https://github.com/th13vn/w3goaudit-templates) 发行版(nuclei 风格,无需 git clone),可通过 `--update-templates` 刷新;内置的官方包是始终可用的离线后备方案。解压缩具有大小/文件数量上限,并通过回滚安全的分阶段目录交换进行安装。GitHub zipball 通过 TLS 进行身份验证,但未校验校验和/签名。
- **感知可达性的发现** - 每个发现都可以携带从外部可调用入口一直到托管危险语句的函数的完整调用链:结构化的 `reachability.steps[]` + `entryPoint`(审计员的修复指向标)+ JSON 中的 `primaryAst`,SARIF 中的 `relatedLocations`,Markdown / HTML 中的点级别追踪块,以及 `--verbose` 控制台上的 `↳ via …` 延续行。多位置发现还携带 `related[]`,Markdown 会渲染所有具有完整函数上下文的匹配位置。
- **SARIF 2.1.0** - 始终为 GitHub Code Scanning 生成 (`results.sarif`),带有可移植的相对 URI + `srcRoot`;故障时封闭的模板加载,支持 `NO_COLOR` 的控制台。
- **编辑器交叉引用** - `data/xref.json` 将 `declarations[]` 跳转目标与携带声明 `refId` 的 `references[]` 出现位置配对,因此编辑器可以进行精准的 go-to-definition 和 find-references(状态变量、参数、局部变量、已解析的调用、库 `using`、UDVT `wrap`/`unwrap`、类型转换、`revert`/`emit` 目标、应用的 modifier),而无需正则表达式兜底。请参阅[扩展输出](./docs/extension-output.md)。
- **项目检测** - 自动检测 Foundry、Hardhat、Truffle
- **导入解析** - 优先使用 Foundry remappings(感知配置文件和上下文,针对每个子项目),然后是 `node_modules/`/`lib/`/根目录搜索,最后是作为最后手段的约定布局和唯一后缀启发式方法,从而确保未提供 remappings 文件的区块浏览器抓取的源码依然能链接。启发式方法仅接受扫描树中已存在的文件,并在出现歧义时弃权;任何仍未解析的内容都会记录在 `data/diagnostics.json` 中。
- **Git 集成** - 自动检测 git 仓库并生成指向 GitHub/GitLab 的可点击文件链接
- **高级指标** - nSLOC、访问控制分析、分组入口点
- **源码提取** - 提取函数源码、上下文包以及完整的传递工作流源码
## 文档
可在 [`docs/`](./docs) 中获取综合指南:
- **[工作流](./docs/workflows.md)** - 带有图表的详细内部工作流
- **[使用指南](./docs/usage.md)** - 完整的 CLI 和 SDK 参考
- **[SDK 文档](./docs/sdk.md)** - 全面的 SDK API 参考和集成指南
- **[WQL 语法](./docs/wql-syntax.md)** - 模板编写参考
- **[扩展输出](./docs/extension-output.md)** - 用于编辑器集成的 `data/nav.json` + `data/explorer.json` + `data/xref.json` 架构
- **[项目概述](./docs/project-overview.md)** - 架构与设计
- **[内部原理](./docs/internals.md)** - 深入技术解析:函数、工作流、算法(C3、污点分析、访问控制)以及精度/边缘情况决策
## 安装
### 从源码安装
```
# Clone the repository
git clone https://github.com/th13vn/w3goaudit
cd w3goaudit
# Build
go build -o w3goaudit ./cmd/w3goaudit
# Move to PATH (optional)
sudo mv w3goaudit /usr/local/bin/
```
### 通过 Go Install 安装
```
go install github.com/th13vn/w3goaudit/cmd/w3goaudit@latest
```
### 自我更新
```
w3goaudit --update # re-runs `go install …@latest` (requires the Go toolchain)
```
## 结果文件夹布局
每次扫描(除非使用 `--stdout/-q`)都会写入一个结果文件夹,该文件夹经过优化,专为提供给人类或 AI 审计员而设计:
```
标签:EVTX分析, Go语言, Solidity, 区块链安全, 日志审计, 智能合约审计, 程序破解, 自动化payload嵌入