前情提要#
众所周知,跑步打卡对于大学生而言是个极为艰难的操作,因此衍生出了多种完成方法 —— 体育健将的独自刷圈、小废物们的接力打卡、较为领先地使用单车 / 电动车为运载工具的骑车打卡、还有新兴的模拟定位。
左家垅职校目前使用的是独立自研(手动狗头)::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 信号