来自 QNX 操作系统的未知存档格式

逆向工程 二元分析 linux 文件格式 二进制格式 qnx
2021-07-03 17:42:57

我们正在对 QNX 系统进行逆向工程,我们发现了一个上传到系统的小文件。它似乎是文件系统映像或某种未压缩的存档。我们无法弄清楚它使用的校验和,因此我无法编辑文件。我有这个文件的多个版本,它们都以相同的魔术字节开头。我已经对文件运行了 binwalk 和 magic,但都没有返回任何有趣的东西。

我们还尝试将它安装在 QNX vmware 映像中,但它说它的格式不正确。如果我把它转错了,我接下来会检查 linux QNX 源代码以确认。

如果这是文件系统映像,有什么想法吗?标题似乎列出了带有填充的文件路径/名称,由于我缺乏知识,我认为这是某种资源清单。

魔术头是 0x77FA77FA

有谁知道这个文件格式是什么?

你可以在这里下载二进制文件:http : //s000.tinyupload.com/index.php?file_id=81688472369674028404

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

1个回答

尽管有关文件来源的一些线索可能有用,但格式似乎非常简单,因此可以从示例中推断出来。它不是一个成熟的文件系统,而是一个简单的存档/包。

首先,文件的标题:

struct Header
{
  uint32 signature;  // 0xFA77FA77
  uint32 data_start; // offset of the start of file's data
  uint32 timestamp;  // possibly file's creation time.649953358 corresponds to August 6, 1990 2:35:58 PM
  uint32 data_end;   // offset of the end of file's data
  uint32 checksum;   // possibly checksum (CRC-32?)
  uint32 num_files;  // number of file entries following the header (52)
  uint32 field_18;   // unknown (0)
  uint32 field_1C;   // unknown (0xFFFF)
};

其后num_files是文件记录,每个记录 0x100 字节:

struct FileRecord
{
  char name[224]; //file path (0-padded)
  uint32 offset;  // offset to data(from header.data_start)
  uint32 size;       // size of data
  uint32 field_E8;   // unknown (0); possibly high half of 64-bit size
  uint32 checksum;   // possibly checksum (CRC-32?)
  uint32 field_F0;   // unknown (0)
  uint32 field_F4;   // unknown (0)
  uint32 field_F8;   // unknown (1)
  uint32 field_FC;   // unknown (2)
};

基于此,创建提取器应该是微不足道的。