前言
现如今直播间协议很多已经很少使用http轮询的方式获取直播间的弹幕、礼物、关注等,在用的目前知道的是某音的直播,其他的一些app已经使用socket或者websoceket获取直播间的弹幕等,本次主要针对websocket提供协议破解思路。
抓包分析
本次抓包使用的Charles+postern进行抓包websocket,Charles配置简单,抓包方便。
打开该app的直播间,在Charles中可以很清晰的看到,websocket发送的数据以及接受的推送信息。
1 |
|
ws://
也就是该websocket的明显特征,除过ws://
还有wss://
,而wss
是对应ws
的加密版本,类似http
和https
的关系。
脱壳分析定位
该app是经过加壳的,这里使用youpk进行脱壳,具体流程可看github,https://github.com/Youlor/Youpk
定位关键位置
通过抓包的关键词ctor.entryHandler.enter
在该app定位。
这个sdk就告诉我们所有了,com.netease.pomelo
,通过相关资料
1 |
|
根据网易github,https://github.com/netease/pomelo-androidclient 相关资料,其使用socket.io
进行发包,并且在logcat中可以很清晰的看到相关发送数据的日志。
但是在该数据包中直接发现有乱码,那就只能找该数据包的原始字节。
进一步的hook分析,定位到如下图位置。
通过frida进行hook打印该类,默认调用tostring
方法
1 2 3 4 5 |
|
得出如下字节数组
1 2 3 4 5 6 |
|
剩下就是发现规律,包的顺序以及发那些包,其中
51, 58, 58, 58,
就是3:::
,50, 58, 58
是2::
,那些乱码的字符,也就是对应的后半部分的字节,其中包括了发包的顺序,从0-9等。
还原协议
使用python的websocket-client
,进行还原直播间的协议通讯。
关于上述的字节,可以在java中使用base64进行编码,然后python中进行解码使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
小结
该直播app的直播间协议,在获取弹幕过程中,有部分数据是乱码形式,这部分就可以使用hook将其发送的数据以字节的形式拿到,在通过对比发送字节的不同,构造其发送的数据,最后完成协议还原。