ruizkinio/pseudoforge-ghidra

GitHub: ruizkinio/pseudoforge-ghidra

PseudoForge for Ghidra 是一款 Ghidra 原生扩展,基于确定性引擎对反编译伪代码进行证据支撑的清理与审查,复用已有分析结果而非重新运行分析。

Stars: 1 | Forks: 0

# Ghidra 的 PseudoForge ![PseudoForge for Ghidra](https://raw.githubusercontent.com/ruizkinio/pseudoforge-ghidra/main/docs/assets/pseudoforge-hero.svg) 针对已由 Ghidra 分析的程序的确定性伪代码清理与审查构件。 PseudoForge for Ghidra 将锁定的确定性分析引擎连接到 Ghidra 的反编译器、High P-code、符号、类型、调用图、内存映射和列表。它使用 Ghidra 程序数据库中已存在的分析结果;它不会替换或重新运行 Ghidra 的自动分析。 ## 它提供的功能 - 通过 CodeBrowser 或 Decompiler 上下文菜单进行当前函数分析。 - 可搜索的简单或并排清理后的伪代码预览。 - 持久化的 `.forge` 结果和可导出的审查构件。 - 在有支持证据时,提供聚焦的缓冲区契约和选择器路径报告。 - 可选的、经审查的局部变量/参数重命名,具备陈旧输入检查和 Ghidra 事务。 - 对已分析、已保存的 Ghidra 项目进行无头(Headless)处理。 - 可选的 LLM 重命名候选方案,默认禁用,且仍需经过确定性验证器和明确审查。 捆绑的引擎、配置文件、规则、渲染器和格式来自锁定的上游发布版本。宿主适配器是 Ghidra 专用的:Ghidra 的 High P-code 和程序事务替代了 IDA/Hex-Rays 的宿主功能。不同的反编译器可能会恢复出不同的类型、控制流和 C 文本,因此本移植版本不保证与 IDA 插件实现逐字节的 UI 或伪代码完全一致。 ## 兼容性 恢复的发布证据和当前源码构建记录如下: | 组件 | 已验证的基线 | | --- | --- | | Ghidra | 12.0 和 12.0.3 源码构建;12.1.2 打包发布证据 | | Java | Java 21 bytecode 目标(使用 Temurin 25 在本地构建) | | Python | CPython 3.10 或更高版本 | | PseudoForge 引擎 | 上述锁定提交处的 0.1.8 版本 | 未声明与其他版本兼容。重构构建的运行时 GUI 验证与编译过程相互独立。有关支持政策,请参阅 [docs/COMPATIBILITY.md](docs/COMPATIBILITY.md);有关带有日期的测试证据,请参阅 [docs/VERIFICATION.md](docs/VERIFICATION.md)。 ## 安装说明 1. 从您信任的项目发布版本中获取扩展归档文件,或者按照下述说明从源码构建一个。 2. 在 Ghidra 中,选择 **File > Install Extensions...**,按下绿色的加号按钮,然后选择该归档文件。 3. 启用 **PseudoForgeGhidra**,重启 Ghidra,然后重新打开 CodeBrowser。 4. 选择 **File > Configure...**,搜索 **PseudoForge**,如果插件未自动启用,请手动启用它。 5. 确保在 Linux/macOS 上 `python3` 位于 `PATH` 中,或者在 Windows 上可以使用 `py` 启动器。可以在 **Edit > Tool Options > PseudoForge** 中设置自定义可执行文件。 对于捆绑的引擎和配置文件,不需要单独执行 `pip install`。 不包含 Ghidra 本身。 ## 快速开始 1. 打开一个程序并允许 Ghidra 自动分析完成。 2. 将光标放在已定义的函数中。 3. 选择 **Tools > PseudoForge > Analyze current function** 或按下 `Ctrl+Alt+F`。 4. 查看可停靠的结果。如有需要,可通过 **Tools > PseudoForge > Configure preview mode...** 更改预览模式。 允许在 Ghidra 自动分析仍在运行时执行此操作,但捕获的内容将反映部分分析结果。 ## 无头(Headless)使用 `PseudoForgeBatch.java` 可以使用现有的已保存项目,而无需重新运行分析: ``` analyzeHeadless /path/to/project ProjectName \ -process ProgramName -noanalysis \ -scriptPath /path/to/PseudoForgeGhidra/ghidra_scripts \ -postScript PseudoForgeBatch.java \ --function-regex='DriverDispatch' \ --output=/path/to/pseudoforge-output ``` 脚本文档记录了支持的选项;使用未知选项调用它会打印错误。要进行聚焦的选择器分析,可以添加 `--case-value=0x222000 --case-report=selector --helper-depth=2`。 ## 安全性与数据 常规分析仅读取 Ghidra 程序并写入 PseudoForge 构件。重命名应用是可选的,仅限于选定的函数参数或局部变量,并受到全新函数捕获的保护。类型辅助预览会在事务中临时应用签名,重新反编译,恢复捕获的状态,并在报告成功之前验证恢复情况。 如果可执行文件旁边的位置可写,交互式结果将写入该可执行文件旁边的 `.forge` 中;否则,将写入 Ghidra 的用户设置目录。为可选重命名提供程序输入的 API 密钥存储在 Ghidra 工具配置中;请使用受限密钥并保护该文件。 ## 文档 - [架构](docs/ARCHITECTURE.md) - [兼容性](docs/COMPATIBILITY.md) - [验证报告](docs/VERIFICATION.md) - [截图与媒体指南](docs/SCREENSHOTS.md) - [贡献指南](CONTRIBUTING.md) - [安全政策](SECURITY.md) - [更新日志](CHANGELOG.md) - [第三方声明](THIRD_PARTY_NOTICES.md) ## 从源码构建 将 `GHIDRA_INSTALL_DIR` 设置为解压后的 Ghidra 发行版。构建过程会委托给该发行版官方的 `support/buildExtension.gradle`;不会从非官方仓库获取或捆绑任何 Ghidra JAR。 ``` export GHIDRA_INSTALL_DIR=/opt/ghidra_12.0_PUBLIC ./gradlew clean buildExtension ``` 在 Windows PowerShell 上: ``` $env:GHIDRA_INSTALL_DIR = 'C:\tools\ghidra_12.0_PUBLIC' .\gradlew.bat clean buildExtension ``` 可安装的归档文件将写入 `dist/`。包装器锁定了 Gradle 9.2.1,这是 Ghidra 12.0 附带的版本。独立于宿主的 worker 测试使用以下命令运行: ``` python3 -m unittest -v tests.test_ghidra_worker ``` ## 许可证 此独立移植版本基于 [MIT 许可证](LICENSE) 提供。捆绑的上游 PseudoForge 组件保留其 MIT 声明;请参阅 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) 和 `data/python/PSEUDOFORGE_UPSTREAM_LICENSE`。不重新分发 Ghidra。 在引用本移植版本时,请使用 [CITATION.cff](CITATION.cff) 并保留对 kernullist 上游 PseudoForge 的单独致谢。
标签:Ghidra插件, JS文件枚举, URL提取, 云安全监控, 云资产清单, 代码分析, 凭证管理, 反编译, 后台面板检测, 逆向工具, 逆向工程, 静态分析