boricj/ghidra-delinker-extension
GitHub: boricj/ghidra-delinker-extension
Ghidra 扩展,将已链接的二进制程序导出为可重定位的目标文件,支持重建符号和重定位信息。
Stars: 574 | Forks: 28
# Ghidra 的 Object file 导出扩展
该 Ghidra 扩展支持将程序的一部分导出为 object file。这些 object file 包含有效的元数据(符号、重定位表等),因此可以被工具链直接重用以进行后续处理。
用例包括:
* [高级二进制修补](https://boricj.net/tenchu1/2024/05/31/part-11.html),通过利用链接器将原始部分和修改部分合并在一起,而不是手动完成这项工作;
* [软件移植](https://boricj.net/atari-jaguar-sdk/2024/01/02/part-5.html),通过从程序中隔离出与系统无关的代码并替换其余部分;
* 将[程序](https://boricj.net/atari-jaguar-sdk/2023/12/18/part-3.html)或 object file 从一种文件格式转换为另一种;
* [创建](https://boricj.net/tenchu1/2024/03/11/part-5.html)[库](https://boricj.net/tenchu1/2024/03/18/part-6.html),通过提取程序的一部分并在另一个环境中重用它们;
* 反编译项目,通过将程序拆分为多个 object file 并以“忒修斯之船”的方式重新实现它们;
* ……
支持的指令集架构和 object file 矩阵:
| | x86 | x86_64 | MIPS |
| ------------- | ---- | ------ | ---- |
| COFF | ✅ | ✅ | ❌ |
| ELF | ✅ | ✅ | ✅ |
## 构建 (CLI)
* 克隆此仓库;
* 设置 `GHIDRA_INSTALL_DIR` 环境变量,指向您的 Ghidra 安装目录;
* 运行 `gradle buildExtension`。
Ghidra 扩展归档文件将创建在 `dist/` 目录中。
## 安装
* 从 [发布页面](https://github.com/boricj/ghidra-delinker-extension/releases) 下载扩展或在本地构建;
* 通过 **File > Install Extensions…** 在您的 Ghidra 实例中安装该扩展;
* 在 CodeBrowser 窗口中,通过 **File > Configure > Experimental** 启用 **RelocationTableSynthesizedPlugin** 插件。
## 用法
1. 在 Listing 视图中选择一组要提取的地址;
2. 运行 **Relocation table synthesizer** 分析器(在单次模式下可用);
3. 通过 **File > Export Program…** 调用可重定位 object file 导出器。
重建的重定位信息可以通过 **Window > Relocation table (synthesized)** 查看。
可以通过在 **Analysis > Auto Analyze...** 对话框中设置 **Relocation table synthesizer** 分析器的 **Evaluation report policy** 选项来启用详细的评估报告。
## 它是如何工作的?
Object file 由三部分组成:
* 可重定位的段(section)字节;
* 符号表;
* 重定位表。
当调用链接器从一组 object file 生成可执行文件时,它会:
* 在内存中布局它们的段;
* 计算符号在虚拟地址空间中的地址;
* 根据符号的最终地址,将重定位应用到段字节上。
通常,重定位表在此过程之后会被丢弃,如果不保留调试符号,符号表也会被丢弃,只留下不可重定位的段字节。
然而,通过仔细分析,这些数据可以被重建,这使我们能够有效地将程序“去链接(delink)”回 object file。
标签:COFF, ELF, Ghidra, Ghidra插件, Gradle, JS文件枚举, MIPS, Wayback Machine, x86, x86_64, 二进制修补, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码复用, 反汇编, 后台面板检测, 域名枚举, 对象文件导出, 文件格式转换, 漏洞测试, 符号表, 网络安全, 软件移植, 逆向工程, 重定位表, 链接器, 隐私保护, 静态分析