banner
miaoer

miaoer

喵二の小博客 xLog 分站
tg_channel
telegram

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 等内容……

内容闭源,脚本处理逻辑不通,仅当示例!

#!/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

#!/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

/sbin/mtkwifi up

/usr/bin/python3 /root/auth.py

/bin/bash /root/ua.sh

exit 0

在还没开机自启之前我们先执行一下测试 ./ua.sh 我们使用 http://ua.233996.xyz 这个网站就可以测试 UA 了

可以看到已经处理了 http:80 流量变为了 FFFFF……,如果你使用的 v23.5+ 的 CatWrt 版本在软件源获取的的会替换为我的 Windows UA

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~

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


読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。