ruizkinio/pseudoforge-ghidra
GitHub: ruizkinio/pseudoforge-ghidra
PseudoForge for Ghidra 是一款 Ghidra 原生扩展,基于确定性引擎对反编译伪代码进行证据支撑的清理与审查,复用已有分析结果而非重新运行分析。
Stars: 1 | Forks: 0
# Ghidra 的 PseudoForge

针对已由 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提取, 云安全监控, 云资产清单, 代码分析, 凭证管理, 反编译, 后台面板检测, 逆向工具, 逆向工程, 静态分析