OpenWrt 使用 UA2F 绕过校园网 UA 检测全解析案例
鉴于有群友不会使用 CatWrt 的 UA2F 软件绕过校园网的 UA 检测,本文已对对应学校的服务商进行处理请勿滥用,本教程只演示共享校园网网络,并非破解付费系统。
本文适用于所有 OpenWrt LuCI 18.06+,如果你不是 CatWrt 也可以请放心食用。
本期食用的项目是 Zxilly/UA2F
UA2F 作者博客:https://learningman.top/archives/304
确定网络
首先介绍我们学校的校园网,有好几种类型都是分别代表不同的服务商(仅网页验证,网页+APP 验证,仅 APP 验证)
我这里使用的设备是 J4105 软路由插上就发现 wan 口 DHCP 获取的 IP,并且使用电脑访问互联网会劫持弹出二维码手机 APP 端进行验证,我这里就使用小黄鸟 HttpCanary 进行中间人抓包,博主这里使用的 XiaoMi 10 解锁了 BootLoader 并且使用了 Magisk 获取了 ROOT 权限,在爱玩机工具箱里面安装了 CA 根证书模块,这里貌似可以不用 ROOT 手动安装进行中间人,没测试过。
仅通过 HttpCanary 在手机中对包重发即可实现对应功能屡试不爽,把抓到的包分析一下就是:验证登录,设备列表,断开链接
这里只需要用到验证登录和设备列表进行掉线检测。
脚本
刚刚好我这里有 J4105 刷好了我们的 CatWrt 系统,因为 CatWrt 软件源不包括 Python3 的包我们这里还需要使用到默认的腾讯软件源,将 Python3 和 Python3-requests 都安装上,接下来就是写一个脚本
没错在 OpenWrt 中重发包就用到 Python3 Requests,将抓包的内容稍微解析一下就是向后端发送以下内容,包括:Cookie,Token,手机号码,IP,学校,UA 等内容……
内容闭源,脚本处理逻辑不通,仅当示例!你根据你抓的包,扔给 ChatGPT 写一个,AI 现在还是比较聪明的。
#!/usr/bin/python3
import os
import time
from threading import Thread
import requests
……
cookie_self = {
"token": "1145141919=",
"catwrt": "catwrt.v23.8",
}
data_self_check_pc = {
"uid": "114514",
"school": "whu",
"ip": "172.168.1.4",
"token": "1145141919=",
"phones": "11451419",
}
header_self_auth = {
"Host": "api.miaoer.xyz",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36)",
"Content-Type": "application/x-www-form-urlencoded",
'Connection': 'keep-alive',
'Content-Length': '114',
"Accept-Encoding": "gzip",
}
header_self_check = {
"Host": "api.miaoer.xyz",
"user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36)",
"Content-Type": "application/x-www-form-urlencoded",
'Connection': 'keep-alive',
'Content-Length': '514',
"Accept-Encoding": "gzip",
}
def auth_router():
url_self = "http://api.miaoer.xyz/api/v2/network_auth"
global auth_code_pc
# post 发包
log_print("OpenWrt 正在认证喵~~")
requests.encoding = 'utf-8'
requests.post(url=url_self, headers=header_self_auth, data=data_self_auth_router, cookies=cookie_self)
……
脚本处理完了将文件放在 /root 里,然后安装 Python3 以及 request
opkg update
opkg install python3 python3-request
我们把脚本加上计划任务,因为脚本可能因为意外 killed
0/15 * * * 5,6 /usr/bin/python3 /root/auth.py
0/15 6-23 * * 1,2,3,4,7 /usr/bin/python3 /root/auth.py
跑起来,轻松上网,但是细用发现有的 http:80 的网站是会显示停止共享网络的就需要请出 UA2F 了。
UA2F 安装
因为这里已经测试没问题了,软路由要继续在家里待命,这里我淘了个 XiaoMi Redmi AC2100 进行校园网共享
在 CatWrt 后就支持了 UA2F,我们这里已经是验证联网状态的,并且我们使用的软件源都是 Https:443 的,因为是加密的可以绕过 UA 检测
我们先按照博客 CatWrt 扩展应用安装,全系生态通用 填入好对应设备的最新软件源
拉取软件源索引文件并且安装 UA2F,假如你之前使用了腾讯源安装了 Python3 就需要 rm -f /var/lock/opkg.lock
清理掉默认腾讯源的索引文件或者重启,再将源索引填入 CatWrt 发行版软件源中再刷新列表 opkg update
。
opkg update
opkg install ua2f
示例
BusyBox v1.35.0 (2022-12-09 10:18:58 UTC) built-in shell (ash)
_____ _ _
| |___| |_ _ _ _ ___| |_
| --| .'| _| | | | _| _|
|_____|__,|_| |_____|_| |_|
W I R E L E S S F R E E D O M
==================================
Catwrt - miaoer.xyz - v22.12
Lean OpenWrt source r5525-7979de9ed
==================================
oroot@CatWrt:~# opkg update
root@CatWrt:~# opkg update
Downloading https://catwrt.eu.org/targets/ramips/mt7621/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_core
Downloading https://catwrt.eu.org/targets/ramips/mt7621/packages/Packages.sig
Signature check passed.
Downloading https://catwrt.eu.org/mipsel_24kc/base/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_base
Downloading https://catwrt.eu.org/mipsel_24kc/base/Packages.sig
Signature check passed.
Downloading https://catwrt.eu.org/mipsel_24kc/luci/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_luci
Downloading https://catwrt.eu.org/mipsel_24kc/luci/Packages.sig
Signature check passed.
Downloading https://catwrt.eu.org/mipsel_24kc/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_packages
Downloading https://catwrt.eu.org/mipsel_24kc/packages/Packages.sig
Signature check passed.
Downloading https://catwrt.eu.org/mipsel_24kc/routing/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_routing
Downloading https://catwrt.eu.org/mipsel_24kc/routing/Packages.sig
Signature check passed.
Downloading https://catwrt.eu.org/mipsel_24kc/telephony/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_telephony
Downloading https://catwrt.eu.org/mipsel_24kc/telephony/Packages.sig
Signature check passed.
root@CatWrt:~# opkg install ua2f
Package ua2f (3.10-1) installed in root is up to date.
root@CatWrt:~#
UA2F 配置
关于 UA2F 的配置可以照抄 README 的 uci command 但我这里为了开机启动就自行单独写了一个 BASH 脚本,这里我就命名为 ua.sh
,不一定用 bash 只是系统里面刚刚好有就用了,没有的可以直接改为 #!/bin/sh
& /bin/sh /root/ua.sh
也是可以用的
#!/bin/bash
uci set ua2f.enabled.enabled=1
uci set ua2f.firewall.handle_fw=1
uci set ua2f.firewall.handle_tls=1
uci set ua2f.firewall.handle_mmtls=1
uci set ua2f.firewall.handle_intranet=1
uci commit ua2f
service ua2f enable
service ua2f start
echo "Enjoy it!"
然后加入启动项 - 本地启动脚本,即可完成开机自启 UA2F
/usr/bin/python3 /root/auth.py
/bin/bash /root/ua.sh
exit 0
在还没开机自启之前我们先执行一下测试 ./ua.sh
我们使用 http://ua.233996.xyz 这个网站就可以测试 UA 了
可以看到已经处理了 http:80 流量变为了 FFFFF……
了
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36
Enjoy~
该方法后面就不能对我们的客户端进行抓包了,但是 API 本身没问题,可以继续用,在 24 年初服务商跑路了,草!