入口点分析器Skill entry-point-analyzer

入口点分析器是一个智能合约安全审计工具,用于识别和分析状态改变的函数入口点,分类访问控制,生成结构化审计报告。关键词:智能合约、安全审计、入口点分析、区块链安全、状态改变函数。

安全审计 0 次安装 0 次浏览 更新于 3/14/2026

name: 入口点分析器 description: 分析智能合约代码库,以识别状态改变的入口点,用于安全审计。检测可外部调用的修改状态的函数,按访问级别(公开、管理员、角色限制、仅合约)分类,并生成结构化审计报告。排除视图/纯/只读函数。用于审计智能合约(Solidity、Vyper、Solana/Rust、Move、TON、CosmWasm)或当被要求查找入口点、审计流程、外部函数、访问控制模式或特权操作时。 allowed-tools:

  • 读取
  • Grep
  • Glob
  • Bash

入口点分析器

系统性地识别智能合约代码库中所有状态改变的入口点,以指导安全审计。

何时使用

使用此技能当:

  • 开始智能合约安全审计以映射攻击面
  • 被要求查找入口点、外部函数或审计流程
  • 分析代码库中的访问控制模式
  • 识别特权操作和角色限制函数
  • 建立对哪些函数可以修改合约状态的理解

何时不使用

不要使用此技能用于:

  • 漏洞检测(使用审计上下文构建或特定领域审计)
  • 编写利用POC(使用Solidity POC构建器)
  • 代码质量或气体优化分析
  • 非智能合约代码库
  • 分析只读函数(此技能排除它们)

范围:仅状态改变函数

此技能专注于可修改状态的函数。排除:

语言 排除模式
Solidity viewpure 函数
Vyper @view@pure 函数
Solana mut 账户引用的函数
Move 非入口 public fun(仅模块可调用)
TON get 方法(FunC)、只读接收器(Tact)
CosmWasm query 入口点及其处理程序

为什么排除只读函数? 它们不能直接导致资金损失或状态损坏。虽然它们可能泄露信息,但审计的主要焦点是可能改变状态的函数。

工作流程

  1. 检测语言 - 从文件扩展名和语法识别合约语言
  2. 使用工具(如果可用) - 对于Solidity,检查Slither是否可用并使用它
  3. 定位合约 - 查找所有合约/模块文件(如果指定,应用目录过滤器)
  4. 提取入口点 - 解析每个文件以查找可外部调用、状态改变的函数
  5. 分类访问 - 按访问级别分类每个函数
  6. 生成报告 - 输出结构化Markdown报告

Slither集成(Solidity)

对于Solidity代码库,Slither可以自动提取入口点。在手动分析之前:

1. 检查Slither是否可用

which slither

2. 如果检测到Slither,运行入口点打印机

slither . --print entry-points

这将输出所有状态改变入口点的表格,包括:

  • 合约名称
  • 函数名称
  • 可见性
  • 应用的修饰符

3. 使用Slither输出作为基础

  • 解析Slither输出表格以填充分析
  • 与手动检查交叉引用以进行访问控制分类
  • Slither可能错过某些模式(回调、动态访问控制)— 用手动审查补充
  • 如果Slither失败(编译错误、不支持功能),则回退到手动分析

4. 当Slither不可用时

如果 which slither 返回无,则使用语言特定参考文件进行手动分析。

语言检测

扩展名 语言 参考
.sol Solidity {baseDir}/references/solidity.md
.vy Vyper {baseDir}/references/vyper.md
.rs + Cargo.tomlsolana-program Solana(Rust) {baseDir}/references/solana.md
.move + Move.tomledition {baseDir}/references/move-sui.md
.move + Move.tomlAptos {baseDir}/references/move-aptos.md
.fc.func.tact TON(FunC/Tact) {baseDir}/references/ton.md
.rs + Cargo.tomlcosmwasm-std CosmWasm {baseDir}/references/cosmwasm.md

根据检测到的语言加载适当的参考文件。

访问分类

将每个状态改变入口点分类到以下类别之一:

1. 公开(无限制)

任何人都可调用,无限制的函数。

2. 角色限制

限于特定角色的函数。常见检测模式:

  • 显式角色名称:adminownergovernanceguardianoperatormanagerminterpauserkeeperrelayerlenderborrower
  • 角色检查模式:onlyRolehasRolerequire(msg.sender == X)assert_owner#[access_control]
  • 当角色模糊时,标记为**“限制(需审查)”**,并注明限制模式

3. 仅合约(内部集成点)

仅其他合约可调用,非EOA。指标:

  • 回调:onERC721ReceiveduniswapV3SwapCallbackflashLoanCallback
  • 带合约调用者检查的接口实现
  • 如果 tx.origin == msg.sender 则回退的函数
  • 跨合约钩子

输出格式

生成具有以下结构的Markdown报告:

# 入口点分析:[项目名称]

**分析时间**:[时间戳]
**范围**:[分析的目录或“完整代码库”]
**语言**:[检测到的语言]
**焦点**:仅状态改变函数(排除view/pure)

## 摘要

| 类别 | 数量 |
|----------|-------|
| 公开(无限制) | X |
| 角色限制 | X |
| 限制(需审查) | X |
| 仅合约 | X |
| **总计** | **X** |

---

## 公开入口点(无限制)

任何人都可调用的状态改变函数—优先用于攻击面分析。

| 函数 | 文件 | 备注 |
|----------|------|-------|
| `functionName(params)` | `path/to/file.sol:L42` | 简要备注(如相关) |

---

## 角色限制入口点

### 管理员 / 所有者
| 函数 | 文件 | 限制 |
|----------|------|-------------|
| `setFee(uint256)` | `Config.sol:L15` | `onlyOwner` |

### 治理
| 函数 | 文件 | 限制 |
|----------|------|-------------|

### 监护人 / 暂停者
| 函数 | 文件 | 限制 |
|----------|------|-------------|

### 其他角色
| 函数 | 文件 | 限制 | 角色 |
|----------|------|-------------|------|

---

## 限制(需审查)

具有需要手动验证的访问控制模式的函数。

| 函数 | 文件 | 模式 | 为什么审查 |
|----------|------|---------|------------|
| `execute(bytes)` | `Executor.sol:L88` | `require(trusted[msg.sender])` | 动态信任列表 |

---

## 仅合约(内部集成点)

仅其他合约可调用的函数—有助于理解信任边界。

| 函数 | 文件 | 预期调用者 |
|----------|------|-----------------|
| `onFlashLoan(...)` | `Vault.sol:L200` | 闪电贷提供者 |

---

## 分析的文件

- `path/to/file1.sol` (X 状态改变入口点)
- `path/to/file2.sol` (X 状态改变入口点)

过滤

当用户指定目录过滤器时:

  • 仅分析该路径内的文件
  • 在报告标题中注明过滤器
  • 示例:“仅分析 src/core/” → 范围 = src/core/

分析指南

  1. 彻底:不要跳过文件。每个状态改变的可外部调用函数都重要。
  2. 保守:当不确定访问级别时,标记为审查而非误分类。
  3. 跳过只读:排除 viewpure 及等效只读函数。
  4. 注意继承:如果函数的访问控制来自父合约,注明。
  5. 跟踪修饰符:列出应用于每个函数的所有访问相关修饰符/装饰器。
  6. 识别模式:查找常见模式,如:
    • 初始化函数(通常在首次调用时无限制)
    • 升级函数(高特权)
    • 紧急/暂停函数(监护人级别)
    • 费用/参数设置函数(管理员级别)
    • 代币转移和批准(通常公开)

按协议类型的常见角色模式

协议类型 常见角色
DEX ownerfeeManagerpairCreator
借贷 adminguardianliquidatororacle
治理 proposerexecutorcancellertimelock
NFT minteradminroyaltyReceiver
桥接 relayerguardianvalidatoroperator
金库/收益 strategistkeeperharvestermanager

应拒绝的简化

分析入口点时,拒绝这些快捷方式:

  • “这个函数看起来标准” → 仍分类它;标准函数可能有非标准访问控制
  • “修饰符名称清晰” → 验证修饰符的实际实现
  • “这显然是仅管理员” → 追踪实际限制;“显然”假设可能错过细微绕过
  • “我会跳过回调” → 回调定义信任边界;始终包含
  • “它不修改太多状态” → 任何状态改变都可能被利用;包含所有非view函数

错误处理

如果文件无法解析:

  1. 在报告的“分析警告”下注明
  2. 继续剩余文件
  3. 建议手动审查无法解析的文件