对某校园跑的分析

本文只讲原理,不提供软件,切莫以身试校规

校园跑是微信小程序,没有也无法实现反模拟器和反分析,这给了我们极大的便利

常规方法配置好模拟器抓包环境,打开校园跑,开始分析

从抓到的请求包可以看出,程序逻辑相当简单:开始跑步时请求/start/running获取记录码,跑步中每5秒发送一次心跳包/save/running/track报告坐标,结束跑步时请求/finish/running并判定成绩

那破解方法也很简单,要么伪造新数据,要么重发老数据

伪造新数据实现起来有点麻烦。重发老数据相较而言就很简单,模拟器虚拟GPS定位跑一趟,保存抓到的数据重发

心跳包的格式类似这种,我们需要的是经度和纬度数据

1
/save/running/track?recordCode=&latitude=&longitude=&lastLatitude=&lastLongitude=&time=&startTime=&lastTime=&status=&trackIndex=&type=

burp导出的是xml文件,懒得解析了就直接拿正则表达式暴力匹配,拿出所有数据保存到json中便于遍历

1
2
3
4
5
6
7
8
9
import re,json

with open("burp.xml") as f:
matches = re.findall(r'(?P<key>latitude|longitude|lastLatitude|lastLongitude)=(?P<value>[\d.-]+)', f.read())
data = []
for i in range(0,len(matches),4):
data.append({matches[i][0]:matches[i][1],matches[i+1][0]:matches[i+1][1],matches[i+2][0]:matches[i+2][1],matches[i+3][0]:matches[i+3][1]})
with open("data.json","w") as out:
json.dump(data, out)

有了数据,写程序重发就行。不过这种方法的缺陷也很明显,那就是每次跑步的路径和配速都一样,加大了被发现的概率(也许可以实现更高级的算法,对坐标数据添加一些噪声,相信后人的智慧,笑)

检测作弊

我没法查看后台,检测方法也只是猜测

跑步路程分为总跑步路程和有效跑步路程,现实中跑步因为有各种干扰因素存在,总有一些违规的数据,后台使用了一些申必算法过滤掉了无效数据,最终的有效跑步路程小于总跑步路程

但是模拟GPS定位就没有任何干扰,导致有效跑步路程等于总跑步路程,检测方法不言而喻

也可以检测跑步的路径和配速,检测是否雷同

这些方法很容易用算法自动化实现,后台报警,人工复核,一抓一个准!


对某校园跑的分析
https://crackme.net/articles/campusrun_analysis/
作者
Brassinolide
发布于
2024年12月18日
许可协议