如何使用 Ghidra Headless Analyzer 导入文件系统映像?

逆向工程 固件 吉德拉
2021-06-23 02:25:29

我目前正在调试 EXT4 加载程序,每次使用 GUI 和选择文件都相当烦人。更简单的解决方案是使用 Headless Analyzer 调用来导入文件系统映像并对其进行解析。

简单地使用项目位置、名称和-import image.ext4结果的参数调用 Headless Analyzer 的幼稚方法会导致以下错误:

INFO  No load spec found for import file: <redacted>.ext4   (AutoImporter.java:215) 
ERROR The AutoImporter could not successfully load <redacted>.ext4 with the provided import parameters. Please ensure that any specified processor/cspec arguments are compatible with the loader that is used during import and try again.   (HeadlessAnalyzer.java:1651) 
ERROR REPORT: Import failed for file: <redacted>.ext4   (HeadlessAnalyzer.java:1688) 

文档仅涵盖处理特定的二进制文件,因此目前似乎不支持它。

是一种解决方法工作我的具体使用情况,但可能足以他人就是安装图像,然后使用-recursive该无头分析论证。

一个解决方案可能是一个脚本,它会在通过Open File System菜单选项选择文件后调用任何调用Ghidra 中似乎还没有这样的东西,但也许某个地方的社区写了一个。

1个回答

我发现足以解决我当前调试 EXT4 解析器问题的解决方案是以下 Ghidra 脚本,另存为ImportFS.java

import ghidra.app.script.GhidraScript;
import ghidra.formats.gfilesystem.FSRL;
import ghidra.formats.gfilesystem.FileSystemRef;
import ghidra.formats.gfilesystem.FileSystemService;

import java.io.File;

public class ImportFS extends GhidraScript{

        @Override
        protected void run()throws Exception{
                File filesystemImage = askFile("Choose Filesystem Container", "Select");
                FSRL fsrl = FSRL.fromString("file://" + filesystemImage.getAbsolutePath());
                FileSystemService fileSystemService = FileSystemService.getInstance();
                FileSystemRef ref = fileSystemService.probeFileForFilesystem(fsrl, monitor, null);
        }
}

并调用 Headless Analyzer

analyzeHeadless /tmp temp_project -scriptPath /path/to/script/folder -readOnly -preScript ImportFS.java /path/to/file.img

askFile在无头模式下运行时不会通过 GUI 提示输入文件,因此/path/to/file.img必须通过参数或属性文件提供。

解析后实际导入文件系统树需要更多代码,但这应该是可行的。