比邻通讯协议逆向探究(版本3.7.5.0)
2015-06-09 12:37
369 查看
注:本博文只是作为研究学习用途,请不要用于非法、商业用途。
![](http://img.blog.csdn.net/20150609121658921)
可以看到Query String如下:
postData:
可以看到IDFA和setupMark暂时不知道是什么内容,我们再抓一次包体,看一下是否是固定。
![](http://img.blog.csdn.net/20150609122637682)
其实验证下是否固定,或者是必要的算法生成的值,我们可以尝试修改一下IDFA和setupMark的值,发送一下看看返回。
我比较偏激的把这两个值直接删除掉发送了
好吧,确定比邻的服务器并不验证这两个值,那么我们就直接构造登录包登录把
直接登录后返回:
![](http://img.blog.csdn.net/20150609150256959)
发现有三个参数
老样子,载入IDA
看到这么一个CLASS
![](http://img.blog.csdn.net/20150609150947271)
最后搜索到了
![](http://img.blog.csdn.net/20150609153434546)
可以看出调用了
跟过去看一下很有料嘛,动态调试看下返回值
调试过程就不写了,挺多的,直接说调试结果:
返回值是
调试结果(抓包+动态调试):
![](http://img.blog.csdn.net/20150609160034586)
可以看到
确定了加密函数就是
未完待续。
0x01登录:
首先打开比邻,接入Charles,发一个登录包体,看一下报文构造可以看到Query String如下:
{ "random": -546376261,//随机数,暂时不知道含义 "clientType": "IPHONE",//手机型号 "version": "3.7.5.0",//软件版本 "netType": "WIFI",//手机网络 "platform": "APPSTORE"//下载渠道 }
postData:
{ "username": "54324324",//账号 "areaCode": "86",//区号,中国为+86 "password": "f76f739b38be1f7c505f5370981fe4b4",//密码,应该就是MD5值 "idfa": "D965A2ED-3598-44C3-8602-3B49C8D77D81",//未知 "mac": "020000000000",//mac码 "setupMark": "2358EA54-5908-4C54-BA55-7C63F034568B"//未知 }
可以看到IDFA和setupMark暂时不知道是什么内容,我们再抓一次包体,看一下是否是固定。
其实验证下是否固定,或者是必要的算法生成的值,我们可以尝试修改一下IDFA和setupMark的值,发送一下看看返回。
我比较偏激的把这两个值直接删除掉发送了
{ "result": "Err-603" //密码错误 }
好吧,确定比邻的服务器并不验证这两个值,那么我们就直接构造登录包登录把
直接登录后返回:
{ "result": "success", "UserAccount": { "userId": "1867xxxx", "username": "1xxxxxxxxx0", "password": "1xxxxx6", "accessToken": "d1d0ea7431a43ab1aa134652160938b5", "refreshToken": "2cca7144d1ebfdb83f03d080f361f96d", "signature": "U5bs4AdocVH8uxFcVPIhNonEvU4=", "time": "1433832915", "isBindMobile": "true" } }
0x02个人资料:
登录返回了这么多东西,我们还不知道都是干嘛的,看一下个人资料的包体把发现有三个参数
accessToken
cnonce
signature
老样子,载入IDA
看到这么一个CLASS
accessToken
signature是登录的时候返回的,但是
cnonce不是登录的时候返回的,而这三个值必然每次HTTP访问都会出现,那么我们就全局搜索
cnonce
最后搜索到了
BLHTTPTool::signatureParams这个函数,看下汇编代码
可以看出调用了
BLCallService::getSignature(Bool b)
跟过去看一下很有料嘛,动态调试看下返回值
调试过程就不写了,挺多的,直接说调试结果:
返回值是
BLAuthenticationSignature类型:
@interface BLAuthenticationSignature : NSObject { unsigned int _reqTimestamp; unsigned int _keyTimestamp; NSString *_randNum; NSString *_signatureStr; }
调试结果(抓包+动态调试):
{ "signatureStr":"81d6fab49e8b2f15ef6125968eaccf977bee0f6a", "keyTimestamp":1433832733, "reqTimestamp":1433836532, "randNum":"DC37049E74DC4443AEB6C480FFCFD9F8" }
可以看到
cnonce = randNum signature = signatureStr keyTimestamp = keyTimestamp reqTimestamp = reqTimestamp
确定了加密函数就是
BLCallService::getSignature(Bool b),我们就开始分解这个函数把!
未完待续。
相关文章推荐
- 如何查询本机端口占用情况 .
- @Html.Raw() 方法输出带有html标签的字符串
- Hadoop(三)之HDFS简单介绍
- 编程练习,自己做的21点游戏
- JavaScript实现函数返回多个值的方法
- hbase ganglia监控配置
- IT大佬高考成绩单:李彦宏是状元 马云数学仅1分
- hdu5246 超级赛亚ACMer
- leetcode 109 【建立BST树】
- 做课程项目的感想
- CL.exe
- Weka初步
- 夜幕降临,我还记得那首歌
- XE8开发安卓之二:按钮和 TEdit 控件的几个常用的属性
- SAT写作例子之Frank Lloyd Wright
- shell学习第六天--小结
- Android锁定屏幕或关闭状态-screen,高速按两次音量向下键来实现拍摄功能(1.1Framework在实现的形式层广播)
- 好书集合
- OC NSlog
- Nginx打造3w高并发网站 (推荐)