查看小米路由固件格式的源代码
←
小米路由固件格式
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
== 概述 == 路由固件的格式,基本是基于 openwrt 的 trx 这个简单的二进制文件格式 本页参考了 carabob001 在这个页面对 [http://www.iptvfans.cn/wiki/index.php/%E5%B0%8F%E7%B1%B3%E8%B7%AF%E7%94%B1%E5%99%A8%E5%9B%BA%E4%BB%B6%E5%88%86%E6%9E%90 小米路由固件的分析] 节约了不少时间,在此表示感谢! <br><br> == 小米格式 == 小米自己改了一个打包工具 mkxqimage,要知道其固件格式,需要分析一下这个工具 0.5.56 版固件下的工具,先看一下内部字符串: <source lang=bash> $ 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 </source> 以 [http://bigota.miwifi.com/xiaoqiang/rom/brcm4709_hdk_0.2.62.bin 0.2.62] 固件为例: <source lang=bash> 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| </source> <pre> 00 - 03: 0x30524448,为 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,表示第四分区在整个文件中的偏移量,此处无效 </pre> brcm4709_hdk_0.2.62.bin 解压后: <source lang=bash> 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 </source> 0.2.62 整个文件的大小为: <source lang=bash> root@XiaoQiang:/userdisk/rom/0.2.62$ ls -l brcm4709_hdk_0.2.62.bin -rw------- 1 comcat comcat 40014129 6月 4 12:13 ../brcm4709_hdk_0.2.62.bin # 与实际整个固件大小的差值为 272 = 16 + 256: root@XiaoQiang:/userdisk/rom/0.2.62$ echo $((40014129-40013857)) 272 </source> 获取这额外的 272 字节: <source lang=bash> root@XiaoQiang:/userdisk/rom/0.2.62$ dd if=brcm4709_hdk_0.2.62.bin of=rsa-sig.bin bs=1 skip=40013857 $ hexdump -C rsa-sig.bin 00000000 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000010 97 ca 7b 87 29 c2 b6 e4 cd 8d 19 6d 1c d8 71 ed |..{.)......m..q.| 00000020 6a 0d 98 ac 2e 05 8d 1a 32 a2 10 c9 31 45 08 50 |j.......2...1E.P| 00000030 c1 5d 59 e3 68 25 32 6c da 87 67 ee 68 be 06 58 |.]Y.h%2l..g.h..X| 00000040 4e 41 eb 34 d7 69 b5 57 2b 4a 5d 23 78 3b d4 c5 |NA.4.i.W+J]#x;..| 00000050 d5 34 47 b1 f0 b6 d8 4e df 0f 10 d1 69 5a 60 03 |.4G....N....iZ`.| 00000060 93 18 e0 3e f4 32 5c d7 2d 75 68 e7 b4 17 a1 6d |...>.2\.-uh....m| 00000070 38 8a 38 e7 2d ae ca ae f8 ab 07 be 46 2d 4e 58 |8.8.-.......F-NX| 00000080 cc 8e ff e1 a0 2a 6e 0a 97 8f e8 a7 b3 b5 29 c5 |.....*n.......).| 00000090 ea 20 2e ea c4 ab 05 5a ca 37 98 ea 1b 67 34 ab |. .....Z.7...g4.| 000000a0 75 ef d4 36 00 52 6d 30 2b e9 b6 27 81 7b 57 28 |u..6.Rm0+..'.{W(| 000000b0 84 89 7a 8e 70 08 93 ab 09 51 c9 73 79 4b 6d 99 |..z.p....Q.syKm.| 000000c0 a2 cd 64 84 d9 c8 a6 36 5e 63 fd 06 32 fe f8 36 |..d....6^c..2..6| 000000d0 46 6a 76 1e 4e b2 67 ea db 34 24 60 21 67 5a c7 |Fjv.N.g..4$`!gZ.| 000000e0 72 ae 53 c5 8d 34 40 19 04 08 12 e2 e3 7c bf 99 |r.S..4@......|..| 000000f0 07 ea d0 fe c5 4b 10 cf 73 0c 93 29 dc c9 ae b8 |.....K..s..)....| 00000100 1b df 8c 70 98 34 70 42 c8 88 34 66 55 02 56 58 |...p.4pB..4fU.VX| </source> 此应为 RSA 签名所在 可以看到,本质上小米的这个固件格式实际还是 TRX 文件格式,可以手工解压的: <source lang=bash> comcat@jackslab:/work/openwrt/xiaomi/rom/0.2.62$ dd if=../brcm4709_hdk_0.2.62.bin of=p1 bs=1 count=$((0x0237A021-0x20)) skip=32 记录了37199873+0 的读入 记录了37199873+0 的写出 37199873字节(37 MB)已复制,56.4376 秒,659 kB/秒 comcat@jackslab:/work/openwrt/xiaomi/rom/0.2.62$ dd if=../brcm4709_hdk_0.2.62.bin of=p2 bs=1 count=$((0x02629021-0x0237A021)) skip=$((0x0237A021)) 记录了2813952+0 的读入 记录了2813952+0 的写出 2813952字节(2.8 MB)已复制,4.22887 秒,665 kB/秒 # 解出的 p1 和 p2 与使用 mkxqimage 解压后的文件一致: comcat@jackslab:/work/openwrt/xiaomi/rom/0.2.62$ md5sum p1 aad4db39b8b07f92af7332d4ff844da4 p1 comcat@jackslab:/work/openwrt/xiaomi/rom/0.2.62$ md5sum root.ext4.lzma aad4db39b8b07f92af7332d4ff844da4 root.ext4.lzma comcat@jackslab:/work/openwrt/xiaomi/rom/0.2.62$ md5sum vmlinuz.trx 662539869d4144ec9af04c4111d71468 vmlinuz.trx comcat@jackslab:/work/openwrt/xiaomi/rom/0.2.62$ md5sum p2 662539869d4144ec9af04c4111d71468 p2 </source> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br>
返回到
小米路由固件格式
。
个人工具
3.143.223.217
该IP地址的讨论
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面