WGR614v7 上的 .chk 固件包格式

逆向工程 文件格式 固件
2021-06-22 23:34:39

注意:我知道逆向工程二进制文件的技术和法律影响。

我有 Netgear WGR614v7 路由器的固件,格式为 .chk 文件,来自 Netgear 自己,我希望解压该文件。我的理解是固件 .chk 文件是TRX 图像之前的标题,我试图解开我有无标题或标题的文件。既没有那也没有binwalk成功。在文件开头非常接近的地方可以看到两个有用的字符串:

  • AH00I8
  • U12H064T00_网件

在十六进制编辑器中检查文件,我找不到TRX 文件签名(我正在寻找 ASCII HDR0)。我也找不到任何类型的压缩魔法值,除了在文件中相当远的地方,它们不太可能表示我正在寻找的实际内容的开始。

我在寻找错误的文件类型吗?有什么关于这个结构的已知信息我还没有发现吗?

编辑:固件已从Netgear 网站下载我尝试切断各种长度,但找不到合理定位的压缩或 TRX 标头。ff ff ff ff用作防止重复引导固件的方法的 IMG 图像的特性也不存在。

编辑 2:我自己进行了一些搜索,并找到了一个解压实用程序当我将文件切成sqz第一个字符时,该实用程序似乎找到了有效的 Huffman 结构,但会导致大小不匹配。解压的结果产生了 11 个字节,而程序警告我:

Warning: Unpacked file should be 7537274 bytes but is 396409921 bytes! at ./unpack.pl line 61, <STDIN> line 3.

当然,可能有多种损坏的数据可能部分可读,因为霍夫曼给了我这里看到的奇怪结果。

1个回答

文件开始:

0000000: 4148 3030 4938 e66c 000e aa28 9835 0589  AH00I8.l...(.5..
0000010: 3004 125a 1b39 65ff 47e4 b95c 0001 0014  0..Z.9e.G..\....
0000020: 5531 3248 3036 3454 3030 5f4e 4554 4745  U12H064T00_NETGE
0000030: 4152 0000                                AR..

选择这个尺寸的原因很快就会清楚。

前四个字节 ( AH00) 可能是文件魔术。谷歌搜索该字符串会显示此页面,其中包含具有类似结构的不同固件文件的详细分类。

接下来的四个字节不由链接页面描述。但是,将它们作为 32 位大端值 (BE32) 读取,您会得到 0x4938e66c = 1228465772,这似乎是最近的 UNIX 时间戳(通常值从大约 800,000,000 到 1,500,000,000)。事实上,它解码为Fri Dec 5 08:29:32 2008 GMT,这似乎是硬件的构建日期(我注意到链接的文章有 0x481ac265 = Fri May 2 07:27:33 2008 GMT,这似乎也是合理的)。

接下来的四个字节读取为 BE32 值给出 961064。总文件大小为 961116 字节,所以这可能是有效负载大小,为标头留下 52 个字节(因此解释了为什么我选择在此处显示前 52 个字节)。

接下来的 32 个字节是链接页面所指示的有效载荷的 MD5 总和。我删除了前 52 个字节,MD5 对结果求和:

983505893004125a1b3965ff47e4b95c  /tmp/fw.sqz

这正是标题所包含的内容。

接下来的两个字节是未知的。

接下来的两个字节是 0x0014,它是后面的字符串的长度(包括两个填充 NUL)。虽然我不熟悉 Netgear 路由器,但我猜这是硬件目标的型号/修订号。

你去吧:那是.chk文件头。

char magic[4];
uint32_t timestamp; // UNIX timestamp
uint32_t payload_size;
char md5sum[32];
uint16_t unknown; // = 1 on all files seen so far
uint16_t model_size;
char model[model_size];

在原始链接页面中,有效负载是一个普通的 ELF 文件。不幸的是,在您的固件中,有效载荷是其他类型的文件,具有魔力sqz(“挤压”?)。它显然被压缩了,但我不知道它是用什么压缩的。目前,在有人弄清楚压缩格式是什么之前,这必须是一个不完整的答案。