php 小米路由器_小米路由器固件修改

小米路由器官方提供的固件是自定义格式,而且刷机时要验证RSA签名,因此只刷自制固件几乎不可能。

通过对固件工具mkxqimage的分析,基本弄清楚了固件打包和解包的流程,如果采用自己的RSA私钥打包固件,然后用自己的RSA公钥替换/usr/share/xiaoqiang/public.pem,那么就能实现通过Web界面刷自制固件。

固件解包

固件工具mkxqimage完成对固件的解包,在解包前先检查Checksum是否正确,然后利用RSA公钥/usr/share/xiaoqiang/public.pem检查RSA签名,这两个步骤通过后,根据[0x0C]的固件类型,以及[0x10]、[0x14]、[0x18]和[0x1C]的4个偏移量拆分固件。固件中可能包含的内容有:

brcm4709_fac_update_nor.bin

brcm4709_nor.bin

fac_mode.bin

nvram_fac.bin

ramfsz

root.ext4.lzma

root.squashfs

upsetting.sh

upsetting_fac1.sh

upsetting_fac2.sh

upsetting_fac3.sh

vmlinuz.trx

固件格式和解包命令详见:小米路由器固件分析

固件打包

首先要创建一对RSA私钥和公钥,为了以后大家能共享自制固件,建议采用这里提供的密钥文件:private.pem public.pem

下面以稳定版0.4.85为例,介绍固件修改和打包方法。

固件解包

cd /userdisk/data

mkdir xqimage

cd xqimage

wget -O mkxqimage.tgz http://www.iptvfans.cn/miwifi/mkxqimage.tgz

tar xzf mkxqimage.tgz

wget -O brcm4709_hdr_039ef_0.4.85.bin http://bigota.miwifi.com/xiaoqiang/rom/brcm4709_hdr_039ef_0.4.85.bin

./mkxqimage -x brcm4709_hdr_039ef_0.4.85.bin

得到2个文件:

-rw-r--r-- 1 root root 16646144 May 30 08:14 brcm4709_nor.bin

-rw-r--r-- 1 root root 34853955 May 30 08:14 root.ext4.lzma

前者是FLASH全镜像,这个文件成分比较复杂,目前不建议修改它。

后者是硬盘固件镜像,先用unlzma解压,得到root.ext4

unlzma root.ext4.lzma

固件修改

用mount命令加载

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

接下来先把RSA公钥替换掉,然后开SSH

cd /mnt/usr/share/xiaoqiang

mv public.pem public.pem.orig

cp /userdisk/data/xqimage/public.pem public.pem.new

ln -s public.pem.new public.pem

sed -i 's/ssh_en=0/ssh_en=1/g' xiaoqiang-defaults.txt

把一些关掉的Web界面恢复

cd /mnt/usr/lib/lua/luci/controller/web

sed -i 's/--entry/entry/g' index.lua

如果需要,还可以对固件进行修改,这里就不再多说。

将上面的修改保存回硬盘固件镜像文件中:

cd /userdisk/data/xqimage

umount /mnt

sleep 30

# 一定要等待一会儿后再压缩镜像

固件打包

将修改后的硬盘镜像压缩:

./lzma e -a0 root.ext4 root.ext4.lzma

./mkxqimage -o brcm4709_hdr_00000_0.4.85.bin -p ./private.pem -t 5 -f brcm4709_nor.bin -f root.ext4.lzma

以上过程的命令已存储在一个脚本文件中,可直接下载:rom_modify.sh

升级准备

公钥替换

在升级上一步生成的自制固件前,还需要对当前路由器的RSA公钥进行替换,具体方法如下:

mount -o rw,remount /

cd /usr/share/xiaoqiang

mv public.pem public.pem.orig

cp /userdisk/data/xqimage/public.pem public.pem.new

ln -s public.pem.new public.pem

mount -o ro,remount /

也可以直接下载脚本文件:rsa_key.sh

自制固件测试

用下面的命令测试:

cd /userdisk/data/xqimage

mkdir test

cd test

mkxqimage -x ../brcm4709_hdr_00000_0.4.85.bin

ls -l

如果解压固件过程中没有出现错误信息,最后列表出2个文件,说明自制固件打包没问题。

-rw-r--r-- 1 root root 16646144 Jun 1 12:00 brcm4709_nor.bin

-rw-r--r-- 1 root root 33188560 Jun 1 12:00 root.ext4.lzma

注意:brcm4709_nor.bin文件的大小一定是16646144。

验证root.ext4.lzma是否正确:

cd /userdisk/data/xqimage/test

unlzma root.ext4.lzma

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

ls -l /mnt/usr/share/xiaoqiang/public.pem*

grep ssh_en /mnt/usr/share/xiaoqiang/xiaoqiang-defaults.txt

umount /mnt

上面命令执行完毕后,应该能看到一些信息(时间信息会有差别):

lrwxrwxrwx 1 root root 14 Jun 1 11:30 /mnt/usr/share/xiaoqiang/public.pem -> public.pem.new

-rw-r--r-- 1 root root 451 Jun 1 11:30 /mnt/usr/share/xiaoqiang/public.pem.new

-rwxr-xr-x 1 root root 451 May 27 11:33 /mnt/usr/share/xiaoqiang/public.pem.orig

ssh_en=1

备份自制固件

在计算机资源管理器中输入: \\192.168.31.1\XiaoMi\xqimage ,目录列表中能看到brcm4709_hdr_00000_0.4.85,将该自制固件复制到计算机上。

升级自制固件

登录小米路由器管理页面,在“路由设置”-“高级功能”-“路由器手动升级”界面中选中brcm4709_hdr_00000_0.4.85,点“上传并安装固件”按钮,等待数分钟。

安装完固件后,SSH有可能没有启动,这是因为升级固件时将nvram项ssh_en清为0,而第一次启动时通过defaults设置将ssh_en设置为1的动作在dropbear启动之后。只需要重启一下路由器,就能够SSH登录了。

特别提醒

由于替换了路由器中的RSA公钥,路由器不能升级官方固件,如果想恢复成官方固件,只需换回原来的公钥,方法如下:

mount -o rw,remount /

cd /usr/share/xiaoqiang

cp public.pem.orig public.pem

mount -o ro,remount /

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值