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.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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。