關於破解廣州天翼校園 + 小米路由器實現自動上網 突破wifi限制
阿新 • • 發佈:2019-01-03
關於破解廣州天翼校園 + 路由器刷韌體 實現自動上網 突破wifi限制
有位大神告訴我發現了github上有人破解了廣州天翼校園加密。具體倉庫請點選連結EsDialerGD 程式碼實現了認證和keep請求。
接下來我會介紹如何通過以上程式碼完成小米路由器3g的自動認證上網邏輯。
使用wireshark抓包確定請求url
EsDialerGD專案預設不提供相關的請求url
這些url需要自行抓包獲取,url包括:
- ESD_TICKET_URL:ticket url
- ESD_AUTH_URL: auth url
- ESD_KEEP_URL:keep url
- ESD_TERM_URL:term url 此選項並不重要,如若不存在不影響上網。
ps 程式預設的獲取config url 為重定向地址ip的url,但在我們學校這個url是另外一個ip地址,所以具體的url需要用wireshark抓包拿到。以我們學校為例,需要修改原始碼中的auth.c檔案:
int get_ticket(AUTH_CONTEXT *ctx) { if (!ctx->ticket_url[0]) { dbgout("ticket_url not found"); goto _fail; } update_local_time(ctx); char data[UD_BUF_SIZE] = {0}; char buf[UD_BUF_SIZE] = {0}; char md5_hex[64] = {0}; build_ticket_payload(ctx, data, md5_hex); char headers[8][HEADER_LEN]; build_headers(ctx, headers, md5_hex); (*((uint8_t *) (md5_bin + 1))), (*((uint8_t *) (md5_bin + 2))), (*((uint8_t *) (md5_bin + 3))), (*((uint8_t *) (md5_bin + 4))), (*((uint8_t *) (md5_bin + 5)))); dbgout("Fake MAC=%s", ctx->mac_addr); snprintf(ctx->client_id, 64, "%08X-%04X-%04X-%04X-%04X%08X", (*((uint32_t *) md5_bin)), (*((uint16_t *) (md5_bin + 1))), (*((uint16_t *) (md5_bin + 2))), (*((uint16_t *) (md5_bin + 3))), (*((uint16_t *) (md5_bin + 4))), (*((uint32_t *) (md5_bin + 5)))); dbgout("Fake ClientID=%s", ctx->client_id); if (cdc_domain) strcpy(ctx->cdc_domain, cdc_domain); if (cdc_area) strcpy(ctx->cdc_area, cdc_area); if (cdc_schoolid) strcpy(ctx->cdc_schoolid, cdc_schoolid); strcpy(ctx->ostag, ostag); strcpy(ctx->host_name, host_name); strcpy(ctx->user_agent, user_agent); strcpy(ctx->algo_id, algo_id); char *ticker_url_buffer = malloc(2048); //使用抓包獲取到的config_url memset(ticker_url_buffer, 0, 2048); strcat(ticker_url_buffer, "http://14.146.227.141/index.cgi?wlanuserip="); strcat(ticker_url_buffer, ctx->ipv4_addr); strcat(ticker_url_buffer, "&wlanacip=61.142.108.88&portal_node=http://125.88.59.131:10002"); if (get_config(ctx, ticker_url_buffer)) { free(ticker_url_buffer); goto _fail; } free(ticker_url_buffer); return 0; _fail: dbgout(FAILED_STR); return -1; }
如果程式編譯後無法正常認證,請自行抓包確認一下URL,並且需要確認認證的韌體ID為54EB0E0D-58FE-46E2-8629-0A517E2785F4
CMakeLists.txt檔案
由於需要執行在小米路由器中,需要交叉編譯。為了方便期間,我決定用cmake實現編譯指令碼,EsDialerGD專案預設只使用了curl連結庫,所以動態連結並不麻煩。 我的CMakeLists.txt檔案的程式碼如下:
cmake_minimum_required(VERSION 3.2) set(PROJECT_NAME EsDialerGD) set(PROJECT_SOURCE_FILES auth.c codec.c http_req.c md5.c str_extract.c main.c) project(${PROJECT_NAME} C) option(USE_SYSTEM_CURL "Set to ON to use system default curl otherwise your must define curl include path." OFF) message(STATUS "-------------------------------------------") message(STATUS "Options USE_SYSTEM_CULR " ${USE_SYSTEM_CURL}) message(STATUS "Options LIB_PATH" ${LIB_PATH}) if(NOT USE_SYSTEM_CURL) if(NOT CURL_INCLUDE_PATH OR NOT LIB_PATH) message(ERROR "Your must define curl include path when not use system curl.") exit(1) else() include_directories(${CURL_INCLUDE_PATH}) link_directories(${LIB_PATH}) endif() endif() add_executable(${PROJECT_NAME} ${PROJECT_SOURCE_FILES}) set_property(TARGET ${PROJECT_NAME} PROPERTY C_STANDARD 99) target_link_libraries(${PROJECT_NAME} curl)
其中需要指定三個變數:
- USE_SYSTEM_CURL:是否使用系統的curl 當在交叉編譯時必須使用交叉編譯toolchains提供的curl連結庫。
- CURL_INCLUDE_PATH:指定make檔案的 -i 引數 include目錄。此目錄為交叉編譯toolchains提供的include目錄
- LIB_PATH:指定交叉編譯toolchains 提供的lib目錄
使用linux編譯目標檔案
這裡以小米路由器3g為例子,但其他的可以刷openwrt路由器也是可以的,具體的步驟如下
//下載小米路由器提供的toolchains
cd /root
wget http://bigota.miwifi.com/xiaoqiang/sdk/tools/package/sdk_package_r3p.zip
unzip sdk_package_r3p
mkdir bin && cd bin
git clone https://github.com/claw6148/EsDialerGD.git
cd EsDialerGD
vim CMakeLists.txt
//這裡將我上面的CMakeLists.txt文字拷貝進去
vim config //在config檔案中新增如下內容
#!/bin/bash
ROOTDIR="/root/sdk_package/"
toolchain="${ROOTDIR}toolchain"
CURL="${ROOTDIR}include/"
LIB="-Wl,--rpath-link ${ROOTDIR}lib"
LIBRARY="${ROOTDIR}lib/"
export CXX="${toolchain}/bin/arm-xiaomi-linux-uclibcgnueabi-g++"
export CC="${toolchain}/bin/mipsel-xiaomi-linux-uclibc-gcc-4.8.5"
mkdir build
cmake -D CURL_INCLUDE_PATH=${CURL} -D LIB_PATH=${LIBRARY} .
cd build && cmake --build ..
chmod a+x ./config
./config
接下來將編譯好的EsDialerGD檔案拷貝到路由器中,並加上守護程序。就可以實現自動認證上網。