VibeCodingNights/reverse-engineering

GitHub: VibeCodingNights/reverse-engineering

本项目通过 Ghidra 与大语言模型联动,解决海量函数二进制中关键函数定位与理解难题。

Stars: 4 | Forks: 2

# 逆向工程 **2026年四月 编程之夜** 你的大语言模型可以反编译一个函数。它无法理解一个二进制文件。 通过 MCP 将模型连接到 Ghidra。询问它一个程序的作用。它会反编译几十个函数,对另外八千个产生幻觉,并给你一个它从未读过的软件的自信总结。 今晚的目标:一个拥有 118,813 个函数的真实游戏。 挑战不是“破解游戏”。而是:**在 118,813 个函数中,哪 20 个函数能回答你的问题?** ## 问题 该二进制文件包含 118,813 个函数。反编译全部函数会消耗约 9500 万个 Token——比上下文窗口能容纳的多出 475 倍。即使只是列出它们的签名也会耗尽预算。 你拥有元数据:每个函数都有名称(得益于 Unity 泄露的元数据文件)。你知道存在诸如 `SYBO_Subway_Coins_CoinManager`(15 个方法)、`PurchaseHandler`(44 个方法)和 `InAppPurchaseHandler`(20 个方法)这样的类。但哪些方法真正修改了硬币余额?当大语言模型读取反编译的 C 代码时,它真的理解了吗?还是产生了幻觉? 最前沿的模型能恢复 59% 的逆向工程目标。人类专家能达到 92%。差距不在于智能,而在于没有人构建了解译器和提示词之间的那一层。 **这正是你今晚要构建的。** ## 快速开始 ### 1. 验证工具链(约 20 分钟) ``` git clone https://github.com/vibecodingnights/reverse-engineering.git cd reverse-engineering ``` 安装 [Ghidra 12](https://ghidra-sre.org)(需要 JDK 21+)。按照 [`setup/GHIDRA_MCP.md`](setup/GHIDRA_MCP.md) 安装 GhidraMCP 扩展并启动桥接。 将 [`setup/claude_desktop_config.json`](setup/claude_desktop_config.json) 复制到 Claude Desktop 的配置目录: - **macOS:** `~/Library/Application Support/Claude/` - **Windows:** `%APPDATA%\Claude\` 在 Ghidra 中打开 `warmup/warmup`。等待自动分析完成(约 10 秒)。在 Claude Desktop 中提问: 将答案与 [`warmup/warmup.c`](warmup/warmup.c) 进行比较。如果它能完美解决所有问题,你的设置就成功了。继续下一步。 ### 2. 加载游戏二进制文件(约 15 分钟) 从前面的桌子上取一个 U 盘。复制 `libil2cpp.so` 和 Il2CppDumper 的 `output/` 目录。 或者自行下载 APK 并运行 `target/extract.py`——请参考 [`target/DOWNLOAD.md`](target/DOWNLOAD.md)。 或者 **加载预先分析好的 Ghidra 项目**(最快路径——直接跳到步骤 3)。 如果从零开始加载: 1. 在 Ghidra 中打开 `libil2cpp.so`。自动分析需要 5–15 分钟。在此期间,请阅读 [`docs/IL2CPP_PRIMER.md`](docs/IL2CPP_PRIMER.md)。 2. 打开脚本管理器(窗口 > 脚本管理器),运行 `ghidra.py`,并指向 `output/script.json`。 3. 观察函数名称从 `FUN_00xxxxxx` 重命名为 `SYBO_Subway_Coins_CoinManager$$Coin_OnCoinPickedUp`。 ### 3. 让大语言模型查找硬币(约 15 分钟) 在连接了 GhidraMCP 的 Claude Desktop 中提问: 观察发生了什么变化。写下它的回答。 现在运行启动脚本: ``` pip install "mcp>=1.12" anthropic python starters/hunt.py # systematic metadata search python starters/survey.py # token math — the "holy shit" script ``` 将系统性搜索与 LLM 的即兴探索进行比较。它错过了什么? **你已经看到了问题。现在开始构建。** ## 仓库结构 ``` ├── target/ APK extraction — DOWNLOAD.md + extract.py ├── metadata/ Pre-generated Il2CppDumper output (class/method names) ├── warmup/ 10-function binary for toolchain validation ├── setup/ Ghidra + GhidraMCP + Claude Desktop config ├── starters/ Working scripts: survey, hunt, decompile, ask └── docs/ The problem, IL2CPP primer, tool reference, project ideas ``` ## 需要构建的内容 请参考 [`docs/WHAT_TO_BUILD.md`](docs/WHAT_TO_BUILD.md) 获取项目思路。简短版本如下: - **更佳的搜索器**:跟踪调用图,交叉引用字段偏移,对相关类进行聚类。 - **选择性反编译**:对类簇进行反编译,总结每个类,然后将总结提供给大语言模型。准确率的断崖在哪里? - **回答问题**:从头到尾追踪硬币流动。是客户端验证还是服务器端验证?你能否真正获得无限硬币? - **注释循环**:使用大语言模型重命名和注释函数。第二轮迭代是否有改进? - **动态分析**:使用 Frida 在运行时挂钩函数。动态数据能否纠正静态幻觉? ## 资源 | 资源 | 链接 | |---|---| | GhidraMCP (LaurieWired) | [github.com/LaurieWired/GhidraMCP](https://github.com/LaurieWired/GhidraMCP) | | GhydraMCP (Starsong,多实例) | [github.com/starsong-consulting/GhydraMCP](https://github.com/starsong-consulting/GhydraMCP) | | Il2CppDumper (Perfare) | [github.com/Perfare/Il2CppDumper](https://github.com/Perfare/Il2CppDumper) | | ida-pro-mcp | [github.com/mrexodia/ida-pro-mcp](https://github.com/mrexodia/ida-pro-mcp) | | radare2-mcp | [github.com/radareorg/radare2-mcp](https://github.com/radareorg/radare2-mcp) | | frida-mcp | [github.com/dnakov/frida-mcp](https://github.com/dnakov/frida-mcp) | | Frida | [frida.re](https://frida.re) | | Reversecore_MCP | [github.com/sjkim1127/Reversecore_MCP](https://github.com/sjkim1127/Reversecore_MCP) | | Awesome-RE-MCP | [github.com/crowdere/Awesome-RE-MCP](https://github.com/crowdere/Awesome-RE-MCP) | | MCP Python SDK | [github.com/modelcontextprotocol/python-sdk](https://github.com/modelcontextprotocol/python-sdk) | | Ghidra 12 | [ghidra-sre.org](https://ghidra-sre.org) | | APKMirror | [apkmirror.com](https://apkmirror.com) | [vibecodingnights.com](https://vibecodingnights.com)
标签:C 语言反编译, Ghidra, JS文件枚举, LLM 辅助分析, MCP, Token 预算, Unity 元数据, URL提取, 上下文窗口优化, 二进制分析, 云安全运维, 云资产清单, 元数据泄露, 函数筛选, 函数签名, 反编译, 大模型幻觉, 模型集成, 游戏逆向, 硬币余额修改检测, 程序理解, 软件理解, 逆向工具, 逆向工程