连信协议整体框架

点击上方蓝字[协议分析与还原]关注我们


 连信协议的整体框架说明。

前一阵搞连信协议搞废了,风控一直过不去,没法过8,再加一堆其它稀里糊涂的问题,看样子从协议搞连信此路不通,放出来给,给大家一起玩玩,希望对大家有帮助。

我慢慢写,大家慢慢看,有问题可以消息或留言互动,尽量解决。

01

整体情况

连信的协议,大的框架上,有几分像微信,其实本质上并不像。

它的android版和ios版大体上协议框架是一样的,有一些密钥和域名的细微差别,还有,就是android版分析难度比较大,我没去搞它。

下面介绍下整个软件的流程。

首先,打开软件,这里有风控,数盟的风控,shuzilm域名的http报文,作为风控界的小白,我之前都没关注过这里,在协议的主体实现之前,把它都直接忽略了,后来发现,注册完就是半死不活的号,不能被别人看见,不能主动加别人,才在各路高人的提示下接触它,这个风控,可以过,使用真机产生数据配合即可,数盟的数据,可以解密了来看,但是否过了风控的结果数盟的服务器不告诉你,应该有其它接口可以得到。

同时,还有三个HTTP,从打开软件就开始存在,应该是连信自己家族的风控,大年哥的产业,上报各类动作和状态,另外里面数据太多,我研究了很久,有几个数据不知道来路,估计是钻进了牛角尖,这是一种犯罪,不过,好在已经没耐心了。

其次,登录,是使用第三方手机号验证码登录,当然,这个第三方仍然是连信大家庭内的第三方,连尚系的产品,所谓肥水不流外人田的典范。

这个第三方登录之后,是连信自己真正的服务器的登录,http或https封装,里面再使用一个RSA公钥加密传输数据进行密钥协商,android的公钥我没搞定。ios和android的RSA公钥是不同的。服务器返回本次登录后使用的AES加密的key和iv数据。

登录之后,会建立一个TCP长连接,里面传输的是各种消息,另外,还有http短连接,里面传输一些如更新,token,同步,注册,认证等数据,但二者的加密方式是一样的。

每次切换到后台等一会再切换回来,连信APP都会更新一次token,相当于重新上线,大概率是系统实现bug。

登录成功后,就可以进行收发消息、站街、加好友、发朋友圈等操作了。

当然,运行过程中会上传很多的log之类的信息,每个APP内的操作,都会有数据上报,上报到51y5.net相关的域名,这应该是连信自己的风控,里面的数据,到这里我基本上看得直接放弃了。

总体流程相关的信息基本就是这样子。

02


风控相关

连信的协议,看着很容易实现,找到RSA公钥,以及几个固定的key和iv,就能加密所有的数据,但是,等到做完了,会发现,风控很有点难。

首先,在程序启动时,调用了数盟的风控,检测一些基本的设备信息,例如网卡,mac,ip,运营商,各种设备id等各类信息,有兴趣研究的朋友可以到网上搜索数盟检测的数据分析:

这个数据通过http://idaa.shuzilm.cn/report接口上报,然后服务器当然是返回成功给客户端啦。

这个里面有个cdid,是数盟自己生成的id,个人推测,数盟的客户可以通过这个id到数盟自己的服务器上查询是否可以通过风控。

其次,连信登录使用手机号登录,很挑手机号的,至少网上的接码平台的手机号,基本没法用,有些能注册,但注册完是死号,不会被推荐给别人,也不会被附近的人看见,也不能给加别人好友或者打招呼,不过被动的操作还是可以的,更多的是注册完直接弹出异常不让登录。

有一个简单的是否死号的识别方法,就是注册后进入连信的第一步,会有一个推荐页面,推荐的数据的前几个,如果带彩色圈圈,则是活号,在协议实现上,则可以看推荐的数据的uid,如果都是很小的数值,则推荐的全是机器人,无疑,你被认定是死号了,例如推荐数据是这些的时候,就是死号了:

推荐数据的获取链接为:

http://short.lianxinapp.com/recommend/v5/getRecommendUser.json

最后,这些风控都过了,还不行,前面已经提到了,连信的运行过程中,每个APP内的操作以及log日志,都会上报到连信相关的服务器。上报的信息很杂乱,主要用到如下几个url:

http://kepler.51y5.net/alps/fcompb.pgs
http://dcmdaa.51y5.net/dc/fcompb.pgs
http://taichi-pub.51y5.net/alps/fcompb.pgs
https://log.lianxinapp.com/logs/v2/realtime

这里面,log url中传输的内容稍微清晰,没有加密,外层https传输:

--X5uNEck44kxP1C1l38Q_KF2f1kxwtThFjqi6p
Content-Disposition: form-data; name="logType"


1000
--X5uNEck44kxP1C1l38Q_KF2f1kxwtThFjqi6p
Content-Disposition: form-data; name="isGzip"


0
--X5uNEck44kxP1C1l38Q_KF2f1kxwtThFjqi6p
Content-Disposition: form-data; name="file"


{"index":{"_index":"zhangxin-client-20xxxx","_type":"log","_id":"xxxx"}}
{"pfm":"xxxx","uid":"xxx","ver":"200422","ts":xxxx,"@timestamp":"2020xxxx+0800","did":"xxxxx","log_code":1000,"imei":"xxxx","mac":"xxxxx","channelId":"xxxx","uiType":1,"pth":"1p","extra":"{\"uid\":\"xxxx\",\"mid\":\"xxxx\"}","action":"1","comp":"12"}


--X5uNEck44kxP1C1l38Q_KF2f1kxwtThFjqi6p--


而几个51y5的链接的post请求数据体,则比较复杂,使用AES CBC加密,不过格式基本统一,外层格式如下:

其中headpb的数据为protobuf编码,encdata为加密数据,加密key iv几个链接各自独立,各个平台也各自独立。

encdata加密前的数据格式如下:

其中encpb1和encpb2均为protobuf编码。

响应体也同样是加密的,外层:

内层encdata:

看着是不是很清爽,这是我抽象了很久才整理成这样的,其实里面还有一些东西稀里糊涂的。

03


未完待续

今天就写到这里了,如果有需求,后面会把更多细节补上,望大伙不吝赐教,共同进步。


长按进行关注,时刻进行交流。

如果文章对你有帮助,还请多点“赞”,多点“在看”,多“分享”

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值