nightwing-us/pyghidra-decaf

GitHub: nightwing-us/pyghidra-decaf

pyghidra-decaf 通过自动生成 Java 桩类并桥接 Python 逻辑,使开发者无需编写 Java 即可为 Ghidra 开发完整的原生插件。

Stars: 5 | Forks: 0

# PyGhidra Decaf 一个无需 Java 开发即可为 Ghidra 开发插件的 Python 包 ## 文档概述 - [快速开始](#quick-start) — 5 分钟编写你的第一个插件 - [插件开发指南](docs/index.md) — 完整的 API 参考与示例 - [架构与对比](docs/gap-analysis-ghidra-pyghidra-decaf.md) — Decaf 存在的原因及其与 PyGhidra 的对比 - [使用 pyghidra-decaf 的项目](#projects-using-pyghidra-decaf) — 你可以学习的真实消费者项目 - [贡献指南](CONTRIBUTING.md) — 如何提交补丁 - [安全](SECURITY.md) — 如何报告漏洞 ## 前置条件 你需要: - **Ghidra 11.0 或更高版本**,并内置 PyGhidra(PyGhidra 默认包含在 Ghidra 发行版中) - **Python 3.10+** Decaf 封装了 PyGhidra 并提供 Python 原生的插件开发。有关设置详细信息,请参阅 [PyGhidra 安装文档](https://github.com/NationalSecurityAgency/ghidra/tree/master/GhidraDocs)。 ## 问题所在:Ghidra 的插件发现机制 Ghidra 在 JVM 启动时通过扫描 classpath 中带有 `@PluginInfo` 注解的 `.class` 文件来发现插件。这种字节码级别的扫描发生在任何 Python 代码运行之前,因此 PyGhidra 的 JPype 代理(即没有磁盘编译形式的纯 Python 对象)对 Ghidra 的插件系统是不可见的。你可以使用 PyGhidra 来*编写脚本*控制 Ghidra,但如果没有手写的 Java 模板代码,你就无法将 Python 代码注册为*插件*、服务或分析器。 **Decaf 解决了这个问题**,它会在设置阶段根据你的 Python 元数据生成最简化的 Java 桩类(stub classes),使你的 Python 插件能够被 Ghidra 的字节码扫描器发现。在运行时,Decaf 通过 JPype 反射将这些桩绑定到你的 Python 代码。结果是:无需任何 Java 开发,即可实现完整的插件生命周期(初始化、销毁、事件、服务注册、状态持久化)。 ## 安装 ``` uv pip install pyghidra_decaf ``` ## 快速开始:你的第一个插件 ### 1. 创建一个最简化的插件包 ``` mkdir my-ghidra-plugin && cd my-ghidra-plugin mkdir -p src/my_plugin touch src/my_plugin/__init__.py ``` ### 2. 编写 `src/my_plugin/decaf_init.py` ``` from importlib.metadata import version from pyghidra_decaf.launch import ( DecafExtensionInfo, DecafPluginInfo, PluginType, PluginStatus ) def decaf_init(launcher): return DecafExtensionInfo( name="My Plugin", description="My first Ghidra plugin", author="You", version=version("my-plugin"), plugins=[ DecafPluginInfo( type=PluginType.ProgramPlugin, qualname="MyPlugin", class_name="MyPlugin", status=PluginStatus.STABLE, module_name="my_plugin.plugin", category="Analysis", shortDescription="My first plugin", description="My first Ghidra plugin in pure Python", ) ], java_package="", ) ``` ### 3. 编写 `src/my_plugin/plugin.py` ``` from typing import List, Tuple, Type from pyghidra_decaf.decaf.plugin import DecafProgramPlugin class MyPlugin(DecafProgramPlugin): def init(self): self.tool.setStatusInfo("MyPlugin loaded!") def decaf_load() -> List[Tuple[str, Type[DecafProgramPlugin]]]: return [("my_plugin.plugin.MyPlugin", MyPlugin)] ``` ### 4. 创建 `pyproject.toml` ``` [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "my-plugin" version = "0.1.0" description = "My first Ghidra plugin" [project.entry-points."decaf.init"] my_plugin = "my_plugin.decaf_init:decaf_init" [project.entry-points."decaf.load"] my_plugin = "my_plugin.plugin:decaf_load" ``` ### 5. 安装并初始化 ``` pip install -e . pyghidra_decaf_bootstrap ``` ### 6. 启动 Ghidra 并启用插件 ``` pyghidra --gui --install-dir ~/ghidra/ghidra_11_3_2_PUBLIC ``` 出现提示时,在 文件 → 安装扩展 中启用 "My Plugin"。你会在 Ghidra 的状态栏看到 "MyPlugin loaded!"。 有关完整的详细步骤,请参阅 [插件开发指南](docs/index.md)。有关完整的真实案例,请参阅 [mcpyghidra](https://github.com/nightwing-us/mcpyghidra) — 这是一个已发布且正在积极使用的 Decaf 插件。 ## 使用 pyghidra-decaf 的项目 - **[mcpyghidra](https://github.com/nightwing-us/mcpyghidra)** — 一个 Model Context Protocol (MCP) 服务器,将 Ghidra 逆向工程工具暴露给 LLM 客户端。 用 pyghidra-decaf 构建了什么吗?欢迎提交 PR 将其添加到这里。 ## 开发说明 本项目使用 `uv` 进行 Python 环境和包管理。 ### 设置开发环境 ``` # 如果尚未安装,请安装 uv curl -sSf https://astral.sh/uv/install.sh | bash # 创建 virtual environment 并安装 dev dependencies uv venv uv pip install -e ".[dev]" ``` ### 运行测试 ``` uv run pytest ``` ### 类型检查 ``` uv run mypy ``` ### 代码检查与格式化 ``` uv run ruff check src tests uv run ruff format src tests ``` ### 构建包 ``` uv build ``` ## 尚未支持的功能 Decaf 目前支持 `Plugin` 和 `ProgramPlugin` 扩展点,使你能够编写: - 可停靠的 UI 面板(通过 `ComponentProvider` 接口) - 插件生命周期钩子(初始化、销毁、事件、状态持久化) - 服务注册和事件订阅 **尚未支持(欢迎提交补丁):** - `Analyzer`(参与自动分析) - `Loader`(文件格式支持) - `Exporter`(自定义导出格式) - `FieldFactory`(自定义 Listing 列) - 自定义 `PluginEvent` 子类 对于超出此范围的使用场景,请考虑手写 Java 插件或使用原生的 PyGhidra 脚本。有关详细的功能对比,请参阅 [架构指南](docs/gap-analysis-ghidra-pyghidra-decaf.md)。 ## 许可证 Apache-2.0 — 详情请参阅 [LICENSE](LICENSE)。 版权所有 © 2026 Nightwing Group, LLC.
标签:Ghidra, PyGhidra, Python, SOC Prime, 云资产清单, 代码分析, 凭证管理, 开发工具, 插件开发, 无后门, 逆向工具, 逆向工程