SCDBench: A Benchmark for LLM-Based Smart Contract Decompilers¶
会议: NeurIPS 2026
arXiv: 2605.29059
OpenReview: https://openreview.net/forum?id=M1QDaACV7f
领域: LLM 评测
关键词: 智能合约反编译, 大语言模型评测, EVM 字节码, 差分重放, 语义一致性
一句话总结¶
提出了首个针对大语言模型智能合约反编译的标准化评测基准 SCDBench,构建了涵盖 600 个真实以太坊合约与 22.7 万个语义测试用例的数据集,通过格式完整性、可编译性、ABI 恢复与差分重放语义一致性四阶递进式评估,揭示了前沿大模型表面生成伪代码与深层执行语义正确之间的巨大鸿沟。
研究背景与动机¶
智能合约作为运行在区块链底层虚拟机(如 EVM)上的去中心化程序,托管着数千亿美元规模的加密金融资产与核心治理逻辑。由于智能合约代码一经部署即公开可见且不可篡改,其安全性与可审计性至关重要;然而以太坊上超过 99% 的在链部署合约并未在开源浏览器上公开或验证高层高级语言(如 Solidity)源码,仅以底层二进制字节码形式暴露。这种高度不透明性为安全审计、漏洞挖掘和生态监测带来了巨大的认知屏障。传统的反编译工具(如 Erays、Gigahorse、Elipmoc 及 Shrnkr)主要依托控制流重构、静态分析与类型推断,其输出往往止步于充斥着寄存器变量的三地址码或低级伪代码,开发人员与审计专家阅读极其困难,难以直接重编译与执行。
近年来大语言模型在代码理解与生成领域的突破,为从低级 EVM 字节码直接逆向合成高可读性、高层语义结构完整的 Solidity 源码提供了全新技术路径。然而,这一新兴领域缺乏标准化、可复现且覆盖语义层面的基准测试体系。以往针对反编译模型的评估多依赖私有或小规模闭源样本,指标高度局限于词法相似度(如 BLEU/CodeBLEU)或浅层控制流图匹配;更为关键的是,大模型具备强大的“胡说八道”与表面拟合能力,生成的代码极易在语法上看起来结构工整、甚至能够通过编译器编译,但内部状态变量读写、访问控制断言或转账逻辑等执行语义却与原字节码南辕北辙。由于缺乏统一的测试环境与细粒度语义校验工具,研究界既无法公平横向对比不同模型与架构,也无法量化模型从“表面似是而非”走向“可信工程可用”的真实距离。
面对测试真实性、多样性控制与语义可验证性三者之间的权衡难题,本文致力于建立一套公开、公平且端到端可执行的标准化评测基准。核心 idea:构建包含分层难度抽样的 600 个真实以太坊合约与 22.7 万个函数级执行测试用例的标准化基准 SCDBench,提出覆盖“格式完整性 → 源码可编译性 → 接口 ABI 恢复 → 差分重放语义一致性”的四阶累积评测体系,以严格的端到端执行证据揭示前沿模型在逆向工程中的真实语义能力边界。
方法详解¶
整体框架¶
SCDBench 构建了从真实链上数据清洗、分层抽样、测试用例生成到四阶递进式评估的完整闭环。基准输入为去元数据后的 EVM 汇编指令序列(辅以非唯一公有签名选择器候选提示),要求被测反编译器输出由编译器配置 JSON、自包含 Solidity 源码及目标合约名称构成的结构化响应。评测流水线基于严格的累积记分规则:若前置阶段失败,后续更高阶阶段自动记为未通过,杜绝通过过滤困难样本虚高指标的现象。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["链上已验证合约语料<br/>772,736 个独立字节码对"] --> B["近重复过滤与三阶难度分层抽样"]
B --> C["函数级测试用例生成与差分检查点记录"]
C --> D["零样本反编译生成<br/>EVM 汇编 + 签名候选提示"]
D --> E["单步编译器反馈自修复"]
E --> F["四阶累积评测流水线<br/>格式 → 编译 → ABI → 语义重放"]
关键设计¶
1. 近重复过滤与可解释难度分层抽样:兼顾现实分布与基准多样性
以太坊链上合约呈现极度不均衡的长尾分布,超过 77% 的合约基于 Solidity v0.8 编译,且超过 63% 属于 ERC20 等轻微修改常量的标准化代币模板。直接均匀随机抽样将导致基准被大量高度相似的模板合约所主导,失去对复杂工程逻辑的评测能力。针对这一痛点,SCDBench 首先采用无损确定性指纹聚类算法执行近重复过滤:剥离 Solidity 编译元数据后,提取去除 PUSH 操作数的严格结构哈希、粗粒度指令族哈希(将 PUSHx/DUPx/SWAPx 归一化)以及源结构骨架哈希,并在 10% 对数长度窗口内进行聚类并去重,从 77.2 万个原始合约中凝练出 33.3 万个独立骨架族。随后,为了全面考量代码复杂度,设计了综合五大维度的连续难度评分函数:
其中 \(B\) 为字节码规模(字节大小与操作码数量),\(C\) 为控制流复杂度(圈复杂度代理与基本块计数),\(I\) 为接口与源码规模(函数签名数与代码行数),\(S\) 为状态交互复杂度(SLOAD/SSTORE 读写、外部调用及事件 LOG),\(L\) 为底层高级特性(内联汇编、delegatecall、selfdestruct 等)。依据评分三分位数将合约划分为简单(Easy)、中等(Medium)与困难(Hard)三个难度等级,并结合编译器版本(v0.4 至 v0.8)利用平方根分层加权比例抽样各选出 200 个,最终固定 600 个代表性合约,中位数字节码从简单难度的 2,924 字节平滑跨越至困难难度的 15,342 字节。
2. 细粒度可执行测试用例生成与差分重放验证:突破浅层语法对比
反编译恢复的 Solidity 代码是否真正恢复了业务语义,无法仅凭静态语法树或接口名对比得出结论。针对传统代码评测中依赖静态文本相似度、无法验证运行时状态变更的痛点,SCDBench 提出了基于差分模糊测试理念的动态状态重放机制。对于评测合约中暴露的共计 14,553 个公开函数,基准构建阶段在真实链上归档节点或本地沙箱环境(Foundry/EVM)中对原始 Ground Truth 源码编译部署并生成可执行测试用例。测试输入生成引擎融合了确定性边界值(0、1、空字符串、极大整数边界)、静态字面量常量提取、特定 ABI 类型随机值以及针对常见状态依赖模式(如所有者权限 onlyOwner、授权额度 allowance、账户余额更新等先写后读序列)的有状态前置初始化调用序列。
在评估被测反编译器时,评测框架在独立沙箱中重新编译模型生成的源码并部署对应合约工件,依次向每一个恢复的公有函数重放预录制的测试用例序列。一次执行被判定为严格“语义一致”,必须同时满足四大要素的完全等价:函数返回值一致(或在相同断言下触发一致的 Revert 状态)、触发的事件日志(Event Logs)主题与数据一致、以及修改的状态存储槽(Storage Slots)物理变更完全对齐。全集共构建 227,383 个测试用例,实现了平均 77.8% 的高代码分支覆盖率,使得在不具备完全形式化验证条件的前提下,能够以低成本、确定性的执行证据直接衡量反编译的语义真实性。
3. 四阶递进式累积评测体系与单步编译器反馈自修复:构建标准化与智能体演进路径
为了精确归因反编译器在不同抽象层次上的缺陷分布,SCDBench 确立了四阶严格累积测试指标:第一阶段格式完整性(Format Completeness),检查模型输出是否包含严格闭合的 XML 结构块(编译器配置 JSON、自包含无外部依赖 import 的源码、指定目标合约工件名);第二阶段源码可编译性(Compilability),通过调用对应版本的 solc 编译器验证语法与类型合法性;第三阶段接口恢复(ABI Recovery),以微平均精确率、召回率与 F1 衡量公有函数签名集合的重建完整度;第四阶段语义一致性(Semantic Consistency),在函数级和合约级统计差分重放通过率。
针对大模型在反编译过程中极易产生的局部孤立语法错误(如十六进制地址缺少校验和导致地址字面量非法、变量重名冲突、小范围类型/可见性不匹配等),基准进一步引入了零样本单步编译修复(Zero-Shot Compilation Repair)机制作为通往智能体反编译(Agentic Decompilation)的原型探索。当模型首轮输出符合格式要求但编译报错时,评测引擎捕获标准 solc 错误诊断信息,在不更换模型的前提下调用同模型进行一次单轮修复。该机制能够以极低的额外计算预算排除琐碎编译语法噪音,使基准更聚焦于衡量模型对底层程序状态流与业务控制流的深度理解能力。
损失函数 / 训练策略¶
本论文为基准构建与评测研究,未微调专属模型,重点制定了标准化的零样本提示词规范与推理评测环境。被测模型包含 Claude Opus 4.7、GPT-5.3-Codex 以及开源权重模型 GLM-5(细分非思考版 instruct 与思考版 high-thinking)。所有模型统一通过 OpenRouter 接口调用,零样本反编译阶段系统提示词强制约束输出三段式 XML 结构标签,严禁使用外部依赖库(如 OpenZeppelin 等,必须自包含展开最小依赖),输入由纯文本 EVM 汇编操作码构成,辅以从 4byte 数据库提取的非唯一候选函数/事件签名。测试重放基于标准 solc 编译器与 Foundry/EVM 架构归档节点执行。
实验关键数据¶
主实验¶
在 600 个真实合约(共 14,553 个公开函数)的 SCDBench 评测中,闭源前沿模型全面优于开源基准,单步编译修复显著提振了全线模型的可用率;然而跨越到深层语义层面时,所有模型均表现出急剧的断崖式性能衰减。
| 模型 | 修复 | 格式完整性通过率 (%) | 编译成功率 (%) | ABI 恢复 Micro-F1 | 语义一致函数占比 (%) | 完美反编译合约数 / 600 |
|---|---|---|---|---|---|---|
| Opus 4.7 | 否 | 72.5 (435/600) | 56.8 (341/600) | 0.615 | 22.5 (3271/14553) | 33 (5.5%) |
| Opus 4.7† | 是 | 72.5 (435/600) | 69.2 (415/600) | 0.721 | 29.4 (4284/14553) | 42 (7.0%) |
| GPT-5.3-Codex | 否 | 94.0 (564/600) | 70.2 (421/600) | 0.766 | 19.6 (2851/14553) | 33 (5.5%) |
| GPT-5.3-Codex† | 是 | 94.0 (564/600) | 90.3 (542/600) | 0.896 | 28.0 (4078/14553) | 41 (6.8%) |
| GLM-5 | 否 | 86.7 (520/600) | 36.8 (221/600) | 0.428 | 9.9 (1442/14553) | 14 (2.3%) |
| GLM-5† | 是 | 86.7 (520/600) | 67.2 (403/600) | 0.697 | 20.7 (3015/14553) | 18 (3.0%) |
| GLM-5 (instruct) | 否 | 90.0 (540/600) | 24.0 (144/600) | 0.287 | 5.8 (840/14553) | 4 (0.7%) |
| GLM-5 (instruct)† | 是 | 90.0 (540/600) | 64.3 (386/600) | 0.658 | 17.7 (2570/14553) | 6 (1.0%) |
注:† 表示开启单步编译器反馈自修复。各项指标按原始基准分母严格累积计算,前序阶段失败的样本在后续阶段统一记为 0。
消融实验:编译失败类型归因与单步自修复能力分析¶
论文深入分析了模型在首轮输出中产生编译错误的原因类别,以及经过单步编译器报错提示反馈后成功修复的比例,揭示了不同模型在语法纠错与程序约束理解上的特性差异。
| 编译失败根因类别 | 出现模型代表 | Easy 阶段失败 (修复数) | Medium 阶段失败 (修复数) | Hard 阶段失败 (修复数) | 全局总失败 (修复数) | 修复成功率 (%) |
|---|---|---|---|---|---|---|
| 非法地址字面量 / Checksum 错误 | GPT-5.3-Codex | 13 (12) | 24 (22) | 30 (24) | 67 (58) | 86.6% |
| 非法地址字面量 / Checksum 错误 | Opus 4.7 | 11 (10) | 10 (9) | 13 (5) | 34 (24) | 70.6% |
| 重复声明 / 命名冲突 | GLM-5 (instruct) | 41 (31) | 52 (30) | 64 (33) | 157 (94) | 59.9% |
| 重复声明 / 命名冲突 | GLM-5 | 14 (7) | 44 (33) | 35 (21) | 93 (61) | 65.6% |
| 类型与可变性错误 (Type/Mutability) | GLM-5 (instruct) | 20 (18) | 26 (21) | 21 (14) | 67 (53) | 79.1% |
| 未解析的标识符/成员 (Unresolved) | GLM-5 | 7 (6) | 17 (7) | 37 (19) | 61 (32) | 52.5% |
| EVM 堆栈过深 (Stack Too Deep) | GPT-5.3-Codex | 3 (3) | 8 (6) | 19 (17) | 30 (26) | 86.7% |
| 解析器语法错误 (Parser errors) | GLM-5 (instruct) | 15 (6) | 14 (3) | 26 (6) | 55 (15) | 27.3% |
关键发现¶
- 编译成功不等于语义正确:GPT-5.3-Codex† 在编译通过率(90.3%)和 ABI F1(0.896)上均占据榜首,但在全局语义一致性上(28.0%)反而略低于 Opus 4.7†(29.4%)。这表明具备极佳的接口推断与编译语法纠错能力的模型,不一定能够准确逆向出底层精确的数据流和存储槽写入逻辑。
- 端到端完全正确的合约逆向极难:在最严苛的“完美反编译”(要求合约内所有公有函数全被找回且所有重放检查点 100% 匹配无虚构函数)标准下,即便是综合表现最佳的 Opus 4.7† 在 600 个合约中也仅完美反编译了 42 个(7.0%),且在 Hard 困难分层中仅达到 1.0%(2/200),GPT-5.3-Codex† 在 Hard 分层更是为 0%。
- 深度思考机制在高级推理阶段带来显著增益:格式遵循上非思考模型 GLM-5 (instruct)(90.0%)反而略高于思考版 GLM-5(86.7%),但在涉及复杂逻辑推理的可编译性(36.8% vs 24.0%)、ABI 恢复(0.428 vs 0.287)以及语义一致性(9.9% vs 5.8%)上,深度思考模型均呈现出成倍的明显优势。
- 单步编译修复性价比极高:单步同模型编译器反馈修复使 GPT-5.3-Codex 的编译成功率从 70.2% 跃升至 90.3%,GLM-5 更是提升了 30.4 个百分点(从 36.8% 至 67.2%),且单合约平均 API 成本仅增加不到 0.01 美元(如 GPT-5.3-Codex 从 0.273 美元增至 0.285 美元),论证了多阶段智能体流程的工程可行性。
亮点与洞察¶
- 提出执行驱动的四阶递进式基准:打破了代码反编译领域长期依赖静态 BLEU 词法匹配或纯 AST 图同构对比的传统局限,构建了端到端可编译、动态差分重放的评测流水线,为代码智能在逆向工程领域的落地建立了坚实的度量衡。
- 构建高度可信且覆盖全面的语义测试沙箱:基于链上真实部署合约提取并生成了 22.7 万个覆盖函数状态读写的测试用例,结合返回值、Revert 状态、Event 日志与物理存储槽变化四位一体校验,使反编译评估具备了严密的工程可复现性。
- 揭示了“表面拟合”与“执行语义”之间的深层鸿沟:通过定量实验雄辩地证明,即便大模型生成的代码可编译率达到 90%、函数接口召回率接近 90%,其在链上执行时的真实语义匹配度依旧不足 30%,清晰指出了智能合约逆向中上下文状态建模的瓶颈所在。
局限与展望¶
- 作者承认的局限:当前的语义测试用例虽覆盖了 77.8% 的分支,但受限于黑盒启发式输入生成与静态常数提取,对于极度复杂的密码学哈希校验、多方协作时间锁等极端前置条件仍难以完全触达,未达到形式化验证级别的全状态空间完备证明。
- 自身发现的局限:评测目前以单个隔离合约为主体,对于在现代去中心化金融中高度普遍的复杂跨合约多协议交互(如闪电贷调用、代币路由器路由调用等),在离线沙箱中重放时仍依赖简化模拟,可能低估模型在动态外部调用环境下的反编译难度。
- 未来改进方向:引入基于符号执行(如 SymGPT 思想)与定向模糊测试的自适应测试用例增补,同时探索将反编译解构为“反汇编提取 → 局部控制流抽象 → 编译器反馈修复 → 动态重放自验证”的多智能体协作系统。
相关工作与启发¶
- vs 传统反编译器 (Gigahorse / Heimdall-rs / Shrnkr): 传统工具基于静态规则与 Datalog 约束求解,在低级函数选择器识别上极其强悍(选择器 F1 超过 0.99),但产出的中间代码可读性极差且无法直接重编译;本文评估的大模型能直接生成高层 Solidity 源码并实现端到端差分重放,代表了反编译技术向自动化源码级逆向的演进方向。
- vs LLM 反编译探索 (DiSCo / David et al.): 早期 LLM 反编译工作侧重于局部代码单元的语义重建或通过 GNN 辅助命名推断,但评估集缺乏透明度、缺少可执行重放套件;SCDBench 提供了首个包含 600 个真实合约、覆盖完整编译器版本与五维难度分层的公开基准,并配套了完整的测试用例与评估工具链。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 首次提出针对 LLM 智能合约反编译的四阶动态差分重放评测体系,填补了代码反编译领域缺乏端到端语义执行评测基准的空白。
- 实验充分度: ⭐⭐⭐⭐⭐ 覆盖 600 个真实合约、1.45 万个公有函数与 22.7 万个测试用例,横跨前沿闭源旗舰与开源思考模型,多维度剖析失败根因与修复开销。
- 写作质量: ⭐⭐⭐⭐⭐ 结构清晰严谨,从数据集过滤聚类算法、难度量化公式到评测四阶指标定义均具备极高的工程复现规范。
- 价值: ⭐⭐⭐⭐⭐ 为区块链安全分析、闭源智能合约审计以及大语言模型代码逆向工程提供了权威的标准化评测基石。