淘宝直播长连接弹幕分析(无乱码)
淘宝的powermsg真是个无比神奇的东西,因为现在已经过时了,特地拿出来说道一下:
- powermsg的相关接口最早是可以直接拿到pv、uv、甚至当前在线人数,这玩意没记错的话在19年下半年被封了
- 上边的powermsg接口被封了之后仍然可以通过websocket或nativemsg拿到上边的数据,只是没有那么方便,这玩意在20年下半年被封了
- 淘宝的封是简单粗暴的把和淘宝直播相关的topic数据改成固定值或者随机数,所以对分析协议没有影响
- 目前淘宝直播的powermsg(可以说web版)已经下线,可以去同源的1688直播看看,以下内容也是基于1688直播
拿到数据
nativemsg
简单方便,直接调用接口,有topic就行。拿到的data
如下
timestampList->data
是具体的数据,需要去除所有空格,无压缩就是单纯的base64
1 |
|
websocket
websocket的建立比较麻烦,不是本文的重点,onmessage拿到如下数据
data
就是需要的数据,这里需要根据compressType
来进行解压
1 |
|
简单逆向
上面预处理之后的数据应该是一个byte数组,那么怎么将它变成可视的数据呢
通过简单逆向找到了powermsg对这个byte数组的处理,代码如下
1 |
|
简单易懂,有手就能还原,这里总结下,不给出具体代码
- 不用在意t,把它当成预处理后的byte数组即可
- r就是t的索引,顺序读,读出一个byte的地方没有什么太大的意义
- 读取两个byte的地方和之后的地方是实际需要的数据
- uint16那里的处理等同于左移8位相加,就是buffer长度使用了2个byte定义
- 唯一的if是在说:我这里不一定只有一个data块;一个msg可以解析出多条数据
更进一步
上面每条msg解析出来的多个数据上都能拿到3个buffer
- msgHeaderBuffer: 没有太大意义
- msgBodyBuffer: 有时候会有用
- msgDataBuffer: 意义重大
msgDataBuffer
这里就直接是多行文本或者json字符串,直接视为string即可
msgHeaderBuffer和msgBodyBuffer
这两个虽然不常用,但也说一下,使用protobuf的Any解析后自行还原即可,非常简单
示例
上面websocket里的data解析后如下,有两条数据,我这里并没有写proto文件
1 |
|
淘宝直播长连接弹幕分析(无乱码)
https://back.pub/post/spirder-taobao-websocket-danmu/