快手弹幕 websocket 分析
声明:
本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
逆向分析
import time import requests import random def generate_random_string(t): characters = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict" result = ''.join(random.choice(characters) for _ in range(t)) return result headers = { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Language": "zh-CN,zh;q=0.9", "Cache-Control": "no-cache", "Connection": "keep-alive", "Pragma": "no-cache", } url = "" response = requests.get(url, headers=headers) html_content = response.text # 拿到token 和id发送send加密包链接直播间 def v(e): """将整个 SocketMessage 序列化为二进制""" # 创建 SocketMessage 消息 message = SocketMessage_pb2.SocketMessage() # 设置 payloadType message.payloadType = e.get('payloadType') # 获取 payload 数据并序列化 payload_data = e.get("payload", {}) print(payload_data) liveStreamId = payload_data.get("liveStreamId", "") token = payload_data.get("token", "") pageId = payload_data.get("pageId", "") serialized_message = ser(liveStreamId,token,pageId) return serialized_message r = { 'payloadType': 200, 'payload': { 'liveStreamId':liveStreamId, 'token':token, 'pageId':pageId} } binary_result = v(r) # print("二进制数据:", binary_result) ws.send(binary_result, opcode=websocket.ABNF.OPCODE_BINARY)
结果
总结
1.probuf结束,后续研究安卓。web方面除了5s基本都搞完了,今天用dp,搭建一下真机安卓环境先。
2.出于安全考虑,本章未提供完整流程,调试环节省略较多,只提供大致思路,具体细节要你自己还原,相信你也能调试出来。