免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

LLM4Decompile 完整指南:用大模型把二进制代码变回 C 源码的 5 个步骤

LLM4Decompile 完整指南:用大模型把二进制代码变回 C 源码的 5 个步骤 LLM4Decompile 完整指南用大模型把二进制代码变回 C 源码的 5 个步骤【免费下载链接】LLM4DecompileReverse Engineering: Decompiling Binary Code with Large Language Models项目地址: https://gitcode.com/GitHub_Trending/ll/LLM4DecompileLLM4Decompile 是一个专注二进制反编译的大语言模型开源项目用微调过的 LLM 把 Linux x86_64 二进制的汇编还原成可读 C 代码覆盖 GCC 的 O0–O3 优化级别附带两百万对训练数据的 Decompile-Bench 基准和完整评测脚本。 先看它解决了什么源码丢失后怎么办你手头有一个二进制文件但源码找不到了——老系统维护、遗留模块分析、安全审计都是这种场景。传统反编译器比如 Ghidra、IDA能给出伪代码但变量名全是param_1、local_28读起来像天书。LLM4Decompile 做的事情更直接它把汇编或伪代码作为输入直接输出接近原始风格的 C 函数并用能不能重新编译执行并通过测试来衡量质量。举个例子给samples/sample.c里的func0函数编译出二进制项目自带 demo 能把它一步步还原回可读的 C 代码。 五分钟跑起来Docker 一键部署 LLM4Decompile 反编译环境项目提供了官方 Dockerfile里面预装好了 CUDA、PyTorch、Ghidra 11.0.3 和 Java 17省去手动装 Ghidra 的麻烦。clone 仓库后按下面任一条路径走git clone https://gitcode.com/GitHub_Trending/ll/LLM4Decompile cd LLM4Decompile # 路径一Docker预装 CUDA、Ghidra、Java 17 docker build -t llm4decompile . docker run --gpus all -it --name llm4decompile llm4decompile /bin/bash cd ghidra python demo.py # 路径二本地 conda 环境参考 requirements.txt conda create -n llm4decompile python3.9 -y pip install -r requirements.txtdemo.py默认会反编译 samples/sample.c 中的func0函数先 gcc 编译成二进制再用 Ghidra 生成伪代码最后交给 V2 模型精化成 C 代码。全程几分钟取决于显存大小和模型版本跑完你会在控制台看到原始伪代码和模型输出的对照。⚙️ 它是怎么做到的从汇编到 C 源码的完整链路核心链路是输入 → 处理 → 输出。先说一个关键限制LLM 吃的是文本不是 0 和 1所以原始二进制必须先经过objdump之类的工具反汇编成汇编指令。之后有两条路线End 路线V1.5 系列输入是纯汇编模型直接生成 C 代码。汇编越贴近源码结构O0 优化级别还原效果越好。Ref 路线V2 系列输入是 Ghidra 反编译出的伪代码——逻辑已经保住但语法生硬、命名混乱。模型只负责打磨这一步不用从汇编硬啃所以整体成功率更高。质量怎么衡量项目主用可再执行性Re-executability把反编译出的代码重新编译跑一遍预置的测试断言全部通过才算成功——这是比长得像硬得多的标准。你在 decompile-bench/ 里可以直接复现这个评测cd decompile-bench python3 run_exe_rate.py \ --model_path LLM4Binary/llm4decompile-1.3b-v1.6 \ --dataset_path ./data/humaneval-decompile.json \ --output_path ./data/humaneval多卡或想跑更大模型可用 evaluation/ 下的 vLLM 批量评测脚本。 跑通之后的进阶玩法Ref 管线、两阶段命名与自训模型Ref 两阶段管线先用 Ghidra Headless 把二进制拆成伪代码再让 LLM4Decompile-RefV2 系列精化成 C。官方数据里 22B-V2 比 6.7B-V1.5 的可再执行率高 40.1%是当前成功率最高的路线入口脚本是 ghidra/demo.py。SK²Decompile 骨架→皮肤两阶段第一骨架阶段把伪代码转成混淆后的中间表示、恢复程序结构第二皮肤阶段再填回有意义的变量名。在 505 个函数的 BringUpBench 上可再执行性达 27.0%超过 IDA Pro 的 21.7%实现见 sk2decompile/。训练自己的反编译模型decompile-bench/ 从一亿条原始函数对中筛出 200 万对二进制-源码训练数据和 7 万条评测数据450GB 二进制编译而来小数据集 decompile-ghidra-100k 配合 train/ 的 DeepSpeed 脚本单张 A100 40G 约 3.5 小时、成本 20 美元以内就能复现一个可再执行性 0.26 的模型。⚠️ 容易踩的坑函数名、优化级别与测试集不匹配demo 报 compile fails 或 bad case no function found→ 你没把脚本里的默认函数名func0换成目标函数名或编译产物里根本没有这个符号 → 改成你的实际函数名并先确认编译后的文件包含该函数。O2/O3 下效果明显变差甚至函数消失→ 高优化级别会内联、重排代码原函数可能已不存在于二进制中模型也救不回被内联掉的结构 → 先用 O0/O1 验证管线再考虑高优化级别且优先选 Ref 路线。评测结果和官方数字对不上→ 测试集和模型版本不匹配V1.5 系列要喂汇编版数据集V2 系列要喂 Ghidra 伪代码版数据集 → 按模型版本选对 legacy-test/ 里对应的gcc-obj或gcc-ghidra文件。自建数据集时编译大量报错→ 缺系统依赖库 → 按 decompile-bench 要求安装libboost-dev、libssl-dev等编译依赖。vLLM 版本冲突→ 主仓库requirements.txt锁定vllm0.4.0而 decompile-bench 要求0.5.2→ 给两类任务各建独立 conda 环境别混用一个。 适合谁用、怎么选模型版本与场景对照适合你如果你手上是Linux x86_64、GCC 编译O0–O3的 C 二进制且没有源码或者你在做反编译方向的研究、需要现成的训练数据和评测脚本。模型从 1.3B 到 22B 都有显存紧张选 1.3B/6.7B追求效果选 9B-V2可再执行性 64.9%是全家最高。局限同样要说清楚目前只支持 x86_64 架构和 C较新的数据集扩展到 CARM、Windows 二进制不在范围内最好的可再执行性也只在 65% 左右意味着三成结果仍需人工修。和传统工具比Ghidra/IDA 胜在覆盖广但命名可读性差LLM4Decompile-Ref 本身就是接在 Ghidra 之后做二次精修相比直接让通用大模型如 GPT 系列硬翻汇编专用模型的可再执行性高出 20 个百分点以上SK²Decompile 报告 21.6%。建议先把 Docker demo 跑通再用 9B-V2 模型加 Ghidra 伪代码对你自己的二进制做一次 Ref 反编译确认管线顺畅后再考虑自训模型或尝试 SK²Decompile 的两阶段命名。【免费下载链接】LLM4DecompileReverse Engineering: Decompiling Binary Code with Large Language Models项目地址: https://gitcode.com/GitHub_Trending/ll/LLM4Decompile创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表