xsaher/evm-analyzer

GitHub: xsaher/evm-analyzer

一款直接针对 EVM 字节码进行静态安全分析的智能合约漏洞检测工具,无需源代码即可通过多层分析引擎检测以太坊合约中的安全漏洞。

Stars: 0 | Forks: 0

# EVM 字节码安全分析器 一款用于 Ethereum 智能合约的静态安全分析工具。直接在已部署的字节码上运行——无需源代码。 作为个人项目开发,旨在深入理解 EVM 内部机制与智能合约安全。 ## 与众不同之处 大多数像 Slither 和 MythX 这样的工具需要 Solidity 源代码。本工具分析任何已部署合约的编译后 EVM 字节码,甚至包括未经验证的合约。它超越了简单的模式匹配,通过三个独立的分析层在每个合约上同时运行。 ## 基准测试 在 4 个类别的 50 个真实合约上进行了测试:历史受攻击合约、主要 DeFi 协议、ERC20 代币以及经过正式验证的安全合约。 | 指标 | 得分 | |---|---| | 已分析合约 | 50 | | 受攻击合约 | 18 | | True Positives | — | | False Negatives | — | | Precision | — | | Recall | — | | F1 Score | — | 运行基准测试: ``` python benchmark_runner.py python benchmark_runner.py --category exploited python benchmark_runner.py --limit 10 ``` ## 在真实受攻击合约上的测试 | 合约 | 被盗金额 | 工具检测结果 | 关键发现 | |---|---|---|---| | The DAO (2016) | $60M | CRITICAL | Reentrancy + Integer Overflow → Storage Corruption | | Rubixi (2014) | $2M | CRITICAL | Reentrancy + Integer Overflow → Storage Corruption | | Bancor (2018) | $23M | HIGH | SELFDESTRUCT + 用户控制的 Storage Write | 该工具检测到了每次攻击中被利用的确切漏洞。 ## 检测到的漏洞 **通过 Pattern Analysis:** - Reentrancy(CALL 在 SSTORE 之前) - 向不受信任地址发起的 DELEGATECALL - 无访问控制的 SELFDESTRUCT - tx.origin 身份验证 - Timestamp dependence - Weak randomness - 未检查的外部调用返回值 - Integer overflow **通过 Taint Analysis(块间):** - 用户控制的 storage write - 用户控制的 call target - 用户控制的 ETH 转账金额 - 用户控制的 DELEGATECALL target - 用户控制的 SELFDESTRUCT beneficiary **通过 Symbolic Execution:** - 确认的用户控制的 SSTORE(包含完整 value trace) - 确认的用户控制的 CALL target(包含 taint origin) - 确认的用户控制的 ETH 转账金额 - 确认的用户控制的 DELEGATECALL target - 确认的用户控制的 SELFDESTRUCT beneficiary **严重程度升级:** - 流入 SSTORE 的 Integer overflow → 升级为 **CRITICAL** - 流入 CALL value 的 Integer overflow → 升级为 **CRITICAL** ## 安装说明 ``` git clone https://github.com/xsaher/evm-analyzer cd evm-analyzer pip install -r requirements.txt cp .env.example .env ``` 将你免费的 Etherscan API key 添加到 `.env` 中。可以在 etherscan.io/myapikey 获取 ## 用法 ``` # 单个 contract python main.py 0xdAC17F958D2ee523a2206206994597C13D831ec7 # 多个 contract python main.py 0xdAC17F958D2ee523a2206206994597C13D831ec7 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 # 将报告保存到特定文件夹 python main.py 0xdAC17F958D2ee523a2206206994597C13D831ec7 -o ./reports # 检查版本 python main.py --version ``` 每次分析会生成: - 带有颜色编码严重程度级别的终端摘要 - `report_
.html` — 可视化审计报告 - `report_
.json` — 用于集成的结构化输出 ## 架构 ``` evm-analyzer/ ├── fetcher/ │ └── etherscan.py ├── decoder/ │ └── opcode_decoder.py ├── analyzer/ │ ├── cfg_builder.py │ ├── vulnerability_patterns.py │ └── taint_analysis.py ├── symbolic_execution/ │ ├── symbolic_value.py │ ├── symbolic_stack.py │ ├── symbolic_interpreter.py │ ├── symbolic_engine.py │ ├── symbolic_finding.py │ └── path_state.py ├── reporter/ │ ├── html_report.py │ └── json_report.py ├── benchmark_runner.py └── main.py ``` ## 工作原理 ``` Contract Address │ ▼ Etherscan API → Raw Bytecode │ ▼ Opcode Decoder → Instruction list │ ▼ CFG Builder → Basic blocks + edges │ ├──→ Pattern Matching → Reentrancy, SELFDESTRUCT, tx.origin... │ ├──→ Taint Analysis → Tracks user input across all blocks │ Escalates severity when overflow hits a sink │ └──→ Symbolic Execution → Runs every opcode with symbolic values Confirms taint reaches dangerous sinks │ ▼ HTML + JSON Reports ``` ### Symbolic Execution 符号引擎为每个用户控制的输入分配一个符号值——包括 `CALLDATALOAD`、`CALLER`、`CALLVALUE` 等。这些值带有一个 taint origin 标签,该标签会在整个 CFG 中的每一次算术和逻辑操作中传播。 当被污染的值到达危险 sink(`SSTORE`、`CALL`、`DELEGATECALL`、`SELFDESTRUCT`)时,引擎会记录一个已确认的发现,并附带完整的 taint origin。这消除了仅靠模式匹配带来的误报:只有在数据流被证明时才会报告发现,而不仅仅是怀疑。 引擎使用工作列表算法来遍历 CFG,并通过在每个条件跳转处记录路径约束来支持通过 `JUMPI` 进行分支。 ## 技术栈 - Python 3.9+ - NetworkX — CFG 构建与遍历 - pycryptodome — 用于函数选择器解析的 keccak256 - Requests — Etherscan API - Rich — 终端输出 ## 参考 - [Ethereum Yellow Paper](https://ethereum.github.io/yellowpaper/paper.pdf) - [EVM Opcodes 参考](https://www.evm.codes/) - [The DAO 攻击分析](https://hackingdistributed.com/2016/06/18/analysis-of-the-dao-exploit/) - [Consensys 智能合约最佳实践](https://consensys.github.io/smart-contract-best-practices/) *本工具是用于自动化静态分析的活跃研究原型,不能替代完整的手动安全审计。*
标签:EVM字节码, XSS注入, 云安全监控, 区块链安全, 字符串匹配, 智能合约审计, 特权检测, 逆向工具, 静态分析