如何获取悦跑圈数据
这几天想给朋友分享如何把跑步数据同步到 NRC
发现自己当年一系列的操作几乎忘光了,他没有成功,有些遗憾。想着,如果当时写个博客就好了,以后跟人分享还方便,也能让更多的人转移成功。
于是,这些天尝试如何获取悦跑圈数据的过程,记录一下。
- 尝试给 running_page 加入悦跑圈已经很久了,我是先本着凡事先搜索的原则找到了有人分享过悦跑圈逆向的加密。但我不知道接口,尝试抓包,嗯,不出意外 SSL Pinning
- 为了解决这个,我先后学会了,装夜神模拟器,怎么 trust,怎么模拟器配合 charles 抓包,但是,不知道为什么还是失败。不过倒是学了一点逆向安卓,发现了 Xserver 这个项目
- 放弃之际,ben-29 给我发来一条私信,说他抓到了悦跑圈的包,说是用低版本的 apk 可以,我一下就兴奋了。于是去下了一个3.0的,果然能抓到,好兴奋。
- 接下来就是一系列破解接口的过程,具体方式方式不便讲。但发现了一个隐藏的项目 PKURunningHelper 里面直接有加密需要的两个 key。我用了一些其中的代码,但实在是不喜欢代码的 taste,几乎都重写了。
- 但是带来了一个新问题,joyrun 更改了它的登陆策略,目前,只支持单设备登陆并且,如果是新设备必须用验证码登陆,这下就麻烦了,一下子必须 runner 必须具备抓包和搞到低版本的能力,这样是没法通用的。
- 于是我想了从验证码就行突破找找运气,我尝试了只用验证码校验的接口是否能登陆成功,-- 在手机获取验证码,然后把验证码传入 python 端校验验证码的接口上,看起来我运气不错,搞定了。
- 并且,登陆之后会有 sid, uid, 悦跑圈的 cookie 也是用这两个拼的,加密也是,只需要保留这两个大家就可以再用这个登陆了,方便很多,我加了个简单的用 sid, uid 登陆的方法。
- 之后导入数据,转换成 GPX 和其它的软件类似,不过 joyrun 的数据格式做的太差了甚至和 keep 比都差很多,心率和海拔是分开的没有时间戳。。。转换成 GPX 造成了非常的大困难。我暂时没加这两个。
关于获取数据代码在这里。