小米R3G通过Breed刷入OpenWrt固件实现校园网自动认证
前言:新学期伊始,办了校园网的有线套餐,于是有了购入一台路由器用来将网络WiFi共享的需求,且校园网不定时会将用户自动踢下线,需要重新认证,我校校园网认证原理为发送一个HTTP-POST请求到认证服务器,可使用wget
或curl
构造一个POST请求实现自动认证,编写成一个可自动判断网络认证状态的shell脚本上传至路由器定时检测并自动认证,故将选择投向了可刷入第三方固件的路由器,最终在合理价位宿舍用的路由器里挑中了小米R3G
R3G参数介绍及OpenWrt信息
- 型号:Xiaomi Mi Router 3G
- 处理器:MediaTek MT7621 2 core 默认频率880MHz
- DRAM内存:256MB DDR3
- Flash闪存:128MB SLC Nand Flash
- WAN/LAN:WAN x1 LAN x2 1Gbps
- USB:3.0接口 x1
- 无线芯片: MT7603/MT7612 2.4GHz/5GHz 802.11an+ac
- 固件版本 Steven build from Lede 2022.06.05 @ OpenWrt R22.5.5 / LuCI Master (git-22.155.62538-041a223)
- 内核版本 5.4.195
需要注意的是,小米R3G共有两个型号,另一个型号为运营商定制版的R3Gv2,内存缩水至128M,闪存更是只有16M,且砍掉了USB接口,不推荐购入
小米R3G拼多多二手参考价50元(2022-10)。
由于本文发布之前,我已刷好OpenWrt,故部分图文不符,若有疑惑,请以文字为准,图片作参考
以下所有操作在使用网线直连下最优,不推荐WiFi情况下进行操作
Breed刷入流程
Breed
是一款由国内个人hackpascal
开发的闭源Bootloader
,也被统称为“不死鸟”。
它允许人们使用易操作的Web页面进行刷固件,其“不死”的原理为部分固件自带Bootloader,通过Breed刷入固件时会自动去除固件自带的Bootloader,防止Breed被覆盖,因此保证了Breed的“不死”。 —— hackpascal
获取SSH权限
为了通过ssh刷写路由器的Bootloader为Breed,需要先将小米路由器的ROM更新为开发版(稳定版不支持)
开发版ROM更新
前往 MiWiFi:@ROM 找到路由器对应的开发版ROM
开发版ROM刷入有两种方式,一般推荐方式1,当方式1不可用时,可尝试方式2
- 方式1:通过小米路由器后台在线升级,地址一般为
192.168.31.1
,进入常用设置,点击系统状态,在升级检测栏中点击手动升级,选择 刚刚从 MiWiFi:@ROM 下载的固件,等待路由器重启即可。
- 方式2:将从 MiWiFi:@ROM 下载的固件重命名为miwifi.bin,放入分区格式为FAT32的U盘根目录(推荐先格式化U盘,格式必须为FAT/FAT32,避免异常出错),断开小米路由器的电源,将U盘插入USB接口,用卡针按住reset按钮之后重新接入电源,指示灯变为黄色闪烁状态即可松开reset按钮,刷机完成后路由器会自动重启(指示灯由黄灯常亮变为蓝灯常亮)。
MiWiFi App 绑定小米路由器,获取root密码
前提:需要一个可用的小米账号
- 可从手机自带的应用商店下载MiWiFi,也可从 MiWiFi:@手机客户端 下载。
- 在MiWiFi中登录自己的小米账号,手机连接至小米路由器的WIFI网络,扫描绑定小米路由器
- 绑定成功后,在 MiWiFi:@SSH 登录路由器所绑定的小米账号
- 选择账号所绑定的相应路由器,下载工具包,并记下root密码
刷入工具包
以下为官网所述的使用方法:
- 请将下载的工具包bin文件复制到U盘(FAT/FAT32格式)的根目录下,保证文件名为miwifi_ssh.bin;
- 断开小米路由器的电源,将U盘插入USB接口;
- 按住reset按钮之后重新接入电源,指示灯变为黄色闪烁状态即可松开reset键;
- 等待3-5秒后安装完成之后,小米路由器会自动重启,之后您就可以尽情折腾啦 :)
自此,小米路由器的SSH权限开启成功。
Windows系统下,通过WinScp和Xshell或PuTTY刷入Breed
以下仅提供软件的官方地址
Martin Přikryl:@WinScp
NETSARANG:@Xshell
Simon Tatham:@PuTTY
提示:刷机之前,记得备份
提示:刷机之前,记得备份
提示:刷机之前,记得备份
由于本文发布之前,我已刷好OpenWrt,故部分图文不符,若有疑惑,请以文字为准,图片作参考
使用Xshell登录系统,并进行备份
在Xshell的命令行界面输入ssh 192.168.31.1
,用户名为root
,密码为之前在 MiWiFi:@SSH 所记下的root密码,跳出提示信息选择“是”即可
1 | 查看分区命令:cat /proc/mtd |
将U盘(FAT/FAT32格式)插入路由器,Xshell中输入cd /
,再输入ls -a
(查看有无extdisks,一般可略过此步骤),接着cd extdisks
,再输入一遍ls -a
即可查看到自己的U盘路径
通过以上命令查询可知我的U盘路径为sda1
,以下为使用我的U盘路径的备份命令(请修改成自己的U盘路径)
1 | dd if=/dev/mtd0 of=/extdisks/sda1/ALL.bin |
备份至mtd14时可能会出现错误,该分区备份是否成功可以忽略
- 恢复官方固件方法请前往恩山论坛搜索,以上仅作备份处理,请保存好备份文件
使用WinScp将Breed上传至路由器
Breed的官方下载地址 hackpascal:@Breed
例:搜索breed-mt7621-xiaomi-r3g.bin即为小米R3G专用Breed
提示:Breed v1.2无法给小米R3G直刷底包,其它路由器不知
故推荐使用Breed v1.1,在 hackpascal:@Breed 中往下拉至底部,进入r1338文件夹,搜索下载breed-mt7621-xiaomi-r3g.bin即可
新建会话登录路由器,文件协议选择SCP
,用户名密码皆如上(不再赘述),将Breed上传至路由器的/tmp目录下
使用Xshell刷入Breed
WinScp上传Breed成功后,即可通过Xshell刷入Breed
请确认自己的Breed文件名
命令如下:mtd -r write /tmp/breed-mt7621-xiaomi-r3g.bin Bootloader
写入完成会自动重启
通过Breed刷入OpenWrt
首先需要进入Breed,先拔掉路由器的电源,使用卡针按住reset按钮(约3秒左右),再给路由器通电,等到路由器指示灯变为蓝色闪烁状态时即可松开reset按钮
此时在浏览器中访问192.168.1.1,就可以进入Breed的Web页面控制台,如无法访问,请排查以下两个可能故障
- 检查浏览器是否对192.168.1.1建立了HTTPS安全连接,如是,请尝试访问http://192.168.1.1
- 检查有线网卡是否自动获得了IP,若无,请自行固定IP,IP地址为192.168.1.100,子网掩码为255.255.255.0,默认网关为192.168.1.1
刷入第三方固件
以下使用恩山论坛坛友coolcucumber
所作的2022-06-05(Breed直刷版)OpenWrt固件作简单演示
coolcucumber:@OpenWrt
- 刷入前,请先备份
EEPROM
和编程器固件
- 恢复出厂设置
- 在环境变量编辑中加入两个变量,字段
xiaomi.r3g.bootfw
的值为2
,字段autoboot.command
的值为boot flash 0x600000
- 点击固件更新,闪存布局选择
小米路由器 3G 固件 2
,固件选择直刷固件,勾选自动重启,上传即可
重启之后,该固件的OpenWrt后台登录地址为192.168.1.31
,密码为password
固件功能介绍:
IPv6支持 带宽监控 TTYD 计划任务 磁盘管理 定时重启 FileTransfer 酸酸的乳饮料
动态DNS 网络唤醒 KMS服务器 frp内网穿透 Zerotier 硬盘休眠 网络共享(SMB)
Transmission 阿里云WebDav TurboAcc网络加速 iPerf3 USB3.0支持
JerryKuKu’sArgon主题&个性化设置
OpenWrt校园网自动认证
提示:方法仅适合可构造永久可用的 cURL
校园网登陆系统
获取校园网登录网络的 HTTP-POST
请求
- 原理:我校校园网web认证是通过发送一个HTTP-POST请求到认证服务器实现认证
- 满足以上原理,即可使用以下的实现方法完成自动认证
在任意可使用Web开发工具的浏览器中打开校园网登录网址,以下使用 基于 Chromium 的 Microsoft Edge
演示
在页面中按下 F12
或者右键点击检查打开开发者工具,切换到 网络
,正常输入用户账密,点击登录
登录过程中,开发者工具会自动记录下所出现的HTTP请求,我们需要在这些请求中找到登录所使用的请求,一般来说,带有 login
字段的请求即为登录网络的 HTTP-POST
请求
找到登录请求后,对该请求右键,复制为cURL(bash)
将复制的cURL粘贴到任意文本编辑器,原始cURL如下:
1 | curl 'http://gas.gwifi.com.cn/gportal/web/authLogin?round=971' \ |
修改 cURL
便于永久可用
首先将末尾的 --compressed
、 --insecure
去除
另外可自行分析尝试可去除的部分,以下为我最终构造的 cURL
记得将原始cURL中的单引号 '
改为双引号 "
1 | curl -X POST "http://gas.gwifi.com.cn/gportal/web/authLogin?round=301" -H "X-Requested-With: XMLHttpRequest" --data-raw "data=KzAgDStuyf5ZA%2BEZS4a5nq56Yo50jiQ%2Bi%2Bp%2BO99fnBFhMys6ozkb4I%2BHt1Ojo7y6BprXA0GkLNmt3XW8tQdIYVdfxKUagxBkqgOxSNLmIj7cBeOrh%2B%2FbLFUl2VmwNX261eo1fF4do4FZvQVPs9rlprlLmTiMAM5I8kQD%2BrWCpUorphtytHS8vIa7Uq532gfbRSXdqvv5LYEyhv5BVnhx5jA6FAhLhg3CZ5DSNMdNS3zfshry%2BGW491E3pnIezHpMks3IFJlX7xTRFOP%2BIantgGJ3QNE5eddA0LljmZ5o1yDK3XRmZbmH5waLfRG%2B3vUlFVkpcC3bu3dUArOKabmyVQ%3D%3D&iv=c34cfebb8a822c05" |
测试 cURL
是否可用
退出登录校园网后
通过 PowerShell
或 Cmd
尝试是否可用,如图:
我校校园网返回值中, status
为 1
即为登录成功,为 0
时即为登录失败
编写脚本
编写一个shell脚本,上传至路由器,并定时运行,即可实现校园网的自动认证
搁置,理由如下
我校校园网登录所用的 HTTP-POST
请求中有一个 data
变量的值每隔一定时间便会自动通过 AES加密算法
加密更新,我不清楚里面的原理,只能构造出一个短时间可用的 cURL
,故该方法无用
目前思路是给路由器装上 Python
来模拟浏览器正常登录,或者再分析 data
的加密原理
相关链接及参考鸣谢
- 🎵 EN’SAN:@恩山无线论坛
- 🎵 agentfan:@小米路由器R3G刷机教程
- 🎵 hly0928:@使用 Padavan 路由器实现校园网自动 Web 认证