Decompiler is a specialized type of reverse engineering tool extensively employed in program analysis tasks, particularly in program comprehension and vulnerability detection. However, current Solidity smart contract decompilers face significant limitations in reconstructing the original source code. In particular, the bottleneck of SOTA decompilers lies in inaccurate method identification, incorrect variable type recovery, and missing contract attributes. These deficiencies hinder downstream tasks and understanding of the program logic. To address these challenges, we propose SmartHalo, a new framework that enhances decompiler output by combining static analysis (SA) and large language models (LLM). SmartHalo leverages the complementary strengths of SA's accuracy in control and data flow analysis and LLM's capability in semantic prediction. More specifically, \system{} constructs a new data structure - Dependency Graph (DG), to extract semantic dependencies via static analysis. Then, it takes DG to create prompts for LLM optimization. Finally, the correctness of LLM outputs is validated through symbolic execution and formal verification. Evaluation on a dataset consisting of 465 randomly selected smart contract methods shows that SmartHalo significantly improves the quality of the decompiled code, compared to SOTA decompilers (e.g., Gigahorse). Notably, integrating GPT-4o with SmartHalo further enhances its performance, achieving precision rates of 87.39% for method boundaries, 90.39% for variable types, and 80.65% for contract attributes.
academicAugmenting Smart Contract Decompiler Output through Fine-grained Dependency Analysis and LLM-facilitated Semantic Recovery
- 论文ID: 2501.08670
- 标题: Augmenting Smart Contract Decompiler Output through Fine-grained Dependency Analysis and LLM-facilitated Semantic Recovery
- 作者: Zeqin Liao, Yuhong Nan, Zixu Gao, Henglong Liang, Sicheng Hao, Peifan Ren, Zibin Zheng
- 分类: cs.SE (Software Engineering)
- 发表时间: 2025年1月 (arXiv预印本)
- 论文链接: https://arxiv.org/abs/2501.08670
智能合约反编译器是程序分析中广泛使用的逆向工程工具,特别在程序理解和漏洞检测方面发挥重要作用。然而,当前的Solidity智能合约反编译器在重构原始源代码方面存在显著局限性,主要体现在函数识别不准确、变量类型恢复错误和合约属性缺失三个方面。为解决这些挑战,本文提出SmartHalo框架,通过结合静态分析(SA)和大语言模型(LLM)来增强反编译器输出。SmartHalo利用SA在控制流和数据流分析方面的准确性以及LLM在语义预测方面的能力。具体而言,该框架构建了依赖图(DG)数据结构来提取语义依赖关系,然后基于DG创建LLM优化提示,最后通过符号执行和形式化验证来验证LLM输出的正确性。
智能合约反编译面临三个核心问题:
- 函数边界识别不准确:现有反编译器无法精确确定函数边界,经常将多个函数错误地恢复为单个函数,或遗漏重要函数
- 变量类型恢复错误:反编译器产生的类型错误与静态域规则不一致,如将keccak256函数的bytes32返回值错误恢复为uint256类型
- 合约属性缺失:智能合约中的状态变量记录关键合约属性(如资产、身份、路由器),但在反编译代码中完全缺失
这些缺陷严重阻碍了下游任务:
- 影响漏洞检测的准确性,产生误报和漏报
- 降低程序理解的效率
- 限制跨合约调用流分析等高级分析任务
- SmartDagger:仅能部分恢复状态变量的合约属性,基于深度学习模型,在新兴合约上性能下降
- Neural-FEBI:不支持修饰符函数或继承函数的边界恢复
- SigRec/VarLifter/DeepInfer:仅能部分恢复已知函数签名的参数类型,依赖预定义启发式规则,覆盖率低
基于两个关键洞察:
- 软件自然模式:程序员倾向于在相似上下文中使用相似的代码结构、合约属性、变量类型和函数边界
- SA与LLM协同增强:SA在处理复杂静态约束方面准确性高,LLM在预测缺乏静态约束的目标方面具有灵活性
- 识别并系统化分析了当前智能合约反编译器输出的关键局限性
- 提出SmartHalo框架,创新性地结合静态分析和大语言模型来优化反编译器输出
- 设计依赖图(DG)数据结构,提取三种类型的语义依赖关系(状态依赖、控制流依赖、类型依赖)
- 建立严格的正确性验证机制,通过符号执行和形式化验证来处理LLM幻觉问题
- 全面评估验证了SmartHalo在函数边界、变量类型和合约属性恢复方面的有效性
输入:反编译器生成的伪代码
输出:优化后的反编译代码,包含准确的函数边界、变量类型和合约属性
约束:保持程序行为等价性,遵循Solidity静态类型规则
SmartHalo采用三阶段架构:
- 控制流分析:使用Tree-sitter构建语法树,转换为三地址中间表示,生成控制流和数据流图
- 依赖关系识别:
- 类型依赖:变量类型与其他变量或表达式的关联关系
- 状态依赖:状态变量间的读写依赖关系
- 控制流依赖:程序执行路径的依赖关系
- 依赖图构建:DG = (Nc, Ec, Xe),其中Nc为节点集合(变量和表达式),Ec为边集合(三种依赖关系),Xe为标签函数
- 代码上下文生成:
- 变量:基于DG进行代码切片,提取目标变量相关的代码片段
- 函数:搜索目标函数所在的调用链
- 推理候选生成:
- 变量类型候选:从Solidity文档收集内置类型
- 合约属性候选:Limit, Fee, Flag, Address, Asset, Router, Others
- 思维链(COT)提示:将DG中的依赖关系转换为推理步骤描述
- 程序行为等价性检查:
- 对原始和优化后的函数进行符号执行
- 使用Z3求解器进行形式化验证
- 等价性断言:Φ = ¬(s ⇔ s′)
- 静态规则违反检查:基于Solidity类型规则检测类型推理错误
- 细粒度依赖分析:首次系统性地提取和利用三种类型的语义依赖关系
- SA-LLM协同框架:创新性地结合静态分析的准确性和LLM的语义理解能力
- 严格正确性保证:通过符号执行和形式化验证确保优化结果的正确性
- 通用性设计:支持不同LLM和反编译器的集成
- 评估数据集:从最大的开源智能合约数据集中随机选择500个函数,最终获得456对源代码和反编译输出
- 复杂合约数据集:从682个真实DApp中随机选择50个智能合约(约900个函数)
- 漏洞检测数据集:包含81个重入漏洞标签、18对攻击合约、50个整数溢出漏洞合约
- 函数边界匹配:起始和结束点完全匹配源代码级函数
- 类型匹配:预测类型与真实类型完全匹配(包括数据布局和字段信息)
- 合约属性匹配:预测属性与真实属性完全匹配
- 重编译失败率:优化后代码的编译错误率
- SmartDagger:用于合约属性恢复对比
- VarLifter:用于变量类型推理对比
- 原始反编译器:Gigahorse/Dedaub作为基线
- 开发环境:Python 3.8.10,1799行代码
- LLM选择:主要使用GPT-3.5,支持GPT-4o mini、Llama-3、Deepseek-v3、Qwen-2.5-coder
- 硬件配置:Intel i9-10980XE CPU、RTX 3090 GPU、250GB RAM
| 指标 | 精确率提升 | 召回率提升 |
|---|
| 函数边界识别 | +20.30% | +30.03% |
| 变量类型推理 | +30.02% | +42.04% |
| 合约属性恢复 | 68.06% | 90.93% |
- vs SmartDagger(合约属性):精确率提升44.69%,召回率提升80.86%
- vs VarLifter(变量类型):精确率提升13.51%,召回率提升77.08%
| LLM | 函数边界(P/R) | 变量类型(P/R) | 合约属性(P/R) |
|---|
| GPT-3.5 | 88.26%/80.51% | 92.27%/84.26% | 68.06%/90.93% |
| GPT-4o mini | 91.32%/87.38% | 90.40%/88.82% | 80.66%/91.78% |
| Llama-3 | 66.09%/55.11% | 62.41%/48.53% | 61.68%/60.34% |
对比SA、LLM单独使用和SmartHalo完整框架:
- SA的贡献:提供准确的依赖关系提取和约束验证
- LLM的贡献:提供语义理解和罕见模式识别能力
- 协同效果:SmartHalo比单独使用LLM在函数边界上提升19.23%/29.23%
- 跨反编译器:在Heimdall、Panoramix上均有显著提升
- 复杂合约:在真实复杂DApp上保持良好性能
- 效率分析:平均处理时间23.99秒,成本$0.00136/函数
- 重入漏洞检测:精确率从72.16%提升至80.41%
- 攻击识别:召回率从83.33%提升至100.00%
- 整数溢出检测:精确率提升21.96%,召回率提升38.00%
- Gigahorse/Elipmoc:将EVM字节码转换为三地址代码表示
- Erays/EtherSolve:从EVM字节码恢复控制流图
- SigRec/DeepInfer:恢复公共函数签名
- 语义信息恢复:DEBIN、OSPREY、BDA等通过静态分析恢复程序依赖
- 变量名和类型优化:DIRE、DIRTY、DeGPT等使用深度学习优化反编译输出
相比现有工作,SmartHalo具有:
- 更全面的优化目标:同时处理函数边界、变量类型和合约属性
- 更强的泛化能力:不依赖特定训练数据,适应新兴合约
- 严格的正确性保证:通过形式化验证确保优化结果正确
- SmartHalo显著提升了智能合约反编译质量,在三个关键指标上均取得substantial improvement
- SA-LLM协同框架证明有效,充分利用了两者的互补优势
- 严格的正确性验证机制成功控制了LLM幻觉问题
- 框架具有良好的泛化能力,支持多种LLM和反编译器
- 继承结构恢复:无法恢复合约内的继承关系,因为字节码级别缺失类信息
- 数据集规模:评估数据集相对较小(456个函数),但与SOTA研究规模相当
- LLM API演化:可能影响结果的可重现性
- 复杂场景处理:在低级调用、内联汇编、链下依赖等场景下性能有限
- 继承结构恢复:探索基于模式匹配的继承关系推理
- 更大规模评估:在更大数据集上验证方法的鲁棒性
- 专用模型训练:训练专门的智能合约理解模型
- 实时优化:支持在线反编译优化
- 问题定义清晰:系统性地识别和分析了智能合约反编译的核心问题
- 方法创新性强:首次提出SA-LLM协同框架,设计巧妙的依赖图数据结构
- 技术方案完整:从语义提取、优化增强到正确性验证形成完整闭环
- 实验评估全面:多维度对比实验,包含消融研究和下游任务验证
- 实用价值高:60.22%的优化代码可直接重编译,显著提升实用性
- 理论分析不足:缺乏对方法理论保证的深入分析
- 错误分析有限:对优化失败案例的根因分析可以更深入
- 计算开销:符号执行和形式化验证可能带来较高计算成本
- 依赖外部工具:依赖现有反编译器和LLM API的质量
- 学术贡献:为智能合约分析领域提供了新的研究范式
- 实用价值:可直接应用于智能合约安全分析和程序理解
- 可扩展性:框架设计支持集成不同的分析工具和模型
- 开源贡献:作者承诺开源代码和数据集,有利于研究复现
- 智能合约安全审计:提升反编译代码的可读性和准确性
- 漏洞检测工具:作为预处理步骤提升检测精度
- 程序理解工具:辅助开发者理解第三方合约逻辑
- 学术研究:为智能合约分析研究提供高质量数据
论文引用了96篇相关文献,主要包括:
- 智能合约分析:Gigahorse、SmartDagger、VarLifter等经典工作
- 程序分析理论:符号执行、形式化验证相关文献
- 机器学习应用:深度学习在程序分析中的应用
- 反编译技术:传统反编译优化方法和工具
总体评价:这是一篇高质量的软件工程研究论文,在智能合约反编译这一重要问题上提出了创新性解决方案。方法设计合理,实验评估充分,实用价值突出。虽然存在一些局限性,但整体贡献显著,对智能合约安全分析领域具有重要推动作用。