最近刚把家里的主路由器换成了红米 AX5,不得不说新团队做的路由器确实比老团队好用不少,我也因此成功用上了 WiFi 6.

期间换下来的小米路由器 3C 因为信号稀烂,网速慢 balabala,反正就是垃圾一个。

方案是跟小米路由器青春版相同的 MT7628AN 。性能肯定不指望了,不过刷好 padavan 以后应该可以给酷播云当 AP 用,或者给我的 Switch 当加速器用也行。

准备工作

相关路由器

首先需要准备一个能联网的路由器作为上级路由(因为要在路由器上下载文件),且因为必须要在路由模式下才能破解(中继模式不行),所以这里我使用老早就刷了 padavan 的小米路由器青春版作为上级路由,其中青春版接在 LAN 口,3C 接在 WAN 口(小孩开大车(大雾

PS:图中为错误示范,请注意

出了个意外,那根白色的供电线接触不良差点出事,现已换线。

系统

准备一个 Linux 发行版环境(推荐物理机,虚拟机也行,WSL 听说也可以),多数建议 Ubuntu 但因为我使用的是 Manjaro,这里只提供 Arch 系的教程。

开始

路由器

首先先在路由器上这台,3C 上将固件降级到 2.9.217 开发版或者 2.14.45 稳定版(低于这个版本的刷到这个版本,好像不用刷也行),用于利用漏洞开出 telnet 。

然后改为路由模式(中继模式开不出 telnet)

我直接重置了用户数据,避免出现各种奇奇怪怪的 bug 。

最后将电脑连接到需要刷机的小米路由器上。

Linux

安装 Python 3(有些教程里是说需要 Python 3.6,实测我现在用的 3.9.1 也可以)

pacman -S python # Arch 系中默认为 python3

然后克隆 OpenWRTInvasion 项目并安装依赖(如果经常编译的话可能已经安装了所需要的依赖)

git clone https://github.com/acecilia/OpenWRTInvasion
cd OpenWRTInvasion
pip3 install -r requirements.txt

依赖安装完毕后运行

python3 remote_command_execution_vulnerability.py

填入路由器管理后台地址,小米路由器默认的后台地址为 192.168.31.1,可以直接回车默认。

接下来则是输入 stok 值,此时进入小米路由器后台,登录后这个值可以在地址栏找到。

输入完毕后回车确认,如果能够连接一般稍等片刻提示你输入账号密码,默认账号:root,密码:root 。

一般此时就可以通过 telnet 访问路由器的远程终端了,但如果提示 Connection refused. 或者为 code:1629 请往下接着看。

(放心吧这里我也被坑了一天)

由于国内网络环境的原因,GitHub 的 Raw 是被和谐掉的,也就没有办法通过路由器来下载所需要的文件。

(当然你可以选择在上级路由挂梯子来解决,但我的不知道为什么挂梯子没有效果)

但由于所需要的文件也仅仅只是保存在项目仓库中,所以在本地启动一个 Web 服务器也可以达到相同的效果。

看到这里你是不是想把 NGINX 拿出来现场开一个 Web 服务器了?这地方用 NGINX 太麻烦了,没必要。只需要通过 Python 自带的 SimpleHTTPServer 在当前目录现场开一个 Web 服务器就行:

#Python 2
python -m SimpleHTTPServer 8080

#Python 3
python3 -m http.server 8080

注:Python 2 与 Python 3 的启动方式并不一样,请注意版本区别。

然后在仓库目录中找到 script.sh 修改第 27 行和第 54 行代码:

# 第 27 行
curl -L "https://(device IP):8080/script_tools/busybox-mipsel" --insecure --output busybox
# 第 54 行
curl -L "https://(device IP):8080/script_tools/dropbearStaticMipsel.tar.bz2" --output dropbear.tar.bz2

其中 device IP 为你所使用的电脑的局域网 IP 地址,如果开启 Web 服务器时端口被占用可以更换端口,只需要在相对应的位置修改即可。

刷机

现在通过命令行进入 Telnet:

telnet 192.168.31.1

输入账号:root,密码:root

不习惯 Telnet 也可以使用 SSH

ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -c 3des-cbc -o UserKnownHostsFile=/dev/null root@192.168.31.1

密码:root

输出内容为这些说明成功进入:

成功进入路由器命令行后首先需要备份 EEPROM,稍后会用到,如有必要请一定要保存好(DLC):

首先查看路由器的分区:

cat /proc/mtd

然后找到 Fatcory 将该分区备份为 eeprom.bin(我发现备份错了,发现的时候 MAC 和 SN 已经没了,悲)(现在正在苦逼得恢复 MAC 地址,反正也不准备刷回原版了)

dd if=/dev/mtd3 of=/tmp/eeprom.bin

mtd3 并不一定是 EEPROM 分区,具体请以路由器为准

然后通过 WinSCP 或 FileZilla 等支持 FTP 协议的软件将 eeprom.bin 取出(位于 tmp 目录下,文件较多请耐心寻找):

然后回到路由器的终端,下载 breed:

cd /tmp
wget --no-check-certificate https://breed.hackpascal.net/breed-mt7688-reset38.bin
mv breed-mt7688-reset38.bin breed.bin

如果 wget 无法下载,也可以在你当前的电脑手动下载,然后将文件名更名为 breed.bin 后通过 WinSCP 或 FileZilla 上传到 tmp 目录下。

确认 EEPROM 备份成功后,刷入 breed:

mtd write breed.bin Bootloader

确认 breed 刷入成功后拔下路由器电源,并将路由器网线从 WAN 口接到 LAN 口,另一端接到电脑上,按住 Reset 按钮(用牙签、卡针等尖细工具捅写有 Reset 的孔)后通电,按住 5-10 秒后松开,进入 breed,此时路由器指示灯不亮。

(Linux 环境中出了点意外,转为 Windows 环境)

打开浏览器输入 192.168.1.1 进入 breed 控制台:

点击固件更新,勾选 EEPROM 后选择先前备份的 eeprom.bin 上传并确认更新。

此时不需要重启,回到 breed 控制台,勾选固件,选择 MI-3C_3.4.3.9-099.trx ,上传并确认更新,中途不能断电不能关机,刷入完成后会重启路由器,此时查看路由器指示灯,若为蓝色说明开机成功。

使用

在浏览器输入 192.168.2.1 ,输入用户名和密码。

该固件默认用户名:admin

默认密码:admin

默认 SSID:MI-3C_0000

默认 Wi-Fi 密码:1234567890

进入系统管理 --> 配置管理,分别点击 路由器设置 (NVRAM)恢复出厂设置 的重置按钮和路由器内部存储 (/etc/storage)恢复出厂设置 的重置按钮,进行双清:

最后请享用这个固件(信号差是硬伤,没得救)。

下载

由于参考资料中的固件版本较旧,我自己编译了一版固件,可以正常使用,该固件源码来自 hanwckf/rt-n56u,与 hiboy 等维护者的固件有所区别,同时该固件是以默认配置文件编译,功能较少,如有需求可结合该项目在 /rt-n56u/trunk/configs/templates/MI-3C.config 中修改后自行编译。

蓝奏云(包含我个人编译的固件、原版 2.9.217 开发版固件、原版 2.14.45 稳定版固件:

https://liaronce.lanzous.com/b00o7v8qh

密码:1a51

目前已经发现的问题

1 、由于没有为 3C 针对性的配置,路由器在后台关机后指示灯依然为蓝色,需手动断电

后续

2021-01-17 22:16:手动输入路由器背后的 MAC 地址后能够正常上网,有线连接和无线连接均正常,但 SN 是真找不回来了,算了反正不准备用回原版固件了(原版固件太垃圾了)

参考资料

https://www.right.com.cn/forum/thread-4017759-1-1.html

https://www.right.com.cn/forum/thread-4036056-1-1.html

https://github.com/acecilia/OpenWRTInvasion/blob/master/README.md

https://github.com/hanwckf/rt-n56u/blob/master/README.md

https://yuos.top/index.php/archives/208/