把二进制变回 C 代码:LLM4Decompile 大模型反编译快速上手指南
【免费下载链接】LLM4DecompileReverse Engineering: Decompiling Binary Code with Large Language Models项目地址: https://gitcode.com/GitHub_Trending/ll/LLM4Decompile
老系统丢了源码,或者手里只有第三方库的编译产物,需要搞清里面的代码到底在干什么?LLM4Decompile 用大语言模型做二进制反编译,把 Linux x86_64 二进制还原成可读的 C 代码,适合逆向工程师、安全研究人员和遗留系统维护者。模型权重、训练数据与评测脚本全部开源。
🎯 为什么值得试 LLM4Decompile
它是专用反编译模型,不是通用聊天机器人。通用大模型很少见过二进制,让它反编译基本只能靠猜。LLM4Decompile 有专门的二进制-源码配对训练集:decompile-bench 数据集从 1 亿条采集到的函数对中浓缩出 200 万条高质量配对,另留 7 万条做评测,指标是"再执行率"——反编译出的代码必须真的能通过测试用例,而不是看起来像。
两条路线可选,效果差一档。V1.5 系列(End)直接把汇编翻译成 C;V2 系列(Ref)让模型润色 Ghidra 先写好的伪代码草稿,效果更好。
| 模型 | 参数量 | 再执行率 | 模型输入 |
|---|---|---|---|
| llm4decompile-6.7b-v1.5 | 6.7B | 45.4% | 汇编指令 |
| llm4decompile-6.7b-v2 | 6.7B | 52.7% | Ghidra 伪代码 |
| llm4decompile-9b-v2 | 9B | 64.9% | Ghidra 伪代码 |
🚀 三步跑起来 LLM4Decompile
装环境:克隆仓库并安装依赖。README 建议 Python 3.9,官方做法是先用 conda 建好隔离环境再安装:
git clone https://gitcode.com/GitHub_Trending/ll/LLM4Decompile cd LLM4Decompile pip install -r requirements.txt做预处理:用 GCC 把你的 C 代码编译成二进制,再用 objdump 反汇编成汇编,截取目标函数。最终输入形如<函数名>:加若干指令行,外面套上两行固定提示"# This is the assembly code:"和"# What is the source code?"。主 README 给出了完整的预处理与推理代码,只需替换函数名和文件路径。
跑推理或跑 demo:模型需要 CUDA GPU,以 bfloat16 精度加载。嫌环境麻烦可以用仓库自带的 Docker 镜像,里面预装好 Ghidra 和 OpenJDK 17,构建后用docker run --gpus all进入容器,直接执行ghidra/demo.py,就能看到"Ghidra 伪代码 → 模型润色"的完整效果。
🔬 二进制反编译是怎么实现的
先明确一点:LLM 只懂文本,没法直接处理 0/1 流。所以项目先用 objdump 把二进制反汇编成汇编——二进制与汇编可互转、信息等价——再把"汇编进、C 代码出"当成纯粹的文本翻译任务。
训练过程正好是编译的逆过程:源码经过预处理、编译、汇编、链接变成二进制,再反汇编回汇编,模型从这些"汇编 → 源码"配对上学习把"译文"翻回"原文",损失直接对原始源码计算。可以这样类比:编译器是位把中文译成英文的译者,反编译模型则是从海量译文对照里学会把英文翻回中文。
V2 的 Ref 路线走了条近路:Ghidra 先把二进制拆成伪代码,逻辑大体对,但变量全是 local_28,语法也别扭,模型的任务就是给这份半成品"润色"成能编译的 C。两条路线的推理代码写法相同,只是输入不同——主 README 的预处理脚本走 objdump,ghidra/目录的demo.py调 Ghidra Headless。
📁 项目里哪些目录值得看
- ghidra/:Ref 路线的入口,
demo.py一个脚本走完"编译 → Ghidra 反编译 → 模型润色"全流程,是看效果最快的地方。 - decompile-bench/:训练与评测数据,外加再执行率、编辑相似度两个指标脚本,拿来对自己的输出打分很方便。
- sk2decompile/:2025 年新增的两阶段框架实现,把"恢复函数结构"和"给变量起名"拆成两个模型,含数据预处理、训练配置与强化学习奖励函数。
⚠️ 二进制反编译的避坑指南
- 只支持 Linux x86_64。优化级别覆盖 GCC 的 O0 到 O3,其他架构和平台的产物没有验证过,README 也说明更多架构还在逐步支持中。
- V1.5 与 V2 输入不通用。前者要 objdump 汇编,后者要 Ghidra 伪代码;评测数据文件也分
decompile-eval-executable-gcc-obj.json和-gcc-ghidra.json两份,配错文件结果没法解释。 - 留意 token 长度。模型最大序列 4096,调
generate时max_new_tokens要留在这个范围以内,过长的函数建议先拆分。
🔭 看完项目还能做什么
如果只有一张 A100 40G,可以从 decompile-ghidra-100k 子集开始复现:官方脚本约 3.5 小时训完,GPU 花费不到 20 美元,就能得到一个可用的 Ref 模型,是理解整套训练管线成本最低的入口。
【免费下载链接】LLM4DecompileReverse Engineering: Decompiling Binary Code with Large Language Models项目地址: https://gitcode.com/GitHub_Trending/ll/LLM4Decompile
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考