LLM4Decompile
全球首个开源大模型反编译器,将 Linux 二进制程序逆向还原为可读 C 源代码
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
全球首个开源大模型反编译器,将 Linux 二进制程序逆向还原为可读 C 源代码
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

LLM4Decompile:让大模型学会逆向工程的先驱项目
你拿到一个没有源代码的 .exe 文件,想知道它到底干了什么——这可能是安全研究员分析恶意软件、游戏玩家逆向引擎、开发者找回遗失代码,也可能是企业审计闭源组件的合规性。传统做法靠人工阅读汇编语言,用 IDA Pro、Ghidra 这类工具将二进制「反编译」成伪代码,再一点点推断原始逻辑。这件事高度依赖经验,一行看似简单的 mov eax, [ebp+8] 可能对应源代码中 return x;,而编译器优化会让这个映射变得支离破碎。
一个真实的场景:某安全公司捕获了一个未知家族的勒索软件样本,安全研究员花了整整三天,才从上万行混淆后的汇编中还原出 RSA 密钥生成逻辑。不是因为逻辑复杂,而是汇编语言和人类思维之间的「翻译鸿沟」实在太大。
LLM4Decompile 正是为了填平这条鸿沟而诞生的——它让大语言模型学会直接「读懂」二进制,并输出人类可读的 C 语言代码。

图1:编译与反编译的完整流程。源代码经过预处理、编译、汇编、链接生成二进制;反编译则沿相反路径,LLM4Decompile 将 Objdump 生成的汇编还原为源代码。
LLM4Decompile 诞生于 2024 年,由研究团队 albertan017 在 ACL/EMNLP 会议上发表论文《Reverse Engineering: Decompiling Binary Code with Large Language Models》(EMNLP 2024 Main Conference)。这是学术界首次系统性地探索用 LLM 解决二进制反编译问题。
项目的核心洞察非常朴素:与其让模型从零学会「二进制-源代码」的映射,不如让它先看足够多的配对数据。团队构建了包含 200 万组「汇编-源代码」配对的训练数据集 decompile-bench,覆盖 GCC 编译器 O0-O3 四个优化级别,让模型在不同优化强度下都能理解代码行为。
目前项目已开源 V1.5 和 V2 两代模型,参数规模从 1.3B 到 33B,并在 Hugging Face 上提供了完整权重。最新的 V2 版本(2024年9月)基于 Ghidra 工具链做二次精调,22B 参数版本在标准评测集上达到了 64.9% 的可重执行率——意味着六成以上的反编译结果能直接通过编译并通过全部测试用例。

图2:V1.5 End-to-End 系列模型在不同优化级别下的可重执行率对比。6.7B 模型(45.4%)较基线提升了超过100%。

图3:V2 Refine 系列模型基于 Ghidra 伪代码进行二次精调,22B 版本达到 63.6% 可重执行率,较 V1 提升显著。
如果把二进制比作一张医学 X 光片,传统的反编译器就是放射科医生——他们经过多年训练,能从黑白阴影中看出骨骼结构,但耗时长、依赖个人经验。LLM4Decompile 则像是一个看过海量 X 光片和对应诊断报告的 AI 系统:你把 X 光片喂给它,它直接输出诊断结论。
更进一步,V2 版本的 Refine 模型代表了一种「双阶段」思维:先让 Ghidra(经验丰富的放射科医生)读一遍 X 光片给出初步报告,再让 LLM4Decompile(专科会诊 AI)润色和修正,最终输出更加准确的诊断。
LLM4Decompile 采用标准的语言模型训练范式,在指令微调(Instruction Tuning)框架下完成。输入是 Objdump 生成的汇编语言序列,输出是尽可能接近原始 C 源代码的文本序列。
训练数据流程如下:
objdump -d 将二进制反汇编为汇编语言文本| 模型系列 | 原理 | 代表参数 |
|---|---|---|
| LLM4Decompile-End | 直接将汇编反编译为源代码,端到端 | 1.3B / 6.7B / 9B |
| LLM4Decompile-Ref | 先由 Ghidra 生成伪代码,再由 LLM 精调润色 | 1.3B / 6.7B / 22B |
End-to-End 模型简洁直接,但容易受到汇编中编译器生成冗余代码的干扰;Refine 模型借助 Ghidra 的结构化分析能力作为「锚点」,再由 LLM 修正 Ghidra 伪代码中缺失的变量名和类型信息,理论上更稳定。
项目提供了两条路径:
Docker 方式(推荐):
docker build -t llm4decompile .
docker run --gpus all -v $(pwd):/app llm4decompile python demo.py
Dockerfile 基于 PyTorch 2.7.1 + CUDA 12.8,集成了 Ghidra 11.0.3 工具链,构建镜像约需 10-15 分钟。
本地 conda 方式:
conda create -n llm4decompile python=3.9
conda activate llm4decompile
pip install -r requirements.txt
需要自行安装 GCC、Objdump 等工具链,以及 NVIDIA GPU(至少 6GB 显存,6.7B 模型推荐 T4 以上)。
以一个简单的 C 函数为例,经 O0 编译后,LLM4Decompile-End-6.7B 能较准确地还原为功能等价的 C 代码。但面对编译器优化(如 O2/O3 级别)产生的内联、循环展开和寄存器重分配,反编译结果往往存在变量名错误或类型推断失误,此时 Refine 模型借助 Ghidra 的结构信息能给出更完整的结果。
局限性也很明显:
LLM4Decompile 在安全社区引发了一定讨论:
支持方认为,这代表了 AI 在软件安全领域的重大突破——让逆向工程师从枯燥的汇编阅读中解放出来,专注于更高层次的漏洞分析逻辑。
反对方担忧工具可能被滥用于破解商业软件的许可证校验机制、分析恶意软件的详细行为。但项目作者指出,工具的输出质量仍受限于编译优化级别和代码复杂度,「一键完美逆向」并不存在。
技术局限方面,当前模型对 ARM 架构、Windows PE 格式、加壳二进制的支持几乎为零,这些都是未来版本需要攻克的难题。
LLM4Decompile 的出现标志着 LLM 在软件工程领域的触角从「写代码」延伸到了「读代码」。它让我们看到了一个趋势:AI 不仅能帮人类写代码,还能帮人类理解代码。
从行业视角看,这一工具有几个值得关注的方向:
2025年10月,项目发布了 SK2Decompile(两阶段反编译),将反编译流程进一步拆解为「结构恢复(骨架)」和「标识符命名(皮肤)」两个独立阶段,分别在 Hugging Face 上发布了专用模型。这代表了团队在细分任务上的持续深耕。
总结:LLM4Decompile 是目前最系统化、工程化程度最高的开源二进制反编译 LLM 项目。它用学术论文驱动开源实现,用评测数据说话(可重执行率从基线 0 提升到 64.9%),虽然离「完美反编译」仍有距离,但已为安全研究、代码审计和教育场景提供了前所未有的效率提升。如果你在工作中需要频繁处理二进制逆向问题,这个项目值得放进你的工具箱。
项目链接:https://github.com/albertan017/LLM4Decompile | 论文:EMNLP 2024 | 模型权重:Hugging Face (LLM4Binary)