banner
miaoer

miaoer

喵二の小博客 https://www.miaoer.net xLog 分站
tg_channel
telegram
bilibili

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

image

Enjoy~

该方法后面就不能对我们的客户端进行抓包了,但是 API 本身没问题,可以继续用,在 24 年初服务商跑路了,草!

此文由 Mix Space 同步更新至 xLog
原始链接为 https://www.miaoer.net/posts/network/openwrt-ua2f


加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。