
LLM4Decompile
用大模型把二进制代码翻译成可读 C 源码,逆向效率翻倍
项目预览
项目数据
项目介绍
Star 增长趋势
本站每日记录该项目 GitHub 星标变化,观测越久曲线越完整
数据来源:GitHub API 逐日快照 · 收录于 2026-08-09 · 当前星标 ★ 7272
使用教程
环境要求
- Linux 环境(预处理依赖 gcc 与 objdump)
- Conda,用于创建 Python 3.9 环境 'llm4decompile'
- NVIDIA GPU + CUDA(模型以 torch.bfloat16 加载到 .cuda())
- 可访问 HuggingFace 下载模型权重(如 LLM4Binary/llm4decompile-6.7b-v1.5)
- 如走 Docker 路线需 Docker 与 --gpus all 支持(nvidia-container-toolkit)
安装与启动步骤
-
1克隆项目仓库
把官方仓库克隆到本地并进入项目根目录,后续安装命令都在此目录执行。
git clone https://github.com/albertan017/LLM4Decompile.git cd LLM4Decompile -
2创建 Conda 环境
按 README 指定使用 Python 3.9 创建名为 llm4decompile 的独立环境,避免依赖冲突。
conda create -n 'llm4decompile' python=3.9 -y -
3安装项目依赖
激活环境后用 requirements.txt 一次性装齐 transformers、torch 等依赖。
conda activate llm4decompile pip install -r requirements.txt -
4编译并反汇编
把待反编译的 C 文件用 GCC 编译成目标文件,再用 objdump 反汇编为 .s 汇编文件;随后按 README 的 Python 脚本清洗汇编并拼成提示词,注意把 func0 换成真实函数名。
gcc -o samples/sample_O0.o samples/sample.c -O0 -lm objdump -d samples/sample_O0.o > samples/sample_O0.s -
5运行模型反编译
加载 V1.5 模型与分词器到 GPU,读取 .asm 提示词生成 C 源码,并打印原始函数与反编译结果对比。首次运行会下载权重,请留足显存与时间。
from transformers import AutoTokenizer, AutoModelForCausalLM import torch model_path = 'LLM4Binary/llm4decompile-6.7b-v1.5' tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.bfloat16).cuda() with open('samples/sample_O0.asm','r') as f: asm_func = f.read() inputs = tokenizer(asm_func, return_tensors="pt").to(model.device) with torch.no_grad(): outputs = model.generate(**inputs, max_new_tokens=2048) c_func_decompile = tokenizer.decode(outputs[0][len(inputs[0]):-1]) with open('samples/sample.c','r') as f: func = f.read() print(f'original function:\n{func}') print(f'decompiled function:\n{c_func_decompile}') -
6Docker 方式运行
也可用仓库自带 Dockerfile 构建镜像;运行时加 --gpus all 挂载 GPU,进入容器后到 ghidra 目录跑 demo。需按自身资源选择合适尺寸的模型。
docker build -t llm4decompile . docker run --gpus all -it --name llm4decompile llm4decompile /bin/bash cd ghidra python demo.py
关键配置
| 配置项 | 必填 | 说明 | 示例 |
|---|---|---|---|
model_path | 是 | 指定要加载的反编译模型,README 示例为 V1.5 版本 | LLM4Binary/llm4decompile-6.7b-v1.5 |
func_name | 是 | 待反编译的函数名,需与汇编中出现的函数符号一致 | func0 |
OPT | 否 | 编译优化级别列表,脚本会为每个级别各生成一份汇编 | ["O0", "O1", "O2", "O3"] |
max_new_tokens | 否 | 生成的最大新 token 数,不应超过 4096 上下文范围 | 2048 |
如何确认成功
终端先后打印出 original function 与 decompiled function,即模型成功生成了反编译 C 代码。
常见问题
Q:报错 “compile fails” 是什么原因?
A:说明反汇编结果里找不到 <func0>: 标签。需把脚本中的 func0 替换成目标 C 文件里真实的函数名再重新编译反汇编。
Q:没有 GPU 能运行吗?
A:README 中的推理示例使用 .cuda() 和 --gpus all,均假定有 NVIDIA GPU;README 未给出 CPU 运行方案,CPU 运行可能非常慢或报错。
Q:一次能反编译整个文件吗?
A:不能。README 明确说明只反编译一个函数,原始文件可以包含多个函数,需要逐个函数处理。
Q:生成结果被截断怎么办?
A:可调整 max_new_tokens,但 README 提示模型上下文最大 4096,该值需控制在此范围内。
注意事项
- 必须把示例里的 func0 替换成真实函数名,否则预处理阶段会抛 ValueError。
- 反编译是函数级任务,输出只对应一个函数,不等同于还原完整源文件。
- 首次运行会从 HuggingFace 下载数 GB 级模型权重,建议提前配好网络与磁盘空间。
- Docker 运行示例的 demo.py 位于容器的 ghidra 目录下,运行前需先 cd ghidra。
核心亮点
- 模型直接输出 C 代码,比传统反编译器可读性高,便于理解程序逻辑
- 提供完整训练流程和预训练模型,支持自定义微调,适配特定架构
- 在 HumanEval 反编译基准上表现优于现有工具,还原准确率较高
不足之处
- 对复杂控制流和优化后代码的还原仍有限,可能产生语义偏差
- 模型推理资源消耗大,需 GPU 环境,轻量场景部署成本高
- 文档/社区待观察
适用场景
- 恶意代码分析:快速还原恶意样本的源码逻辑,辅助安全研判
- 漏洞研究:对补丁或固件进行反编译,定位潜在安全缺陷
- 遗留软件维护:将无源码的旧程序转换为可维护的 C 代码
替代项目
Ghidra、IDA Pro、RetDec
上一篇:video-SALMONN-2
下一篇:moment
同类项目推荐
LabVLA
开源
让机器人看懂实验手册,自动完成科研操作
LabVLA: Grounding Vision–Language–Action Models in Scientific Laboratories
cosmos
开源
用世界模型造物理AI训练数据,省真机成本
NVIDIA Cosmos is an open platform of world models, datasets, and tools that enables ···
Awesome-AITools
开源
一个列表,网罗AI实用工具,省去全网搜索。
220+ AI tools across 37+ categories — chatbots, coding agents, AI video/image/voice···
S2D2
开源
在 Notebook 里几行代码跑通 Stable Diffusion 文生图
S2D2: Simple Stable Diffusion based on Diffusers (Hires.fix on jupyter notebook, ipy···
SwiftDiffusion
开源
在苹果设备上原生运行 Stable Diffusion,打造本地 AI 画图应用
Stable Diffusion implementation using CoreML, PyTorch and SwiftUI
audio-ai-hub
开源
音频 AI 研究资料一站式导航,想找什么都有门路
The hub for audio AI research: papers, open models, benchmarks & datasets across aud···
HermesFlow
开源
一个模型搞定看图说话和文字生图,无缝切换多模态任务
[NeurIPS 2025] HermesFlow: Seamlessly Closing the Gap in Multimodal Understanding an···
Chat-UniVi
开源
一个模型同时看懂图片和视频,统一视觉理解新方案
[CVPR 2024 Highlight] Chat-UniVi: Unified Visual Representation Empowers Large Langu···
OralGPT
开源
让 AI 看懂口腔影像,辅助诊断和报告生成
[NeurIPS'25 | CVPR'26] The official repo of OralGPT & MMOral Bench.