Page 359 - 《软件学报》2026年第1期
P. 359
356 软件学报 2026 年第 37 卷第 1 期
3.1.1.4 中间表示
利用中间表示法检测智能合约漏洞是一种通过将合约代码转换为中间表示 (intermediate representation, IR) 的
形式, 以便进行更高效、更精确的分析和验证. 这种方法能够抽象出智能合约代码的核心逻辑和操作, 简化复杂
性, 从而更容易检测潜在的安全漏洞. 其核心思想是将智能合约的源代码或字节码转换为一种标准化的、较低级
别的表示形式. 这种表示形式通常无关于具体编程语言, 更接近于机器代码, 但仍保留了程序的逻辑结构和数据流
信息.
SmartCheck [47] 使用 XML 解析树作为中间表示, 它是由 Tikbomirov 等人在 2018 年提出的一种基于静态分析
的智能合约漏洞检测工具. SmartCheck 对 Solidity 源代码进行词法和语法分析, 生成 XML 解析树作为中间表示,
然后利用 XPath 查询在中间表示上检测特定的漏洞模式, 从而实现对合约的全面代码覆盖和漏洞检测.
Slither [82] 将 Solidity 合约转换为 SlithIR 作为中间表示来实现静态分析. 该工具专门用于检测以太坊智能合约
中的常见安全漏洞. SlithIR 采用静态单一赋值形式, 并配备简化的指令集, 以便于分析合约的语义信息. Slither 能
够应用常见的程序分析技术, 如数据流分析和污点追踪, 同时支持代码优化与漏洞检测. 通过使用 SlithIR, Slither
提供了灵活且高效的分析平台, 显著提高了智能合约的检测精度并减少了误报率.
SmartState [48] 和 EthIR [110] 分别使用状态依赖图和规则基础表示作为中间表示. SmartState 框架由 Liao 等
人 [48] 提出, 主要用于检测智能合约中的状态回滚漏洞. 该框架通过细粒度的状态依赖关系分析, 从智能合约的字
节码和历史交易中提取状态依赖关系, 生成状态依赖图. 通过分析依赖图中的关键模式, SmartState 能够识别与状
态回滚漏洞相关的潜在安全问题, 如缺乏适当访问控制的关键状态. EthIR 是由 Alber 等人 [110] 提出的以太坊字节
码高级语义分析框架. 该方法通过逆向工程生成以太坊字节码的控制流图, 然后将其转化为 RBR. RBR 显式表示
数据流, 并通过规则表示控制流, 从而将低级字节码信息转化为易于分析的高级表示. 通过这种中间表示, EthIR 能
够利用现有的高级分析工具, 对智能合约的循环复杂度、资源消耗等性质进行自动化推理, 显著增强了字节码分
析的能力.
3.1.2 模糊测试方法
模糊测试 (fuzz testing) [111] 是一种自动化的软件测试技术, 用于发现程序中的错误和漏洞, 它也被广泛应用于
智能合约的测试中. 总体来说, 模糊测试是一种通过向系统输入异常、随机或意外的数据来尝试揭示错误和漏洞
的测试方法. 在智能合约的上下文中, 模糊测试涉及生成大量的随机输入数据, 并将这些数据作为交易发送到智能
合约中, 以观察合约的响应并检测潜在的安全问题. 相关工作可以分为两种: 基于生成引导的模糊测试和基于突变
引导的模糊测试. 智能合约漏洞检测的模糊测试方法工作流程如图 5 所示.
智能合约模糊测试
生成
基于规则、模型等指导 突变
改变数据值
筛选
测试用例生成 有效测试用例 测试用例突变
突变操作符
输入
改变数据结构
执行测试用例 输入
···
监控并分析 异常检测
执行结果 日志记录 漏洞报告 漏洞修复
图 5 智能合约模糊测试方法工作流程

