初谈摩拜单车是如何开锁的
首页 > 网络通信   作者:皮皮华  2018年6月15日 22:54 星期五  热度:2227°  字号:   评论:0 条
时间:2018-6-15 22:54   热度:2227°  评论:0 条 

一次偶然的机会接触到一个叫全能车的APP,简单的原理就是用户共享自己摩拜、OFO、哈罗账号就可以成为APP的会员,或者可以直接买APP的会员,这样用户就可以用其他用户的账号开所有的单车,像小黄开了之后可以点继续用车无限开。这时我在想我能不能也搭建一个类似的平台呢。

这里就先拿摩拜开刀,第一步当然是去抓取API接口了。由于电脑抓取需要手机在局域网内,不方便使用,于是用安卓的Packet Capture,无需ROOT就可以抓包。软件是通过vpn建立数据传输中介,手机其他APP需通过此中介与互联网通信。如果需要抓取HTTPS的数据包记得安装证书,这里就不多说了。

打开摩拜APP,发现抓取到的数据包都是加密的,于是找到了微信上的小程序 摩拜单车 测试发现数据包都没有加密。以下面图片的摩拜单车测试,

                                        QQ图片20180616144128.png

我在https://cli.im/deqr将二维码转为链接得到http://www.mobike.com/download/app.html?b=8640179299_1

设置Packet Capture只抓取微信的数据包,从开始扫车到骑车200米之后关锁,共抓取到300多条数据。仔细查找摩拜相关的数据大约就50条左右,其它很多都是微信的数据。粗略看了下这些数据,发现摩拜单车是一直重复请求服务器。我就只取其中19条来看看。

注:以下1-19具体的数据包点击链接就可以看到。当然也可以下载压缩包:点击下载mobaidata.zip(个人手机号我就加$处理了)

1 118.89.5.17:443/mobike-api/pay/downpaymentv2.do

2 154.8.132.102:443/api/user/usercontract/getcontractstatus?userId=68032251139496167424705320&latitude=30.51407&longitude=104.05528&citycode=028

3 154.8.132.102:443/api/lothar/penalty/status.do

4 154.8.132.102:443/api/v2/msg/message.do

5 154.8.132.102:443/api/wechat/wxcash/getEffectiveWxCash

6 154.8.132.102:443/api/chariot/home/tab

7 118.89.5.17:443/mobike-api/rentmgr/getridestate.do

8 118.89.5.17:443/mobike-api/rentmgr/wxunlockBike.do

9 154.8.132.102:443/mobike-api/getHomeBanner.do

10 118.89.5.17:443/mobike-api/rentmgr/lockstatusv2.do

11 118.89.5.17:443/mobike-api/rentmgr/getridestate.do

12 118.89.5.17:443/mobike-api/rentmgr/lockstatusv2.do

13 154.8.132.102:443/api/v2/fencing/query.do

14 154.8.132.102:443/api/lothar/penalty/status.do

15 118.89.5.17:443/mobike-api/rentmgr/getridestate.do

16 118.89.5.17:443/mobike-api/rentmgr/getridestate.do

17 154.8.132.102:443/nearby/nearbyBikeInfo

18 154.8.132.102:443/mobike-api/rentmgr/orderinfo.do

19 154.8.132.102:443/mobike-api/rentmgr/v2/endorderinfo.do

细心的朋友会发现摩拜一直在请求154.8.132.102118.89.5.17两个IP的433端口,查了一下这两个IP发现还真都是来自 腾讯云计算(北京)有限责任公司 腾讯云。

这里先谈谈其中几个参数,个人分析仅供参考


请求头

time: 1529060561497 时间戳 去http://www.eleuu.com/tool/?url=timestamp转换得到2018-06-15 19:02:41

nickname: %E8%91%91%E8%8C%9A%F0%9F%92%8B%E8%A8%98%E6%86%B6 用户名称 解码得到 葑茚�記憶

signature: 82e60a9e6b919c3f11743ec15bab27295e4786bc 应该是这个账号相关的签名

mobileno: 185$$$$4913 用户手机号

accesstoken: c73f078e5f45f05727d1a051c8636d81-0 这个令牌应该很有用,用于验证用户状态,估计是登录后返回的请求头里面应该有。

platform: 4 平台编号


POST参数

Userid=68032251139496167424705320这个应该是摩拜用户的唯一身份ID

latitude=30.51407 纬度

longitude=104.05528 经度

citycode=028 城市区号代码 028 代表成都 这个应该是从第6154.8.132.102:443/api/chariot/home/tab用户提交经纬度返回的"cityCode": "028"获得

bikecode=http%3A%2F%2Fwww.mobike.com%2Fdownload%2Fapp.html%3Fb%3D8640179299_1 要开锁的单车ID,这里他将数据编码了一下,我们去http://tool.oschina.net/encode?type=2这里将其粘贴至右边框点击Native按钮就可以得到之前二维码转换得到的链接http://www.mobike.com/download/app.html?b=8640179299_1


接下来谈谈其中几个API

downpaymentv2 查询用户月卡信息

getridestate.do 查询骑行状态

wxunlockBike.do 开锁

getHomeBanner.do 获取首页横幅信息

lockstatusv2.do 查询单车开锁状态

nearbyBikeInfo 查询附近的单车信息 有兴趣的童鞋可以看看大佬写的这篇文章:《我是怎样爬下6万共享单车数据并进行分析的》

orderinfo.do 订单信息

endorderinfo.do 结算订单信息

用户开锁后会不断请求getridestate,返回的json数据中有用户骑行的时间"second": 169,表示用户骑行了169秒。如果仅开锁的话我们只需要调用118.89.5.17:443/mobike-api/rentmgr/wxunlockBike.do构造请求头信息以及POST参数信息channel=0&formId=1529060367762&bikecode=http%3A%2F%2Fwww.mobike.com%2Fdownload%2Fapp.html%3Fb%3D8640179299_1&latitude=30.51407&longitude=104.05528&btEnabled=0&openParkBike=false&userid=68032251139496167424705320×tamp=1529060371737&epdata=e5ed9924&wxcode=023CKt3t0C9EJd1sDC4t0Ewl3t0CKt3e&citycode=028

formId、timestamp的值从数据上看应该都是时间戳,epdata和wxcode需要实践测试,看是否需要。

由于不方便实际实践测试,数据方面仅能得出这些结论,有兴趣的朋友可以抓取摩拜用户登录,就能得到userid,accesstoken等参数。这样就可以使用自己的网站搭建类似于全能车的平台。用户只需要提交单车编号,经纬度信息就能开锁。

我经常给我朋友开摩拜,有时不在他旁边也能开,这里我提出一个猜想:如果用户不在单车旁边,用户输数字开锁会提交经纬度,服务器检查经纬度是否在单车附近,不在则不能开锁;但是扫二维码可以直接跳过经纬度验证,这也许就是为什么我在家也可以帮别人扫二维码开锁的原因。

好了,讲到这里你们应该对共享单车的数据传输应该有一个系统的了解了。以后有时间的测试话再讲讲怎么搭建这个平台。

 您阅读这篇文章共花了: 
捐赠支持:如果觉得这篇文章对您有帮助,请“扫一扫”鼓励作者!
 本文无需标签!
二维码加载中...
本文作者:皮皮华      文章标题: 初谈摩拜单车是如何开锁的
本文地址:http://huazai.eleuu.com/?post=9
版权声明:若无注明,本文皆为“皮皮华博客”原创,转载请保留文章出处。

发表吐槽

你肿么看?

你还可以输入 250 / 250 个字

嘻嘻 大笑 可怜 吃惊 害羞 调皮 鄙视 示爱 大哭 开心 偷笑 嘘 奸笑 委屈 抱抱 愤怒 思考 日了狗

评论信息框


既然没有吐槽,那就赶紧抢沙发吧!