本文内容仅作学习参考,如侵权,请联系删除。
这次是关于匿名采集的分析,其中会涉及到以下几个只是点,websocket,protobuf,protobuf反序列化。
这里以web端的websocket做分析。
首先你需要将非匿名的代码给跑起来,基于此,才能研究非匿名的,否则一切都是空谈。
在非匿名的代码里,获取到wss的时候,主要解析2层,第一层是这样的。
这一层的作用是解析除了payload之外的数据,这些数据在发心跳包的时候会用到,
然后就解析这个二进制的payload,他是一个被gzip压缩的数据,直接用gzip解压即可
解压后的数据是一堆看似乱码的东西,这个也是最原始的数据,所有秘密都藏在这个里面。这里我们将解压的数据以bin文件的形式存在本地,然后先答题看一下数据,这个是匿名的直播数据。
正常的非匿名直播,他是有一个sec_user_id的东西可以获取到,但是在匿名直播里,他只有一个web_castuser_id,这个东西可以通过hook浏览器验证,这里要提一嘴,浏览器hook出来的数据,还不是最完整的,因为他是通过protobuf序列化之后出来的,有些字段他可能并没有在序列化里面,就不显示出来,所以最好的办法还是直接看解压的原始数据,一个一个看。
我们先看下进入的消息类型,这里需要关注一下这个东西。
这个东西也是抖音的一个id,他的全名暂且叫他target_uid,这个uid也是用户信息的一种
通过此接口可以查询到,https://live.douyin.com/webcast/user/?aid=8663&target_uid=9xxxxxx9
然后获取到了这个uid的位置之后,要怎么写proto序列化数据?这里直接用blackprotobuf数据去反序列化,看下这个东西的结构是什么样,然后根据结构去反推proto,把proto文件补全,编译之后,他就可以用了,以下为示例代码。
import blackboxprotobuf
import json
from loguru import logger
if __name__ == '__main__':
with open(f'./bin/vWzYmhbh.bin', 'rb') as f:
data = f.read()
# deserialize, message_type = blackboxprotobuf.decode_message(data)
deserialize, message_type = blackboxprotobuf.protobuf_to_json(data)
info = json.loads(deserialize)
logger.info(info)
将反序列化输出的json数据格式化一下,就可以清晰的看到没一层的数据,然后根据protobuf的语法去写就可以了。
到此,进入的消息类型就分析完了,然后是礼物的消息类型,关于礼物的类型,这个会复杂一些,因为他不提容易被找到,关于验证方式,可以按照以下方式进行验证。
首先准备一个抖音号,并且你要获取到自己抖音号的uid,也就是前面说的那个target_uid,记录下来。
然后进到一个直播间,在进入直播间之前,你要先将脚本运行起来监控数据,并且保证将数据解压保存为本地,运行起来之后,你往直播间刷几个小心心,刷完之后,停止监控,然后将你的target_uid,去刚刚保存的所有消息文件中搜索,就可以搜索到了,搜索到了之后,就可以按照上面的方式,写proto文件,然后解析获取。
上面这些就是礼物和进入的获取分析。