小米路由器固件分析

固件格式分析

以brcm4709_hdr_039ef_0.4.85固件为例

48 44 52 30 63 D4 11 03 FE 3D 1A FD 05 00 02 00
20 00 00 00 20 00 FE 00 00 00 00 00 00 00 00 00
FF 04 00 EA 14 F0 9F E5 14 F0 9F E5 14 F0 9F E5

第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字节开始是固件的正式内容开始。

以brcm4709_all_2e59c_0.5.55固件为例

48 44 52 30 91 9C AE 02 30 3F BB F5 03 00 02 00
20 00 00 00 91 4C 09 02 91 EC 82 02 91 EC 82 02
5D 00 00 01 00 00 00 00 08 00 00 00 00 00 00 6F

第1~4字节:ASCII字符串“HDR0”,作为固件的标识;

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

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

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

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

第17~20字节:0x00000020,表示固件第一部分在整个固件中的偏移量,0.5.55固件的第一部分是vmlinuz.trx,也就是Flash中的内核;

第21~24字节:0x02094C91,表示固件第二部分在整个固件中的偏移量,0.5.55固件的第二部分是root.squashfs,也就是Flash中squashfs MTD分区;

第25~28字节:0x0282EC91,表示固件第三部分在整个固件中的偏移量,0.5.55固件的第三部分是root.ext4.lzma,也就是硬盘中128M固件的压缩包;

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

固件的最后16+256字节是固件的RSA签名区,其中前16字节为头部,内容为:

00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00

小米官方在打包固件时用RSA私钥计算出固件的RSA签名,小米路由器下载固件后用RSA公钥来验证RSA签名,有效地防止固件被篡改。这个过程由小米路由器的实用程序mkxqimage完成。

mkxqimage

mkxqimage是小米路由器固件打包和解包工具

Usage:
mkxqimg [-o outfile] [-p private_key] [-f file] [-f file [-f file [-f file ]]]
        [-x file]
        [-I]

mkxqimage解包命令格式:

 mkxqimage -x 固件文件名

如:

mkxqimage -x brcm4709_all_2e59c_0.5.55.bin

得到3个文件:

34163825 root.ext4.lzma
 7970816 root.squashfs
 2863104 vmlinuz.trx

root.ext4.lzma解压命令:

unlzma root.ext4.lzma

得到root.ext4文件,大小刚好128MB,这是ext4格式分区导出文件,可以用mount -o loop挂载:

mount -o loop -t ext4 root.ext4 /mnt


本文章由作者:佐须之男 整理编辑,原文地址: 小米路由器固件分析
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐