小米路由固件格式

来自Jack's Lab
(版本间的差异)
跳转到: 导航, 搜索
(小米格式)
(小米格式)
第23行: 第23行:
 
-:x:t:o:f:p:S:I
 
-:x:t:o:f:p:S:I
 
......
 
......
upsetting.sh
 
 
brcm4709_nor.bin
 
brcm4709_nor.bin
root.ext4.lzma
+
brcm4709_fac_update_nor.bin
 +
nvram_fac.bin
 +
fac_mode.bin
 
upsetting_fac1.sh
 
upsetting_fac1.sh
fac_mode.bin
 
 
upsetting_fac2.sh
 
upsetting_fac2.sh
fac_mode.bin
 
 
upsetting_fac3.sh
 
upsetting_fac3.sh
fac_mode.bin
 
root.ext4.lzma
 
root.squashfs
 
vmlinuz.trx
 
 
upsetting.sh
 
upsetting.sh
brcm4709_fac_update_nor.bin
 
nvram_fac.bin
 
 
root.ext4.lzma
 
root.ext4.lzma
 
root.squashfs
 
root.squashfs

2014年6月4日 (三) 22:29的版本

1 概述

路由固件的格式,基本是基于 openwrt 的 trx 这个简单的二进制文件格式



2 小米格式

小米自己改了一个打包工具 mkxqimage,要知道其固件格式,需要分析一下这个工具

0.5.56 版固件下的工具,先看一下内部字符串:

$ strings /bin/mkxqimage
......
/usr/share/xiaoqiang/public_ssh.pem
/usr/share/xiaoqiang/public.pem
error fopen public key 
error PEM_read_RSAPublicKey
error EVP_PEKY_new
error EVP_PKEY_st1_RSA
......
-:x:t:o:f:p:S:I
......
brcm4709_nor.bin
brcm4709_fac_update_nor.bin
nvram_fac.bin
fac_mode.bin
upsetting_fac1.sh
upsetting_fac2.sh
upsetting_fac3.sh
upsetting.sh
root.ext4.lzma
root.squashfs
ramfsz
vmlinuz.trx


参考 carabob001 在这个页面对 小米路由固件的分析


0.2.62 固件为例:

comcat@jackslab:/work/openwrt/xiaomi/rom$ hexdump -C brcm4709_hdk_0.2.62.bin | head -n 3
00000000  48 44 52 30 21 90 62 02  54 20 9e 15 04 00 02 00  |HDR0!.b.T ......|
00000010  20 00 00 00 21 a0 37 02  21 a0 37 02 21 a0 37 02  | ...!.7.!.7.!.7.|
00000020  5d 00 00 01 00 00 00 00  08 00 00 00 00 00 00 6f  |]..............o|
00 - 03: 0x30 52 44 48,为 TRX 文件的标识 (Magic number)
04 - 07: 0x02629021,为整个固件大小,40013857字节
08 - 11: CRC32
12 - 13: 0x0004,固件类型
14 - 15: 0x0002,固件格式版本号

16 - 19: 0x00000020,表示第一分区在整个文件中的偏移量,即从 0x20 处开始,是为第一个固件文件位置开始处
20 - 23: 0x0237A021,表示第二分区在整个文件中的偏移量
24 - 27: 0x0237A021,表示第三分区在整个文件中的偏移量,此处无效
29 - 31: 0x0237A021,表示第四分区在整个文件中的偏移量,此处无效

brcm4709_hdk_0.2.62.bin 解压后:

root@XiaoQiang:/userdisk/rom/0.2.62$ mkxqimage -x ../brcm4709_hdk_0.2.62.bin
-rw-r--r--    1 root     root      37199873 Nov 28 01:21 root.ext4.lzma
-rw-r--r--    1 root     root       2813952 Nov 28 01:21 vmlinuz.trx

两个文件合并大小为:
root@XiaoQiang:/userdisk/rom/0.2.62$ echo $((37199873+2813952))
40013825

差正好是 TRX 文件头的大小 0x20 = 32
root@XiaoQiang:/userdisk/rom/0.2.62$ echo $((0x02629021-40013825))
32























个人工具
名字空间

变换
操作
导航
工具箱