首页
社区
课程
招聘
[原创]某直播弹幕协议分析
2021-5-3 23:52 9912

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

2021-5-3 23:52
9912

看似经验之谈,但是凭感觉

  1. 抓包工具抓不到任何相关信息可判断不是http类协议,应该是长连接。

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

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

如何证明呢?

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

上图应该是connect函数。

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

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


准备造轮

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

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

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

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

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

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



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

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

先找一下那些消息类型。

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

要造车了

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

Decoder就直接搬过来了。

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


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

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

结语

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

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

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





阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

最后于 2021-5-3 23:54 被AyonA333编辑 ,原因:
收藏
免费 1
打赏
分享
打赏 + 5.00雪花
打赏次数 1 雪花 + 5.00
 
赞赏  mb_pjstvlyw   +5.00 2021/09/29 星巴克app里有个二维码 抓出协议对接网站 在网站上显示星巴克app里的二维码 (二维码的功能是付款和使用优惠券) 预算5000 能做联系我qq205697368
最新回复 (4)
雪    币: 1701
活跃值: (1345)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hanhaochi 2021-5-4 15:44
2
0
谢谢分享
雪    币: 1155
活跃值: (2084)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ADR66 2021-5-5 20:00
3
0
课件发下。练手
雪    币: 0
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
play888 2021-5-6 17:47
4
0
谢谢分享,想请教下某信的一些协议,麻烦指点下
雪    币: 1155
活跃值: (2084)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ADR66 2021-5-7 22:35
5
0
课件链接发下
游客
登录 | 注册 方可回帖
返回