包含时间序列数据的逆向工程文件

逆向工程 文件格式 二元诊断
2021-06-17 12:28:23

我必须解码主要包含时间序列数据的专有文件格式。我被告知的唯一一件事是内容是“压缩的”,尽管我不确定它是真的压缩还是使用了一些内部压缩方法。这是数据的一个片段:

789cecdd55d895d5bb057c26489774a7ac798f713feffbd2dd255d4a2b29
082220a1d24887020648194883747788a4840828024a4a238d347c13beef
60afb5f777fcac83e7372efedb8d27e3bae635e386d7b592c5cb9f375ebc
93f1e2c543bc4b09dac5eb302c7f3c5303a910835d32c2f6b579a41bc633
ab66d2945a4c47e95d36e52db44246647789178832c6b03792a0a574b2bb
b493d194a3f81b9fb3bf1ed734de70adcacdf2a5ac922228122c5f9431ed

我做了一个 [byte] 频率分析,它显示了一个均匀的分布。如果绘制字节(使用 AXE),则会显示非常均匀的图像:

在此处输入图片说明

我检查了常见压缩算法的标头,但没有找到。

任何帮助都受到高度赞赏。

编辑

其中一些文件可以通过以下链接访问:第一个文件第二个文件第三个文件第四个文件

生成/验证这些文件的可执行文件不可用。

编辑 2

使用binwalk -Me <filename>(github.com/devttys0/binwalk) 可以从之前的每个文件中提取两个 zlib-ed 文件。

这是其中一个文件的标题:

0a002f220000180100002800e80364001f783c0001a0349c3574367136db
3582348932bb30dd30a12f2b2f542ff02e432f432ff62edd2f772f6a2f2e
2fbc2edb2d382dcc2cfe2c272d492d342d1d2d352d352d00000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
1个回答

如果我知道数据代表什么会有所帮助,但我已经确定了解压后文件的格式。每个解压后的文件都具有以下结构:

short unk1;           // 10
short num_records;    // 8751  (8760 hours per year)
short unk2;           // 0
short num_samples;    // varies per file from 8 to 179
short unk3;           // 0
short unk4;           // 40
short unk5;           // 1000
short unk6;           // 100
int data_bytecount;   // varies per file (remaining byte count of the file)
Record records[num_records];

其中每个 Record 定义为:(定义为 010Editor 模板)

typedef struct {
    byte flag;                // 0 = no data; 1 = sample data follows
    if(flag == 1)
        short data[num_samples];
} Record;

例如,在从“295”解压的第一个文件中,有 8751 条记录,每条记录有 179 个样本。大多数记录只有 ~30 个非零值。记录 [0] 的示例如下所示:

15185, 15185, 15060, 14968, 14719, 14583, ...

来自“295”的文件#1,记录0

我怀疑数据值是标准化的浮点数,可能将它们除以 1000.0 或使用 16384 作为正/负数的零参考。我还怀疑每个文件包含 1 年的记录,每小时 1 个。

我很想知道这些值代表什么......只是为了有一个完整的画面。