ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何用 buildGhidraJar 生成 ghidra.jar 并在其他 Java 应用中复用 Ghidra 逆向能力

如何用 buildGhidraJar 生成 ghidra.jar 并在其他 Java 应用中复用 Ghidra 逆向能力 如何用 buildGhidraJar 生成 ghidra.jar 并在其他 Java 应用中复用 Ghidra 逆向能力【免费下载链接】ghidraGhidra is a software reverse engineering (SRE) framework项目地址: https://gitcode.com/GitHub_Trending/gh/ghidra当你想把 Ghidra 的逆向分析能力带进另一个 Java 应用官方文档举的例子是 Hadoop 这类场景或者只是想让 Ghidra 更容易地从命令行做 headless 运行而又不想拖着整个 Ghidra 安装目录时Ghidra 提供了一个现成的打包入口support/buildGhidraJar脚本。它会把 Ghidra 的全部或一部分模块压缩进一个单独的ghidra.jar这个 jar 既可以直接java -jar运行也可以放进其他 Java 应用的 classpath 作为逆向能力库使用。需要先说明代价单 jar 模式以牺牲配置灵活性为代价换取部署简单性并且在这种模式下不支持 Python 等非 Java 脚本语言。前提条件必须使用 Ghidra 源码发行版source distribution解压后的安装目录不能是开发模式development mode。buildGhidraJar脚本会检查自身所在目录的上一级是否存在Ghidra目录不存在就直接报错退出This script does not support development mode use也就是说脚本只认「解压好的安装目录布局」脚本位于GhidraInstallDir/support/其上一级必须有Ghidra目录见 buildGhidraJar。系统 PATH 中有可用的 JDK。构建脚本buildGhidraJar内部以jdk类型调用launch.sh启动ghidra.util.GhidraJarBuilder即要求 JDK 而不只是 JRE。运行生成的 jar 时同理直接执行java命令需要 JDK 在路径内。关于 Java 版本两份文档给出的说法不完全一致这里如实保留buildGhidraJarREADME.txt 中的运行示例注明「The above commands assume that a JDK 8 is installed on your system and is contained within your execution path.」GettingStarted.md 的 Minimum Requirements 则声明当前版本要求 64 位的Java 25 JDK。实际以你所使用的 Ghidra 发行版对应的 GettingStarted 说明为准不要默认两者通用。用 buildGhidraJar 脚本生成默认 ghidra.jar在命令行中直接执行对应平台的脚本在GhidraInstallDir/support/下运行脚本本身会解析所在目录无需先cd# Linux 或 macOS buildGhidraJar [-srczip singleSrcZipFileName]rem Windows buildGhidraJar.bat [-srczip singleSrcZipFileName]要点ghidra.jar生成在你执行脚本时所在的当前目录README 原文The script creates a ghidra.jar file in the current directory不是固定在 support 目录下。想让产物落在某个位置就在那个目录下运行脚本。-srczip singleSrcZipFileName是可选参数会额外生成一个包含全部 Ghidra 源码的 zip便于调试。注意使用-srczip的前提是你解压的就是源码发行版否则该选项无法工作。如果默认 JVM 堆内存不够可以编辑脚本内被注释掉的MAXMEM配置见 buildGhidraJar 第 7-9 行官方注释说明该值一般是操作系统可用物理内存的 1/4例如MAXMEM2G。默认打包范围来自GhidraJarBuilder的includeByDefault逻辑GhidraJarBuilder.javaframework、processor、configuration 模块全部包含feature/debug/GPL 模块除非其Module.manifest声明了排除否则包含extension 模块默认不包含。验证脚本是否正常工作检查当前目录下出现了ghidra.jar文件。不带任何参数直接运行 jar。README 说明此时会输出完整的 headless analyzer 用法java -Xmx1024M -jar ghidra.jar-Xmx1024M指定 JVM 最大堆内存为 1 GB如果你的 Ghidra 版本对 Java 版本有要求见上节这里用对应的 JDK 执行java即可。能打印出 headless analyzer 的用法说明即说明 jar 本身可执行。用 ghidra.jar 运行 GhidraREADME 给出两种运行方式# GUI 模式 java -Xmx1024M -jar ghidra.jar -gui# Headless Analyzer java -Xmx1024M -jar ghidra.jar headless-analyzer-args...headless 的完整参数用法可用上一节的无参运行查看与目录安装的analyzeHeadless属于同一套 headless analyzer 参数体系。在其他 Java 应用中复用 ghidra.jar这就是单 jar 模式的第二个用途把ghidra.jar加入你的 Java 应用的 classpath例如用构建工具把该 jar 声明为依赖或java -cp中带上它从而在另一个 Java 应用里获得 Ghidra 的逆向工程能力。README 原文的定位是「to use as a library of reverse engineering capabilities for another Java application (e.g., hadoop)」。需要遵守的限制单 jar 模式下不支持 Python 等非 Java 脚本语言单 jar 模式下可配置的模块集合不如目录安装灵活想要精确控制包含哪些模块时走下一节的脚本定制路径。可选分支用 BuildGhidraJarScript 定制模块集合如果默认打包范围不满足需求比如只想带 x86 和 ARM 两个 processor或者想打包全部分布式模块官方做法是先启动 Ghidra然后在 Ghidra 内部定制并运行BuildGhidraJarScript。该脚本位于 Ghidra/Features/Base/ghidra_scripts/BuildGhidraJarScript.java源码中给出了带注释的定制示例注意以下代码块是脚本内的定制范例需要在 Ghidra 的 Script Manager 中对该脚本做相应改动后运行不是可直接执行的控制台命令// lets just include x86 and arm builder.removeAllProcessorModules(); builder.addModule(x86); // if you want all modules, uncomment the following line //builder.addAllModules();脚本默认行为按其源码注释包含所有 framework 和 processor 模块extension 模块只有在其Module.manifest声明应被排除时才排除。脚本还会把帮助/处理器手册类文件.htm、.html、.pdf排除在外并把结果写入安装目录下的ghidra.jar。运行时它会通过println逐行打印Include 模块名/Exclude 模块名构建结束打印Finished writing jar: ghidra.jar 的完整路径以上为脚本自身会输出的示例结果格式路径取决于你的安装目录。此外可以取消注释builder.buildSrcZip(...)一行额外生成调试用源码 zipGhidraSrc.zip这与命令行脚本的-srczip参数对应。边界与下一步目录安装才是 Ghidra 的常规部署形态可模块化增删功能集、可配置扩展单 jar 是官方明确给出的替代路径二者按场景二选一不要在同一台机器上混用同一份配置目录。构建脚本不支持开发模式ghidra.jar也不适合替代源码开发流程。想继续深入 headless 运行细节可参考 GhidraDocs/GettingStarted.md 的 Single Jar Mode 与 Headless (Batch) Mode 章节以及安装目录中的support/analyzeHeadless相关文档。【免费下载链接】ghidraGhidra is a software reverse engineering (SRE) framework项目地址: https://gitcode.com/GitHub_Trending/gh/ghidra创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表