augusttw/v4-hooks-analyzer
GitHub: augusttw/v4-hooks-analyzer
一款用于分析 Ethereum 主网上 Uniswap V4 hook 合约安全风险的 CLI 工具,通过双重检测机制和按 callback 隔离的字节码反汇编来标记潜在风险。
Stars: 2 | Forks: 0
# v4-hooks-analyzer 🔍
**用于 Uniswap V4 hook 合约的 CLI 安全分析器。**
分析部署在 Ethereum 主网上的 hook 合约 —— 检测实现了哪些 V4 callback(通过地址 bit flag **和** bytecode selector 匹配),反汇编 EVM bytecode,标记安全风险,并检测可升级的 proxy 模式。
## 功能
### v0.3.1
- **不再静默丢弃 callback** —— 找到了 PUSH4 selector 但没有 PUSH2
dispatcher 入口的代码现在会回退到带有标签的整个合约扫描
("isolation unverified"),而不是直接被丢弃(回归修复)
- **不再截断代码段** —— `extract_callback_segment` 不再在
internal 的 REVERT/INVALID 分支出口且后跟真实代码处截断 handler
- **Clippy-clean** —— 修复了所有 `cargo clippy -- -D warnings` 错误
- **+4 个回归测试**(总计 7 个)
### v0.3
- **按 callback 隔离 bytecode** —— 每个检测到的 callback 的风险
分析现在只在其隔离的代码路径上运行(从 dispatcher 的
JUMPDEST 到其终止符),而不是扫描整个合约。
消除了当一个 callback 的 SSTORE/CALL
错误地标记了不相关 callback 的误报。
- **捕获真实的 dispatcher jumpdest** —— `find_dispatcher_jumpdests`
现在会解析 `PUSH4 selector → EQ → PUSH2 dest → JUMPI` 模式并
记录真实的 handler 入口 PC(之前硬编码为 0)。
- **单元测试** —— 针对 dispatcher 解析和代码段隔离在
synthetic bytecode 上进行了测试。
### v0.2
- **双重检测**:地址 bit flag(标准的 V4 方法 —— `address & 0x3FFF`)
**和** bytecode selector 扫描(14 个真实的 keccak256 selector)
- **EVM 反汇编** —— 解析约 40 个 opcode,识别 CALL, SSTORE, SELFDESTRUCT
- **每个 callback 有 7 个风险启发式规则**:
- Selfdestruct(严重)
- DELEGATECALL / proxy 行为(严重)
- 重入(外部调用后更改状态)
- swap/donate 期间的外部调用
- TIMESTAMP/NUMBER 依赖(MEV 向量)
- Delta 能力警告
- **EIP-1967 proxy 检测** —— 识别可升级的实现插槽
并带有单独的严重性分类;标记指出扫描**仅为特定时间点**
- **关于以下内容的明确免责声明**:
- 地址 flag 与代码行为(flag ≠ 代码安全)
- 静态分析的局限性(仅限运行时的恶意路径)
- 可升级的 proxy(实现可能在扫描后发生改变)
- **彩色报告** —— 每个 callback 的评分为 0-100,并给出最终结论
## 快速开始
```
# 分析 mainnet 上的 hook
cargo run -- 0x4440854B2d02C57A0Dc5c58b7A884562D875c0c4 \
-r "https://ethereum-rpc.publicnode.com"
# 自定义 RPC
cargo run -- -r "https://eth.merkle.io"
```
## Hook 检测的工作原理
Uniswap V4 hook 在其**部署地址的低 14 位**中编码了它们实现的 callback。此外,还会扫描 bytecode,查找与已知的 4 字节 selector 匹配的 PUSH4+EQ+JUMPI dispatcher 模式。
| Bit | Callback | 风险 |
|-----|----------|------|
| 13 | beforeInitialize | 低 |
| 12 | afterInitialize | 低 |
| 11 | beforeAddLiquidity | 中 |
| 10 | afterAddLiquidity | 中 |
| 9 | beforeRemoveLiquidity | 中 |
| 8 | afterRemoveLiquidity | 中 |
| 7 | beforeSwap | 高 |
| 6 | afterSwap | 高 |
| 5 | beforeDonate | 中 |
| 4 | afterDonate | 中 |
| 3 | beforeSwapReturnDelta | 高 |
| 2 | afterSwapReturnDelta | 高 |
| 1 | afterAddLiquidityReturnDelta | 中 |
| 0 | afterRemoveLiquidityReturnDelta | 中 |
## ⚠️ 重要注意事项
**地址 flag ≠ 代码行为。** 地址 bit 告诉你 hook *可能*执行哪些 callback(在初始化时由 PoolManager 检查)。它们**并不**告诉你 callback 代码实际上会做什么。一个只带有 beforeSwap/afterSwap flag 的 hook 在该范围内仍然可能完全是恶意的。
**静态分析是特定时间点的。** 一个基于 runtime 状态(例如,仅在区块 N 之后,或高于某个余额阈值时)限制恶意行为的 hook 可能看起来很干净。对于可升级的 hook(EIP-1967 或类似协议),实现可以在扫描和交互之间发生改变。请将干净的扫描结果视为一个起点,而不是保证。
## 路线图
- [x] **v0.1**:初始发布 —— 地址 flag 检测,EVM 反汇编,7 个风险启发式规则
- [x] **v0.2**:Bytecode selector 匹配,EIP-1967 proxy 检测,双重检测显示,用户注意事项
- [x] **v0.3**:按 callback 隔离 bytecode(仅反汇编相关的代码路径)
- [ ] **v0.4**:通过 Etherscan 集成 ABI 以进行签名匹配
- [ ] **v0.5**:闪电贷风险分析 + 预言机操纵检测
- [ ] **v0.6**:用于 CI/自动化 pipeline 的 JSON 输出
- [ ] **v1.0**:多链支持(Base, Arbitrum, Optimism, Polygon)
## 许可证
MIT
标签:Rust, Web3安全, 云安全监控, 以太坊, 可视化界面, 智能合约审计, 网络流量审计, 通知系统, 静态分析