9

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

 3 years ago
source link: https://bbs.pediy.com/thread-267329.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
[协议分析] [原创]某直播弹幕协议分析
2021-5-3 23:52 1862

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

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

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

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

如何证明呢?

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

807809_9UDCYNCHJKBW2MN.jpg

上图应该是connect函数。

807809_SW5Z56BXEEUA2Y2.jpg

807809_7EG2GEA7FCFTNZR.jpg

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

807809_EV8YT774PZSK9CM.jpg

807809_J7MR9ZGZ6HWB6Z2.jpg

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

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

807809_N8B4V6RMUBHH65H.jpg

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

807809_JZPTH4YFFREYVVM.jpg

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

807809_ZVHJ68EBETJZKT6.jpg

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

807809_6CMJFG2P3YV8DW3.jpg

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

807809_BBT9AA55WDDYAWN.jpg

807809_Y99HKGV85YC6JCE.jpg

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

807809_GSZYEV3DB3S49D5.jpg

A2CJZ3MYVDY5CRF.jpg

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

807809_MUR3D6R5PKFPRFT.jpg

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

先找一下那些消息类型。

807809_BHGPWWSXSXMGTGF.jpg

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

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

807809_BAEP7YZE8BP2XGB.jpg

Decoder就直接搬过来了。

807809_VFMM7Y8RP23H7NF.jpg

807809_7D9HV75P3V94A8U.jpg

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

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

807809_B3SQKJZ7N44RTRP.jpg

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

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

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

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

第五届安全开发者峰会(SDC 2021)议题征集正式开启!

最后于 2021-5-3 23:54 被AyonA333编辑 ,原因:

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK