Ghidra无头模式(自动化批处理执行重复性任务)
Ghidra无头模式(自动化批处理执行重复性任务)
与Ghidra GUI探索单个项目中的单个文件不同,Ghidra headless analyzer(Ghidra无头分析器)更加适合批处理和用脚本控制Ghidra。
(一)启动analyzeHeadless
analyzeHeadless 位于ghidra support路径下(ghidra_11.0.1_PUBLIC\support\analyzeHeadless )。如下图所示,为执行analyzeHeadless 后的输出结果。
(二)通过analyzeHeadless,新建Ghidra项目
在无头模式下,如果项目不存在,则会自动新建一个项目,也可以通过参数指定项目地址。
下面的命令将在D:\GhidraProject目录中打开或者新建test项目
analyzeHeadless D:\GhidraProject test
(三)通过analyzeHeadless,将文件导入项目
在无头模式中,需要指定参数-import选项和要导入的文件名称。
通过指定import参数,导入D:\GhidraProject\importFile1文件。
analyzeHeadless D:\GhidraProject test -import D:\GhidraProject\importFile1
通过指定import参数,导入D:\GhidraProject\impor中所有文件。
analyzeHeadless D:\GhidraProject test -import D:\GhidraProject\import
(四)通过analyzeHeadless, 自动分析文件、保存以及退出。
在无头模式下,自动分析和保存是默认发生的,因此我们在上述的命令中其实已经完成该步骤。
analyzeHeadless D:\GhidraProject test -import D:\GhidraProject\importFile1
如果不想自动分析文件,可以通过指定参数-noanalysis
analyzeHeadless D:\GhidraProject test -import D:\GhidraProject\importFile1 -noanalysis
(五)analyzeHeadless中,其他的选项和参数
(1)项目文件相关:
- -log logfileparh
修改默认日志文件路径。 - -overwrite
重复导入同一个文件,覆盖原有内容。 - -readOnly
只考虑导入文件,不保存至项目中。 - -deleteProject
不保存新建项目,分析执行完成后将会删除当前项目。 - -recursive
递归处理子目录,如:文件导入时。
(2)分析相关:
-
-noanalysis
只加载不分析导入文件。 -
-analyTimeoutPerfile seconds
指定一个以秒为单位的超时时间。 -
-processor languageID和-cspec compilerSpecID
自定义选择语言和编译器规范,在无头模式下,允许在使用-processor 选项时,不使用-cspec;不能在不使用-processor 选项时,使用-cspec -
-loader loadername
指定GHidra的加载器模块,具体内容可查看support\analyzeHeadlessREASDME.html -
-max-cpu number
指定无头模式下使用的cpu核数
(3)脚本相关:
无头模式下最强大的运用莫过于和GHidra脚本的相关联。
- -process [project_file]
需要通过脚本处理的文件(而不是导入文件),如果没有指定,则处理项目中所有的文件。 - -scripPath “path[;path2…]”
扩展脚本文件搜索路径,多个路径需要使用分号进行分隔。 - -preScript
该选项指定在分析前运行的脚本。 - -postScript
该选项指定在分析后运行的脚本。 - -propertiesPath
该选项指定与脚本关联的任何属性文件的路径。 - -okToDelete
指定该选项后,允许无头模式下删除文件。
(六)无头模式和脚本联动示例
任务:针对D:\GhidraProject目录下中test项目中的每个文件,在分析完成后执行D:\scriptProject中的testScript脚本,限制cpu核为8,。
analyzeHeadless D:\GhidraProject test -process -scriptPath "D:\scriptProject" -postScript testScript -max-cpu 8