为 8 位时代磁盘映像编写 Ghidra 文件系统模块,其中文件没有标题、格式或魔术字节

逆向工程 文件格式 吉德拉 二进制格式
2021-06-26 05:03:11

我给了自己一个为 8 位逆向计算平台(即 Sinclair ZX Spectrum)编写 Ghidra 加载器和文件系统的项目。但我是 Ghidra、Java 和 Eclipse 的新手。

在开发 Ghidra 加载器模块时,您处理单个文件,解析其标头和格式以告诉 Ghidra 它需要文件的哪些部分、它将加载到哪些内存区域、其入口点在哪里等。

这很好,因为已经为复古系统模拟器设计了一些文件格式来封装单个游戏等。

但也有用于那些代表磁盘映像和包含多个文件的盒式磁带映像的模拟器的文件。

但与现代系统不同的是,这些旧磁盘中的文件只是字节数组。它们没有格式、标题或任何魔术字字节来识别它们。加载和运行它们所需的任何元数据都是磁盘格式的一部分,而不是文件的一部分。

所以我已经想出了如何制作 Ghidra 文件系统,但我看不出有什么方法可以将此文件元数据直接从文件系统传递给 Ghidra。相反,我只找到了一种将字节流传递给 Ghidra 的方法,然后将其传递给 Loader 系统,该系统依赖于通过查找可识别的文件格式/标头/魔术字节来识别字节流。

然后我是否必须为这些文件创建“假”包装器以使其可识别并创建一个匹配的加载器来识别它们?

或者 Ghidra 中是否已经存在一个系统来直接传递元数据以及我尚未发现的“原始”二进制文件?

Ghidra 文件系统涵盖了诸如磁盘映像文件、存档和压缩格式,甚至是胖可执行二进制文件等内容。很可能已经有文件系统模块用于打包原始二进制代码 blob 的格式。他们是如何做到的呢?

(顺便说一句,到目前为止,我发现的唯一一个解决复古磁盘映像格式的其他项目使用 hack 在 Loader 选项对话框中列出文件,而不是制作文件系统。)

0个回答
没有发现任何回复~