Page 9 - 《软件学报》2026年第6期
P. 9

2328                                                       软件学报  2026  年第  37  卷第  6  期


                 Key words:  decompilation; large language model (LLM); symbolic execution

                    反编译技术是计算机与信息安全领域的一项关键基础技术, 广泛应用于软件漏洞与缺陷分析、逆向工程以及
                 软件重用与维护等任务中         [1,2] . 作为编译过程的逆操作, 反编译的核心任务在于恢复源代码经编译优化生成目标代
                 码过程中所丢失的高级语义信息, 例如函数与变量名称、控制逻辑及结构体定义等                           [3−7] . 这些信息不仅是人工编写
                 代码的主要特征, 也是保障代码可读性的关键要素. 传统反编译方法为完成从二进制代码到高级语言的恢复任务,
                 通常依赖工程经验定义大量启发式规则, 并借助高级语言代码模板对二进制代码片段进行匹配. 然而, 由于启发式
                 规则仅能针对特定模式进行有限恢复, 其输出结果往往难以达到接近人工编写代码的可读性水平, 尤其表现为变
                 量命名缺乏语义信息、控制流结构混乱等问题, 导致反编译结果通常需由专业人员深入分析后方可使用. 此外, 传
                 统反编译器的可用性高度依赖于针对不同指令集架构的适配工作, 而                       RISC-V  作为一种新兴指令集架构, 目前仅
                 有少数反编译器能够提供较为成熟的支持, 例如               IDA Pro  和  Ghidra.
                    近年来, 随着深度学习技术的迅速发展, 尤其是自然语言处理任务中取得的显著成果, 部分研究开始尝试将相
                 关技术应用于反编译任务中          [8,9] . 基于学习的反编译框架将二进制代码到源代码的转换视为一种神经机器翻译
                 (neural machine translation, NMT) 任务, 利用大规模源代码与二进制代码的配对样本训练端到端的反编译模型. 神
                 经反编译器通过从代码数据集中学习人工编写代码的潜在特征, 生成的代码在可读性方面显著优于传统反编译方
                 法. 随着大语言模型      (large language model, LLM) 的爆发式发展, 基于  LLM  生成的反编译代码的可读性则进一步
                 提升. 因此, 基于学习的技术被认为有望改善反编译过程中高级语义信息恢复的难题. 然而, 以                          LLM  为代表的深度
                 学习方法本质上是基于概率的黑盒模型, 存在输出不确定性与可解释性差等问题. 例如, LLM                            常被报告存在幻觉
                 现象, 即生成内容与事实不符, 这为其在反编译任务中的应用带来严峻挑战. 由于反编译的核心目标是准确分析二
                 进制代码的功能, 若假定       LLM  生成的结果不可靠, 而用户又缺乏其他途径验证其正确性, 将严重限制该类方法在
                 实际场景中的可用性.
                    为解决当前面向       RISC-V  架构的反编译工具选择有限以及基于学习的反编译方法存在结果不确定性的问题,
                 本文提出了一种基于        LLM  的  RISC-V  二进制反编译方法     BinDec. 该方法融合    LLM  与符号执行技术, 实现对
                 RISC-V  二进制代码到    C  语言代码的反编译. 具体而言, BinDec 方法首先利用           LLM  将二进制代码提升为       LLVM
                 中间代码   (LLVM intermediate representation, LLVM IR, 以下简称为  IR); 随后, 通过符号执行生成测试用例, 并分
                 别在提升得到的      IR  与原始二进制程序上执行, 以验证两者行为的一致性; 接着, 再次调用                  LLM  将  IR  反编译为  C
                 代码; 最后, 将所得     C  代码重新编译为     IR, 通过构建反编译前后两个版本            IR  的融合符号模型, 并借助 SMT
                 (satisfiability modulo theories) [10] 求解器判断其等价性约束的可满足性, 从而验证反编译    C  代码与提升得到的     IR  之
                 间的语义一致性. 在验证过程中, 若          LLM  输出无法编译或未通过等价性检查, BinDec 方法将迭代式地请求                 LLM
                 进行修复或重新生成. BinDec 方法的关键在于将反编译任务划分为二进制代码提升与中间代码反编译两个阶段,
                 从而为符号执行这一作用于中间代码层的验证技术提供应用机会. 基于这一架构, BinDec 方法能够在无需额外辅
                 助信息的条件下, 独立完成        RISC-V  二进制代码的反编译与结果验证, 确保向用户提供可验证的高质量反编译结
                 果. 实验结果表明, BinDec 方法在语义正确性方面达到了与传统反编译器                   Ghidra 相当的水平, 同时其生成的代码
                 在文本可读性方面显著优于后者. 具体而言, 以文本相似性作为衡量指标时, BinDec 方法生成代码的可读性约为
                 Ghidra 的两倍. 综上所述, 本文的贡献总结如下.
                    (1) 提出一种面向    RISC-V  架构的反编译方法      BinDec, 实现对  RISC-V  二进制代码的反编译, 可作为该架构下
                 反编译任务的一种可行解决方案.
                    (2) 提出将  LLM  与符号执行相结合的协同方法, 在实现充分利用              LLM  的代码理解与生成能力的基础上, 借助
                 符号执行的形式化能力为         LLM  输出的代码提供可靠性保证.
                    (3) 实现  BinDec 方法并开展详尽的实验评估, 验证其有效性.
                    本文第   1  节介绍反编译的研究背景以及相关的研究工作. 第               2  节介绍本文提出的方法. 第       3  节介绍本文的实
                 验设计, 包括研究问题、基准方法、实验数据、评估指标和实现细节. 第                       4  节报告实验结果和针对每个研究问题
   4   5   6   7   8   9   10   11   12   13   14