ASUS路由器固件结构分析(trx格式)
ASUS即中国台湾华硕电脑股份有限公司,简称华硕,它是当前全球第一大主板生产商、全球第三大显卡生产商,同时也是全球领先的3C解决方案提供商之一,致力于为个人和企业用户提供最具创新价值的产品及应用方案。华硕的产品线完整覆盖至笔记本电脑、主板、显卡、服务器、光存储、有线/无线网络通讯产品、LCD、掌上电脑、智能手机等全线3C产品。其中显卡和主板以及笔记本电脑三大产品已经成为华硕的主要竞争实力。
ASUS路由器的固件可以在官网下载,这里分析的型号是RT-AC56U,版本3.0.0.4.382.51641,格式为trx。使用本站的固件分析工具分析固件结构:

解析后结果如下:
| 序号 | 偏移 | 说明 |
| 1 | 0x0-0x1B | 固件头 |
| 2 | 0x1C-0x19B363 | 压缩的内核映像 kernel |
| 3 | 0x19B364-0x258CFFF | 文件系统映像 rootfs |
其中固件结构的第一部分trx固件头是比较关键的,下面我们通过本站固件分析工具的结果和16进制工具打开固件分析了解其具体结构:

| 序号 | 偏移 | 说明 |
| 1 | 0x00-0x03 | 标识符,标记此为TRX固件,字符串为HDR0 |
| 2 | 0x04-0x07 | 固件总大小,包括TRX头,大小0x258D000 |
| 3 | 0x08-0x0b | 固件校验值 CRC32,值0xAFD7C34F,不包含头的前12个字节 |
| 4 | 0x0c-0x0d | flags,值为0 |
| 5 | 0x0e-0x0f | version,值为1 |
| 6 | 0x10-0x13 | 加载器偏移,值为0x1c,实际为kernel偏移 |
| 7 | 0x14-0x17 | 内核偏移,值为0x19B364,实际为rootfs偏移 |
| 8 | 0x18-0x1b | 文件系统偏移,实为空 |
crc32的算法,使用python实现如下:
import zlib
def crc32(data):
return (0xffffffff - zlib.crc32(data)) & 0xFFFFFFFF
具体内容可以参考firmware-mod-kit工具中的源码 asustrx.c 。