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安全, 云安全监控, 以太坊, 可视化界面, 智能合约审计, 网络流量审计, 通知系统, 静态分析