点击展开更新日志

2024

11-19

完成了这篇文章!

11-27

更新了一个标题中的错别字,是哪个呢?

nexttime

会有些什么呢(❁´◡`❁)

参考资料:

结合了 HK 佬 这两篇笔记,刷如 hanwckf 佬的 U-Boot 和 ImmortalWrt。

源起

小米 AX3000T 去年就买了,买之前就想过刷 OP,只是毕竟只有一个设备,出问题了不好处理,所以一直到今天才真正刷上 OP(。・ω・。)。

过程记录

整个过程如下:

  1. 降级系统至旧版本(版本号 1.0.47,该版本存在漏洞可开启 SSH)
  2. 获取 stok 值,执行命令请求开启 SSH 访问权限
  3. 登录 SSH ,备份原始分区
  4. 刷入 U-Boot
  5. 刷入 ImmortalWrt

安装降级固件

  1. 下载降级固件:(暂无链接,请到上面 HK 佬的笔记里下载>﹏<)

  2. 下载 小米路由器修复工具

  3. 允许【修复工具】-选择降级固件(版本 1.0.47)-按修复工具的提示逐步操作:断开路由器电源,用网线将路由器网口和电脑网口连接。然后用牙签或卡针顶住路由器上的 reset 按键,保持不松开。此时再插上电源,约莫 8 秒左右直到路由器指示灯开始快速闪烁,即可松开 reset 键。修复工具会接收到路由器的请求开始恢复固件。

    特别提醒:

    执行断电之前,先关闭 Windows defineder 防火墙:【控制面板】-【系统和安全】-【Windows Definder 防火墙】,转笔专用网络和公用网络防火墙。不然会收不到刷机请求!

    稍等一会儿恢复完成后,即可重新给路由器上电,进入系统后查看已经降级成功。

启动 SSH

智能临时获取,重启失效,知悉。

登录路由器 Web 管理后台(默认为 http://192.168.31.1 ),获取 stok 值:浏览器地址栏 stok 后面那一串字符串。Ctrl + H 替换下面五条命令中 <STOK> 的值,然后在命令行工具执行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 开启 SSH 配置
curl -X POST "http://192.168.31.1/cgi-bin/luci/;stok=<STOCK>/api/misystem/arn_switch" -d "open=1&model=1&level=%0Anvram%20set%20ssh_en%3D1%0A"

# 提交配置
curl -X POST "http://192.168.31.1/cgi-bin/luci/;stok=<STOCK>/api/misystem/arn_switch" -d "open=1&model=1&level=%0Anvram%20commit%0A"

# 设置 dropbear SSH 为 debug
curl -X POST "http://192.168.31.1/cgi-bin/luci/;stok=<STOCK>/api/misystem/arn_switch" -d "open=1&model=1&level=%0Ased%20-i%20's%2Fchannel%3D.*%2Fchannel%3D%22debug%22%2Fg'%20%2Fetc%2Finit.d%2Fdropbear%0A"

# 启动 dropbear SSH
curl -X POST "http://192.168.31.1/cgi-bin/luci/;stok=<STOCK>/api/misystem/arn_switch" -d "open=1&model=1&level=%0A%2Fetc%2Finit.d%2Fdropbear%20start%0A"

# 设置 root 密码为空
curl -X POST "http://192.168.31.1/cgi-bin/luci/;stok=<STOCK>/api/misystem/arn_switch" -d "open=1&model=1&level=%0Apasswd%20-d%20root%0A"

以上命令执行成功,则会响应 {“code”: 0} ,如为其他则请检查 stok 或 IP 地址是否正确替换了。

HK 佬整合的 shell 脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash

if [ "$1" = "" ]; then
echo "Usage: $0 [stok]"
echo "e.g. $0 84f8bce46164e9e0296ad38086cd8472"
echo "登录Web后台后,从浏览器地址栏复制 stok 字符串"
exit 1
fi

curl -X POST "http://192.168.31.1/cgi-bin/luci/;stok=${1}/api/misystem/arn_switch" -d "open=1&model=1&level=%0Anvram%20set%20ssh_en%3D1%0A"
sleep 1
curl -X POST "http://192.168.31.1/cgi-bin/luci/;stok=${1}/api/misystem/arn_switch" -d "open=1&model=1&level=%0Anvram%20commit%0A"
sleep 1
curl -X POST "http://192.168.31.1/cgi-bin/luci/;stok=${1}/api/misystem/arn_switch" -d "open=1&model=1&level=%0Ased%20-i%20's%2Fchannel%3D.*%2Fchannel%3D%22debug%22%2Fg'%20%2Fetc%2Finit.d%2Fdropbear%0A"
sleep 1
curl -X POST "http://192.168.31.1/cgi-bin/luci/;stok=${1}/api/misystem/arn_switch" -d "open=1&model=1&level=%0A%2Fetc%2Finit.d%2Fdropbear%20start%0A"
sleep 1
curl -X POST "http://192.168.31.1/cgi-bin/luci/;stok=${1}/api/misystem/arn_switch" -d "open=1&model=1&level=%0Apasswd%20-d%20root%0A"

这样的佬谁不爱啊(❁´◡`❁)

SSH 登录及备份

1
ssh [email protected]

一般第一次连接会报错:Unable to negotiate with 192.168.31.1 port 22: no matching hsot key type found. Their offer: ssh-rsa。这是加密算法不匹配导致,需要配置启用 ssh-rsa 。修改 ~/.ssh/config ,添加内容如下:

1
2
3
4
5
Host ax3000t
HostName 192.168.31.1
Port 22
User root
HostKeyAlgorithms +ssh-rsa

然后使用命令 ssh ax3000t 连接即可。

或者不配置上述文件使用命令 ssh -oHostKeyAlgorithms=+ssh-rsa [email protected]

备份原厂分区信息

1
2
3
4
5
6
7
8
mkdir /tmp/bak
nanddump -f /tmp/bak/BL2.bin /dev/mtd1
nanddump -f /tmp/bak/Nvram.bin /dev/mtd2
nanddump -f /tmp/bak/Bdata.bin /dev/mtd3
nanddump -f /tmp/bak/Factory.bin /dev/mtd4
nanddump -f /tmp/bak/FIP.bin /dev/mtd5
nanddump -f /tmp/bak/ubi.bin /dev/mtd8
nanddump -f /tmp/bak/KF.bin /dev/mtd12

退出 SSH 执行 备份到本地:

1
scp -O -r ax3000t:/tmp/bak/ .

其中 -O 参数为设置 scp 传输模式为传统方式,不然会报错。报错原因是 openssh 9.0 及之后版本,scp 命令默认传输使用的是 SFTP 协议,而路由器是不支持的。

U-Boot 和固件下载

因为原项目的 ImmortalWrt 并没有提供 Release,而 U-Boot 的 20240123 release 中缺少了小米 AX3000T multi-layout 的版本,HK 佬自编译发布的固件和 U-Boot:

https://github.com/hkint/xiaomi-ax3000t-immortalwrt-hanwckf-firmware-build/releases

  • U-Boot:如果不是 2024 年 08 月之后出厂的新版本,就下载不带 an8855 的版本,不然会失败进不去(っ °Д °;)っ 问就是经验。
    mt7981_ax3000t_an8855-fip-fixed-parts-multi-layout.bin
  • ImmortalWrt:同上,新版本就下载带 an8855 版本的。下载不带 stock sysupgrade 版本的
    immortalwrt-mediatek-mt7981-xiaomi_mi-router-ax3000t-squashfs-sysupgrade.bin

懒,既然大佬编译好了我就不客气了

只是 Wifi 温度看不到,不知道是不是哪里操作不对,算了,能用就行。

刷入 U-Boot 和固件

上传 U-Boot

1
scp -O mt7981_ax3000t-fip-fixed-parts-multi-layout.bin ax3000t:/tmp

SSH 登录路由器,刷入:

1
mtd write /tmp/mt7981_ax3000t-fip-fixed-parts-multi-layout.bin FIP

然后断开电源,用牙签或卡针捅住 reset 键,然后接通电源,指示灯变化后(变蓝)松开 reset 键。用网线将电脑和路由器连接起来,电脑网卡配置静态 IP:192.168.1.100 ,网关: 192.168.1.1

然后即可在浏览器中访问 http://192.168.1.1 进入 U-Boot 的网页刷机界面,此处抛弃小米原有的 stock layout,直接选用 immortalwrt-112m layout,然后上传 sysupgrade 固件确认升级即可。可能会在升级界面一直转,只要提示升级成功重启中就可以等几分钟手动断电重启。

路由器刷入固件自动重启后,网关 IP 默认为:192.168.31.1 ,账号 root,密码为空