865 字
4 分钟
关于校园跑抓包分析的过程学习(长期更新)

大家好,我是redfox。

本次研究的校园跑逻辑过程为:开始—上传照片—gps数据传递(每2s一次。主要用于绘制跑步路线)—结束—第二次上传照片。这是他的大概流程,整个充斥着很多的漏洞与错误,例如居然能将sport给拼写为sprot,json写为jspn,令人汗颜。

redfox出于学习目的,对其进行安全测试 。゚ヽ(゚´Д`)ノ゚

—声明— 所有URL、域名、具体标识等已做彻底脱敏处理,不代表任何真实机构或服务,仅为技术分析示例。

—声明:整个过程在合法合规的环境中测试,请大家不要轻易模仿。— (校园跑是为了大家健康出发,要是能自己跑再好不过了。)

那么就开始吧(^u^)!

首先,我把相关的抓包数据给大家贴出:(他是分为start和end两个关键节点,以及一个sportID)

这个是我们第一次递交开始照片的请求体

{“sportSubject”:1,“stepNum”:0,“fileUrl”:“https://example.com/api/file/visit/[已脱敏token]”,“lockGpsJspn”:”[]”}

好我们对他进行一个分析 sportSubject:指的是运动项目编号 在这里就是指的是每日锻炼 代号为1

stepNum:步数,当前值为0

fileUrl:拍照上传的文件

lockGpsJspn:GPS锁定的JSON数据 (令我惊讶,居然能将json写为jspn)

[已脱敏]:一串长长的字符串,是token。Base64 编码后的访问令牌(token)

(^_^)

下面这一部分是gps json数据。用于绘制路线以及计算速度之类的。

{ “gpsInfo”: ”{“sportId”:****,“curTime”:约2025年12月底,“steps”:0,“altitude”:460.1,“verticalAccuracy”:0,“indoorLocationType”:-1,“provider”:“gps”,“latitude”:30.67,“accuracy”:2.5999999046325684,“horizontalAccuracy”:2.5999999046325684,“type”:“gcj02”,“speed”:4.134248733520508,“longitude”:104.14**,“direction”:129.38,“lastLocation”:{“altitude”:460.3,“verticalAccuracy”:0,“indoorLocationType”:-1,“provider”:“gps”,“latitude”:30.67**,“accuracy”:2.5999999046325684,“horizontalAccuracy”:2.5999999046325684,“type”:“gcj02”,“steps”:0,“speed”:4.0554962158203125,“longitude”:104.14**,“direction”:130.62}}” }

本文所有坐标、时间戳、ID等均已做脱敏处理,仅用于技术学习与分析,请勿尝试逆向还原真实信息。

各个字段的解释:

字段名示例值(脱敏后)含义解释备注/现实意义
sportId******这次运动/活动的唯一ID每一次跑步/打卡对应一个独立ID(示例已脱敏)
curTime约2025年12月底当前时间戳(毫秒)时间戳已模糊处理,仅供参考
steps0当前累计步数这次运动刚开始,或非计步类型
altitude460.1海拔高度(米)某大学校区典型海拔范围(约450–470m)
verticalAccuracy0垂直(高度)精度0 表示设备认为高度数据非常准确
indoorLocationType-1室内定位类型-1 = 室外定位(未进入室内模式)
provider”gps”定位来源纯 GPS 定位(未使用 WiFi/基站辅助)
latitude30.67**纬度(GCJ-02)位于某大学校区范围内(已模糊)
longitude104.14**经度(GCJ-02)位于某大学校区范围内(已模糊)
accuracy2.6水平定位精度(米)非常精准(开阔地带手机常见精度)
type”gcj02”坐标系类型中国加密坐标系 GCJ-02
speed4.134瞬时速度(m/s)≈ 14.9 km/h,正常步行/慢跑速度
direction129.38行进方向(度,0=正北,顺时针)东南偏南方向(≈130°)

然后说到这里啦 比较聪明的小伙伴能够发现!

我们能通过改包直接完成一次跑步 只要有合适的请求体之类的 随便插一嘴哇 我现在仍被“需要登录”的问题阻挡 只是短暂绕过 (这个问题就是由于多平台登录 有个挤出问题导致的)

我的短暂的解决方式是 每次发包时 重新抓一个新包 可以说屡试不爽 但是仍然没有解决根本问题 这个之后再说啦q(≧▽≦q)