最近刚把家里的主路由器换成了红米 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
Comments | 2 条评论 直接下去评论
可以在 padavan 的固件加一个可以用 v2ray 的功能吗?恩山论坛的那个只能用 SS
我直接拆的 flash|´・ω・)ノ
编程器刷的
我还有个小米路由器 3,硬改的 spi