Page 364 - 《软件学报》2026年第1期
P. 364
揭晚晴 等: 智能合约与 DeFi 协议漏洞检测技术综述 361
筛选出可能包含逻辑漏洞的候选函数对, 接着基于 GPT 分析候选函数对以及函数的输入输出、状态变量变化等
属性, 识别出可能存在漏洞的函数对及与漏洞相关的关键变量和语句, 最终通过静态分析工具确认 GPT 识别出的
漏洞类型、关键变量和语句, 确保漏洞真实存在.
PropertyGPT
智能合约 4. 迭代循环
1. 代码嵌入 定义属性
编译器
0.6 0.3 0.1 ... 3. 检索和 PROMPT PropertyGPT
映射 生成提示 6. 反馈和 所有可兼容
0.8 0.5 0.3 ... 属性 验证结果
修改
0.4 0.2 0.9 ... 5. 生成
检索代码和 一个引用
向量 DB 7. 加权算法 8. 输出
属性 属性 生成的属性
2. 查询
排名前 K 的
用于测试的 属性 证明
合约函数
用于测试的
合约函数
图 8 结合 LLM 生成形式化验证属性的 PropertyGPT 流程图
在模糊测试方面, 结合 LLM 进行优化的整体流程如图 9 所示, 针对传统模糊分析在探索广阔状态空间时效率
较低的问题, Shou 等人 [126] 引入了 LLM4Fuzz, 通过利用 LLM 智能指导模糊测试活动并确定其优先级, 优化了智
能合约模糊测试技术. 该方法首先利用静态分析提取智能合约的复杂度、状态变量依赖性、外部依赖性和控制流
信息等属性, 为 LLM 提供必要的上下文信息, 然后引入复杂性、顺序可能性、漏洞可能性和不变性依赖性这 4 个
模块, 利用 LLM 对代码片段进行评分, 并根据评分为每个测试用例分配“能量”, 通过调整这些“能量”优化模糊测
试的优先级调度, 引导模糊测试聚焦于更可能发现漏洞的代码区域. 针对传统模糊测试通常依赖于随机生成初始
种子, 导致种子覆盖率不足的问题, Sun 等人 [127] 提出了基于链式提示的生成方法. 该方法首先深入分析任务需求,
设计出覆盖关键信息的基础提示, 然后结合用户反馈和 LLM 生成的结果, 不断补充和调整提示内容, 以提高生成
初始种子的逻辑性和连贯性. 同时, 该方案引入了基于生成器和评估器的对抗生成机制, 生成器基于链式提示生成
方法生成智能合约初始测试用例, 评估器则负责检查并优化这些生成的测试用例. 通过生成器与评估器之间的交
互和优化, 进一步提高了生成测试用例的质量, 增强了模糊测试的效率和覆盖率.
复杂度 能量
分配
生成者 测试用例 漏洞可能性
对抗角色 链式提示 优先级 1 2
序列可能性 调度
SCORE 3
智能合约 不变量依赖性 执行
打分 测试用例 识别漏洞
评估者 集成检查 …
种子生成 模糊测试执行
图 9 结合 LLM 优化的模糊测试流程示意图
3.1.5 传统智能合约层漏洞检测方法小结
传统智能合约层漏洞检测包括静态分析、模糊测试和基于深度学习的漏洞检测方法, 表 3 对这些方法根据类
别、方法概述、发表会议/期刊以及发表年份进行了总结. 其中需要注意, 本文梳理传统智能合约层检测方法不包
含涉及 LLM 的方法. 静态分析在不实际执行程序的情况下分析智能合约, 包括形式化验证、符号执行、污点分析
和基于中间表示这 4 种类型的方法. 模糊测试通过向被测智能合约输入大量测试输入 (即测试用例), 并通过监测

