TP-LINK路由器固件结构分析(ver. 1.0版本)
普联技术有限公司(以下简称"TP-LINK")是全球领先的网络通讯设备供应商。自1996年成立以来,始终坚持自主研发、自主制造、自主营销,致力于为大众提供最便利的本地局域网络互联和Internet接入手段,为大众在生活、工作、娱乐上日益增长的网络使用需求,提供高品质、高性能价格比的全面设备解决方案。TP-LINK产品涵盖以太网、无线局域网、宽带接入、电力线通信、安防监控,在既有的传输、交换、路由等主要核心领域外,正大力扩展智能家居、智能楼宇、人工智能、云计算、边缘计算、数据存储、网络安全、工业互联网等领域,为更广泛的用户提供系统化的设备、解决方案和整体服务。
TP-LINK路由器固件分为多个版本,主要是根据固件头的字符串进行区分:
序号 | 版本 | 识别 |
1 | ver. 1.0 | 固件头包含ver. 1.0 |
2 | ver. 2.0 | 固件头包含ver. 2.0 |
3 | Cloud | 固件头包含fw-type:Cloud |
我们首先来看看最常见的ver. 1.0版本的固件,这里分析的型号为TL-WR841N,硬件版本v7,固件版本TL-WR841N_v7_120201。使用本站的固件分析工具可以分析固件结构:

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

序号 | 偏移 | 说明 |
1 | 0x00-0x03 | 固件头版本,值为0x01000000 |
2 | 0x04-0x1b | 供应商名称,字符串为TP-LINK Technologies |
3 | 0x1c-0x1f | 固件版本类型,字符串为ver. 1.0 |
4 | 0x40-0x43 | 产品ID,值为0x08410007,解析型号为841,硬件版本v7 |
5 | 0x44-0x47 | 产品版本,值为0x00000001 |
6 | 0x48-0x4b | 填充数据,值为0x00000000 |
7 | 0x4c-0x5b | 固件校验值,值为73852F49B3BBE2B33864BE163414719B |
8 | 0x5c-0x5f | 填充数据,值为0x00000000 |
9 | 0x60-0x6f | 内核校验值,值为6D342984316C359EB178AFB5DC108D37 |
10 | 0x70-0x73 | 填充数据,值为0x00000000 |
11 | 0x74-0x77 | 内核加载地址,值为0x80002000 |
12 | 0x78-0x7b | 内核入口点,值为0x801BD000 |
13 | 0x7c-0x7f | 固件总长度,值为0x3C0000 |
14 | 0x80-0x83 | 内核偏移,值为0x200 |
15 | 0x84-0x87 | 内核长度,值为0x000D261C |
16 | 0x88-0x8b | 文件系统偏移,值为0x100000 |
17 | 0x8c-0x8f | 文件系统长度,值为0x2C0000 |
18 | 0x90-0x93 | bootloader偏移,值为0 |
19 | 0x94-0x97 | bootloader长度,值为0 |
20 | 0x98-0x99 | 主版本号,值为3 |
21 | 0x9a-0x9b | 次版本号,值为0xD(13) |
22 | 0x9c-0x9d | 小版本号,值为9 |
23 | 0x9e-0x1ff | 填充 |
具体内容可以参考firmware-mod-kit工具中的源码 tp-tool.c 。