Practical Source Code Recovery from Binary Functions Using Anchor-Based Retrieval and LLM Reasoning
作者: Charles Edward Gagnon, Steven H. H. Ding, Philippe Charland, Benjamin C. M. Fung
分类: cs.SE, cs.AI
发布日期: 2026-07-10
备注: 12 pages, 5 figures
💡 一句话要点
提出一种基于锚点检索和LLM推理的二进制函数源代码恢复方法
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 二进制恢复 源代码检索 逆向工程 大型语言模型 软件安全 恶意代码分析
📋 核心要点
- 现有的二进制到源代码恢复方法通常生成近似的伪代码,缺乏准确性和可靠性。
- 本文提出的解决方案通过锚点检索和大型语言模型推理,直接从源代码数据库中识别源函数,提升了恢复的准确性。
- 在tcpdump二进制文件的评估中,提出的方法实现了95.2%的汇编指令覆盖率,显示出高质量数据库的优势。
📝 摘要(中文)
本文提出了一种实用的管道,通过结合逆向工程、基于锚点的源代码检索和大型语言模型推理,从剥离的二进制函数中恢复源代码。该方法旨在从源代码数据库中识别源函数,而不是生成近似的反编译伪代码。通过使用Ghidra提取字符串、常量、外部调用和可用函数名等锚点,利用倒排索引搜索数据库检索候选文件,缩小候选范围至可能的函数片段,并基于反汇编、反编译代码和源元数据使用大型语言模型进行重新排序。评估结果显示,在剥离和优化的tcpdump二进制文件上,该方法实现了95.2%的汇编指令覆盖率。
🔬 方法详解
问题定义:本文旨在解决从剥离的二进制函数中恢复源代码的挑战,现有方法往往生成不够准确的伪代码,无法满足实际需求。
核心思路:通过结合逆向工程和大型语言模型推理,利用锚点信息直接从源代码数据库中检索源函数,避免了生成伪代码的过程,从而提高了恢复的准确性。
技术框架:整体流程包括四个主要模块:首先使用Ghidra提取锚点信息;其次通过倒排索引搜索数据库检索候选文件;接着缩小候选范围至可能的函数片段;最后利用大型语言模型对候选进行重新排序。
关键创新:最重要的创新在于将锚点检索与大型语言模型推理结合起来,形成了一种新的二进制到源代码的检索方法,这与传统的反编译方法有本质区别。
关键设计:在参数设置上,采用了高保真度的源代码数据库,并在模型训练中使用了丰富的源元数据,以提高检索的准确性和效率。具体的损失函数和网络结构细节在论文中进行了详细描述。
🖼️ 关键图片
📊 实验亮点
实验结果显示,提出的二进制到源代码匹配方法在tcpdump二进制文件上实现了95.2%的汇编指令覆盖率,而在基于GitHub的检索数据库上平均仅为35.5%,主要由于检索遗漏。这表明高质量数据库对源级二进制恢复的重要性。
🎯 应用场景
该研究具有广泛的应用潜力,尤其在软件安全、恶意代码分析和遗留系统维护等领域。通过准确恢复源代码,能够帮助开发者理解和修复二进制程序,提高软件的可维护性和安全性。未来,该方法还可能扩展到更多类型的二进制文件和复杂的代码库中。
📄 摘要(原文)
We present a practical pipeline for recovering source code from stripped binary functions by combining reverse engineering, anchor-based source code retrieval, and large language model reasoning. Our binary-to-source-code retrieval method attempts to identify the source function from a source code database, rather than generating approximate decompiled pseudocode. It extracts anchors such as strings, constants, external calls, and available function names using Ghidra, retrieves candidate files via an inverted-index search database, narrows candidates to likely function snippets, and re-ranks them with a large language model (LLM) based on disassembly, decompiled code, and source metadata. Confident matches can also serve as anchors in later passes. In an evaluation backed by our high-fidelity source code database on a stripped, optimized tcpdump binary, our proposed binary-to-source matching method achieves 95.2% assembly instruction coverage. Experiments on a GitHub-based retrieval database showed lower performance with 35.5% instruction coverage on average, mainly due to retrieval misses. These results show that source-level binary recovery excels with high-quality databases and remains a useful tool in noisy environments.