前情提要#
众所周知,跑步打卡对于大学生而言是个极为艰难的操作,因此衍生出了多种完成方法 —— 体育健将的独自刷圈、小废物们的接力打卡、较为领先地使用单车 / 电动车为运载工具的骑车打卡、还有新兴的模拟定位。
左家垅職校目前使用的是獨立自研(手動狗頭)::quyin:1huaji:: 的跑步打卡微信小程序,微信小程序獲取到的本機信息較少,因此可以比較容易地實現虛擬定位打卡。
此前 iOS 設備可以使用愛思助手改定位刷圈。安卓設備則稍有些麻煩,先需要解鎖(bootloader),再刷入 Magisk,然後給予 Fake Location 權限,實現改定位的效果。通過上述方法,在大一學期,我可以實現在吃飯時打卡,在上課時打卡,躺在床上打卡,甚至拉個屎還能打兩次卡()。
這個學期是 9 月 5 日開始跑步打卡。我氪了 9CNY 購入了 Fake Location 的月會員準備故技重施,然後我打開打卡小程序,卻發現一直不能開始打卡。諮詢了客服後,得知學校在操場加裝了相關設備,在跑步打卡時會依此判斷學生是否在操場。
[collapse title="查看聊天記錄"]
[/collapse]
此時有兩種選擇:①每次跑步打卡前,先到操場,待設備檢測到操場相關設備的藍牙信號後,再開始模擬定位打卡;②克隆操場設備藍牙相關信息,然後使用自己的設備廣播,進而實現隨時隨地打卡。
顯然前者會在前往(離開)操場階段浪費很多的能量,對於環境保護來說可不是一件好事,因此我選後者。
解決過程#
首先,我當然是手機和小平板去操場轉悠轉悠。
到操場後打開手機的藍牙設置界面,搜索藍牙設備,可以看到很多的設備。
[collapse title="展開圖片"]
[/collapse]
經在操場反復走動並結合網上搜索而來的一些信息,可知悉:HB511007XXXX 應為路邊的哈啰單車的藍牙信號,xBeacon 應該就是學校新加裝的設備。
接下來我們使用 nRF Connect 查看更多信息。
可以看到這玩意兒用的是 iBeacon 協議,關於 iBeacon 的更多信息可以查閱相關文檔。
維基百科上可以查到以下內容:
iBeacon 與其他一些基於位置的技術不同,因為廣播設備(信標)只是到接收智能手機或接收設備的單向發射器,並且需要在設備上安裝特定的應用程序才能與信標交互。這樣可以確保只有安裝的應用程序(而不是 iBeacon 發射器)可以在用戶在發射器周圍走動時對其進行跟踪。
這進一步說明了手機只是單向的接收 xBeacon 發出的信號,以此判斷是否處於合法區域。
因此只要模擬此 iBeacon 信號就能達成目的。淘寶上可以買到很多 iBeacon 模塊,但均價超過 80,這讓我並沒有購買的慾望。
我嘗試借助一些手機 / 電腦軟件來發出模擬信號。
經測試,Beacon Simulator 可以實現對藍牙 mac 地址以外的信息的克隆,如下圖:
可以發現,二者的通告信息(RAW)、UUID、Major、Minor 等完全相同,此時需要測試是否可以滿足模擬打卡的需要。
為避免操場原有信號的干擾,我拿著平板和手機狂奔到了二百米開外。經搜索檢測不到操場的 xBeacon 信號後,我開啟了模擬信號的廣播,然後打開跑步打卡小程序,很順利地,沒有卵用。
我又回到了操場。
因此,跑步打卡小程序應該只會檢測特定 mac 地址的藍牙設備發出的通告信息,模擬時需要將 mac 一同模擬。
我又回到了淘寶,在和一個商家溝通之後,我得知 ECB02U 藍牙模塊可以修改 mac 和 RAW 數據(而且加上郵費只要十幾塊錢),我就果斷下單了。(至於為什麼退款,後面會講到)
回宿舍的路上,我很偶然的在某安平台看到 @ztc1997 大佬寫的一個 xposed 模塊,可以模擬 BLE 外圍設備廣播。
[collapse title="查看帖子"]
[/collapse]
到宿舍後,我使用此模塊成功模擬了 mac 地址為 D4:10:28:00:03:11 的 xBeacon 發射器所發射的信號。
再次嘗試跑步打卡,已經可以定位成功(此時我已經在宿舍)。
至此,問題已解決。需要的東西為:9 元人民幣(用來開 Fake Location 的會員)、一台可以解鎖的安卓設備、一雙不太愚笨的手。
2022/09/20:經驗證,iOS 設備持有者可以購買 ECB02U 藍牙模塊來實現藍牙模擬,並結合愛思助手模擬定位打卡
2022/10/13:使用 ECB02U 藍牙模塊模擬 BLE 信號