Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何获取 keep 跑步数据 #191

Open
yihong0618 opened this issue Oct 22, 2020 · 5 comments
Open

如何获取 keep 跑步数据 #191

yihong0618 opened this issue Oct 22, 2020 · 5 comments
Labels
Top Top label of gitblog 技术文章 技术文章

Comments

@yihong0618
Copy link
Owner

yihong0618 commented Oct 22, 2020

这些天为了把自己的 running_page 支持keep,很大一部分精力都在和keep数据打交道,也有了一些心得,在这儿记录一下。没准过段儿时间我就成安全工程师了~
具体代码见 https://github.com/yihong0618/running_page/blob/master/scripts/keep_sync.py

如何获取到接口

这也算是比较重要的一步。我一般采取以下步骤

  1. 去官网看看,有登陆的地方没,如果有获取到最原始的接口。比如 api.gotokeep.com
  2. 如果没有的话,我会在 GitHub 上进行搜索,但是 keep这个遇到了困难,叫 keep 的太多了。如果有人做过会节约非常多的时间,但不幸的是,keep 不像 garmin, strava 那��,几乎没人做过。 keep, 悦跑圈,咕咚那样的国内软件也鲜有人做过。幸运的是我发现了有人2年多以前做了 keepForMac, 那时候keep的接口好像还是开放的。虽然这个项目已经不能用了,但我找到了登陆接口。
    image
    image
  3. 有登陆接口后我继续在 GitHub 搜索有没有人做过 keep 的模拟登陆,这次没有那么幸运了,做过登陆的只有这一个项目。
  4. 没办法,只好抓包,我用 Charles 抓出跑步 logs 的接口,再碰碰运气,贴到 GitHub 中,一无所获,贴到 google 中,发现了这篇文章 嗯,证明我拿 keep 数据的想法是可行的。挺好。

搞定数据

  1. 想拿到跑步数据需要,速度,时间,距离,心率。。。等等,除了这些还有生成可视化地图比较重要的经纬度,如果要生成 gpx 还需要时间戳。
  2. 一般 经纬度 + 速度 + 时间 + 海拔的数据都是加密的,我之前搞过 Runtastic 是 base64加密,然后一个一个猜最后搞定,如下图:
    image
  3. 但同样的方式我去搞keep直接失败,甚至一个字节一个字节来碰运气发现还是不行。
  4. 搞不定之后我尝试用之前看到的一个项目 Ciphey 尝试破解,不过只告诉我是 base 加密但解不出内容
  5. 最后惊奇的发现好像好多内容(能访问的txt数据都是)都包括这个开头 H4sIAAAAAAAA, 本着我的凡事先搜索精神我把这段贴在了 GitHub 中,发现有好多代码出现了这个,肯定是某种加密。
    image
    image
  6. 在根据别人写的代码反推加密,就搞定了(zip + base64)
    image
  7. 搞定了这个数据,就剩解析成我需要的格式,生成polyline了,存入数据库。这个我搞过好多,也就简单了。

总结

  1. keep 的数据保护并不复杂,但是keep因为想把用户留住的原因省去了好多数据
  2. 对于破译保护一定要多观察, 冷静。站在前人的肩膀固然好,更要有自己的能力
  3. 这些数据里 keep 粒度是最不好的,导出 gpx 会缺失很多,但悲凉的是已经是国产里最好的了

P.S. 本质是 base64 不算加密,做数据编码一定要记住。

@yihong0618 yihong0618 added Top Top label of gitblog 技术文章 技术文章 labels Oct 22, 2020
@chendongcse
Copy link

博主厉害,一直想把keep里面的数据可视化展示的!

@yihong0618
Copy link
Owner Author

@chendongcse

谢谢,因为我数据较少,没有经过数据量的测试,你感兴趣能帮我试试有什么问题么?

@hongyun-robot
Copy link

/(ㄒoㄒ)/~~,看你的说明和代码我以为是zlib解压加密数据,最后找到python文档,没想到是gzip解压。我用go尝试解压了一天,终于解决了。
image

@yihong0618
Copy link
Owner Author

/(ㄒoㄒ)/~~,看你的说明和代码我以为是zlib解压加密数据,最后找到python文档,没想到是gzip解压。我用go尝试解压了一天,终于解决了。 image

你可以直接用 running_page 的 keep_sync 啊

@hongyun-robot
Copy link

非常感谢大佬提供的keep接口,因为我最近想把keep数据接入到自己网站上,扒到的登录接口要加密就在网上搜,刚好搜到这个项目了。直接用你这个还要改代码,对python不太熟就没用了,就仿照大佬代码来翻译成go代码。😁

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Top Top label of gitblog 技术文章 技术文章
3 participants