鑑於有群友不會使用 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
Enjoy~
該方法後面就不能對我們的客戶端進行抓包了,但是 API 本身沒問題,可以繼續用,在 24 年初服務商跑路了,草!
此文由 Mix Space 同步更新至 xLog 原始鏈接為 https://www.miaoer.net/posts/network/openwrt-ua2f