nightxade/come-back

GitHub: nightxade/come-back

一个基于 Ghidra 和大语言模型的 Go 二进制反编译研究框架,用于从编译产物中逐函数恢复 Go 源代码,并配套大规模基准测试和多维度评估体系。

Stars: 1 | Forks: 0

# 回归 **ComeBack** 是一个基于优化的 LLM 反编译流水线,用于从编译后的二进制文件中恢复 Go 源代码。它使用 Ghidra 反编译 Go 二进制文件,应用自定义字符串恢复启发式算法,并提示大型语言模型 逐函数重建原始 Go 源代码。该仓库还包含一个包含 128 个流行开源 Go 项目的大规模基准测试(1,665 个二进制文件,约 180 万次函数级评估),以及一个用于测量 CodeBLEU、LLM-as-a-Judge 语义相似度和语法有效性的评估套件。 有关详细信息,请参阅 `paper/` 中附带的论文。 ## 设置 需要 Python 3.12+、[uv](https://docs.astral.sh/uv/)、Go 和 [Ghidra](https://ghidra-sre.org/)。可选:[GoReSym](https://github.com/mandiant/GoReSym) 用于改善从 Go 的 `pclntab` 中恢复符号的效果。 ``` uv sync cp .env.example .env # fill in GEMINI_API_KEY ``` 如果 Ghidra 不在 `/opt/ghidra` 目录下,请设置 `GHIDRA_INSTALL_DIR`。 ## 流水线 所有命令均通过 `pyproject.toml` 作为入口点安装。大多数命令接受 `--repo`、`--variant`、`--max-repos` 和 `--force` 标志;运行任意命令时附带 `--help` 以获取详细信息。 | 步骤 | 命令 | 描述 | |------|---------|-------------| | 1 | `uv run scrape-repos` | 发现、克隆并编译流行的 Go 仓库,包含三种构建变体 | | 2 | `uv run map-sources` | 通过 `go list` 将每个二进制文件映射到其贡献的源文件 | | 3 | `uv run decompile` | 使用 Ghidra(通过 PyGhidra)反编译二进制文件,并过滤出用户编写的函数 | | 4 | `uv run chunk-decomps` | 将反编译结果拆分为按函数划分的 `.c` 文件 | | 5 | `uv run chunk-sources` | 将真实 原始 Go 源代码拆分为按函数划分的 `.go` 文件 | | 6 | `uv run infer` | 将按函数划分的反编译结果发送给 Gemini 以恢复 Go 源代码 | | 7 | `uv run compare --metric ` | 根据真实原始代码评估恢复的代码 | | 8 | `uv run statistics` | 汇总结果并生成摘要统计信息和图表 | 构建变体:`default`、`debug`(`-gcflags=-N -l`)、`stripped`(`-ldflags=-s -w`)。 ### 评估指标 | 指标 | 命令 | 描述 | |--------|---------|-------------| | `codebleu` | `uv run compare --metric codebleu` | 词法 + 结构相似度(本地运行,无需 API 密钥) | | `llm` | `uv run compare --metric llm` | 通过 Gemini 实现 LLM-as-a-Judge 语义相似度 | | `syntax` | `uv run compare --metric syntax` | 通过 tree-sitter 检查语法有效性(本地运行) | 可以通过在 `src/proj261/eval/comparisons/.py` 创建模块来添加自定义指标;有关接口规范,请参阅现有指标。 ## 目录结构 ``` data/ repos/{owner__repo}/ # Cloned repositories binaries/{owner__repo}/{variant}/{binary} # Compiled binaries decomps_chunked/{owner__repo}/{variant}/{binary}/{pkg}/{func}.c source_chunked/{owner__repo}/{variant}/{binary}/{pkg}/{func}.go out/ pred/{owner__repo}/{variant}/{binary}/{pkg}/{func}.go # LLM-recovered source results/{metric}/{owner__repo}/{variant}/{binary}.json # Evaluation results paper/ # Typst source, figures, and bibliography statistics/ # Aggregated results and plots ``` ## 引用 ``` @article{cai2025comeback, title = {ComeBack: Assessing LLM Decompilation for Go}, author = {Cai, Matthew and Bedouch, Jonah}, year = {2026} } ```
标签:DLL 劫持, Gemini, Ghidra, Go语言, LLM-as-a-Judge, PyGhidra, TLS抓取, URL提取, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码生成, 代码相似度评估, 代码重构, 反编译, 反编译器, 可配置连接, 大语言模型, 日志审计, 渗透测试工具, 源代码恢复, 程序分析, 程序破解, 自动化分析, 跨站脚本, 软件安全, 逆向工具, 逆向工程, 静态分析