小米路由固件格式

来自Jack's Lab
(版本间的差异)
跳转到: 导航, 搜索
(小米格式)
第51行: 第51行:
  
 
<source lang=bash>
 
<source lang=bash>
$ hexdump -C brcm4709_hdk_0.2.62.bin | head -n 3
+
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 ......|
 
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.|
 
00000010  20 00 00 00 21 a0 37 02  21 a0 37 02 21 a0 37 02  | ...!.7.!.7.!.7.|

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

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
......
upsetting.sh
brcm4709_nor.bin
root.ext4.lzma
upsetting_fac1.sh
fac_mode.bin
upsetting_fac2.sh
fac_mode.bin
upsetting_fac3.sh
fac_mode.bin
root.ext4.lzma
root.squashfs
vmlinuz.trx
upsetting.sh
brcm4709_fac_update_nor.bin
nvram_fac.bin
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|
第1~4字节:ASCII字符串“HDR0”,作为固件的标识;

第5~8字节:4字节整型数0x0311D464,表示固件的大小:51500132字节;

第9~12字节:固件的检查和;

第13~14字节:0x0005,表示固件中包含哪些部分;

第15~16字节:0x0002,表示固件格式版本号;

第17~20字节:0x00000020,表示固件第一部分在整个固件中的偏移量,0.4.85固件的第一部分是brcm4709_nor.bin,也就是Flash中除0xfe0000-0xff0000的board_data外的全镜像;

第21~24字节:0x00FE0020,表示固件第二部分在整个固件中的偏移量,0.4.85固件的第二部分是root.ext4.lzma,也就是硬盘中128M固件的压缩包;

第33字节开始是固件的正式内容开始























个人工具
名字空间

变换
操作
导航
工具箱