android的直播弹幕,[原创]某直播弹幕协议分析

看似经验之谈,但是凭感觉抓包工具抓不到任何相关信息可判断不是http类协议,应该是长连接。

通过jadx打开看到netty的包名,看似用了netty框架。

还有看到一部分protobuf包名,应该是用了protobuf协议。

如何证明呢?

先从netty的connect和消息decoder、encoder入手。

71169d61f7b8f4e4f66af4fff61c5063.png

上图应该是connect函数。

245cb3d96a3d58fc9e407c38ec6d6e96.png

cbbe5e3eeeb1d64e547f047178422554.png

看上两图的"I",是不是有相似,应该是Encoder了。

d05fcd98cd5024c24a81bf917cab7b9b.png

7ed0a036ccf4fcafc670fdb0bcf58e62.png

跟netty源码对比一看就是Decoder了。

准备造轮

先找一下decoder和encoder类的继承类及abstract函数的重写。

e5822eb2109d730534c08a1a83cd71b4.png

Decoder重写看似有个magic头。看看Encoder。

67b90481996ba1c6bb915738f9ae570b.png

从这看消息体协议格式应该是[1]+f17327a+[0,0,0,0,0,0,0,0]+[a2,length]+[a2]

5465d62c8c852355831cbd813ef091b8.png

f17327a是magic头{26, 43, 60}。a2是真实的消息体了。a2是上面abstract函数过来的,要找b的重写才能搞清楚真实消息体是什么。

b60ae1c166b3912973c27ca98ea1f155.png

a.i这个类继承了MessageNano,跳到MessageNano看看。

3367b2d9aa96a9477f511936bdc6dfae.png

68194b5a7547406cf63d1dc6b21e443f.png

哈哈,是protobuf.nano。原来消息体是个protobuf格式的东西,那继续搞protobuf。先找到返回a.i类的函数,肯定有返回这类数据的函数。

6b49d1bb70543e966c3c61f458b1e2ec.png

3b16366b0ab27d60cde272d6aa60bd36.png

一看又套了一个protobuf,继续看看这个函数的调用。

342b81b1393f83e4a7654f73130d8dae.png

一看就知道这个是通用的转换函数,把各种消息类型转换成通用的protobuf包。

先找一下那些消息类型。

88762fe45bb11b27c645f47d8b1978e6.png

这就差不多搞定了,把这些protobuf包导出来,然后自写socket或者netty封装,就可以收消息了,先确定握手协议,握完手应该主动推弹幕消息了。

要造车了

晒一下自己写的demo吧。Encoder格式如上面猜的一样。

8e7bca6801b2d8ce962fc016664d3b50.png

Decoder就直接搬过来了。

8d5b34ce74ecec4d9dbd86ade2f37595.png

c48f5d32378284943a02a0a719ed45ce.png

运行结果打印的是a.i类的toString。

进一步看一下307是什么格式的消息类型。

9da569f12964855b2a24c03932a1ce35.png

ACK,学过TCP的同学就猜到这是握手了。继续就发送一些直播间相关数据了,然后就收到弹幕消息。

结语

以上就是协议分析的大概步骤,上述的主要是netty和protobuf的知识点。

其实很多im和弹幕都类似,简单的json,难一点的protobuf这种中间协议,更难就把消息加密的。重要的是确定协议,然后分析数据格式。

仅提供参考和学习,源码就不提供了。

最后于 2021-5-3 23:54

被AyonA333编辑

,原因:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值