TikTok 私信实时交互客户端:从逆向到实现指南
前言
可以关注我哟,一起学习,主页有更多练习例子
如果哪个练习我没有写清楚,可以留言我会补充
如果有加密的网站可以留言发给我,一起学习共享学习路程
如侵权,联系我删除
此文仅用于学习交流,请勿于商用,否则后果自负
其实和某音差不了多少,不是很难,稍微跟一下就出来
一、项目概述:
- ✅ WebSocket 实时连接 TikTok IM 服务器
- ✅ 实时监听和解析收到的消息
- ✅ 发送文本消息功能
- ✅ Protobuf 数据编解码
- ✅ X-Bogus 签名生成
技术栈:
- 后端:Python 3 + asyncio
- 前端辅助:Node.js
- 协议:WebSocket + Protobuf
二、核心功能详解
3.1 WebSocket 连接建立
首先需要获取必要的认证参数,这些参数可以从浏览器开发者工具中获取:
python
WS_URL = "wss://im-ws.tiktok.com/ws/v2"
PARAMS = {
"aid": "1459",
"fpid": "9",
"access_key": "",
"device_platform": "web",
"ttwid": "...",
"Web-Sdk-Ms-Token": "..."
}
连接代码:
python
async with websockets.connect(
full_url,
subprotocols=["binary", "base64", "pbbp2"],
additional_headers=headers,
ssl=ssl_context
) as ws:
# 连接成功后的处理
3.2 Protobuf 解析器实现
项目实现了一个自定义的 Protobuf 解析器,用于解析 TikTok 的二进制消息:
python
class ProtobufParser:
def parse(self, data: bytes) -> List[ProtoField]:
self.data = data
self.position = 0
fields = []
while self.position < len(self.data):
field = self._parse_field()
if field:
fields.append(field)
return fields
支持的 wire types:
- VARINT (0)
- 64BIT (1)
- LENGTH_DELIMITED (2)
- 32BIT (5)
3.3 消息编码(tQ 和 t2 函数)
发送消息需要经过两层编码:

- tQ 函数:编码请求体
- t2 函数:编码外层 Frame
python
def tQ(request: Dict[str, Any]) -> bytes:
writer = ProtoWriter()
# 编码各个字段...
return writer.get_bytes()
def t2(frame: Dict[str, Any]) -> bytes:
writer = ProtoWriter()
# 编码 Frame...
return writer.get_bytes()
3.4 X-Bogus 签名生成
TikTok API 需要 X-Bogus 签名来防止请求被拦截,项目通过 Node.js 调用核心算法:
javascript
const result = sandbox.get_signature({"X-MS-STUB": md5Hash});
Python 调用方式:
python
def generate_xbogus(payload_bytes):
md5_hash = hashlib.md5(payload_bytes).hexdigest()
result = subprocess.run(
['node', script_path, md5_hash],
capture_output=True,
text=True
)
return signature_data.get('X-Bogus', '')
四、使用方法
4.1 环境准备
bash
# 安装 Python 依赖
pip install websockets
# 安装 Node.js 依赖
npm install
4.2 获取认证参数
- 打开浏览器,访问 TikTok 网页版
- 登录账号,进入消息页面
- 打开开发者工具(F12),切换到 Network 标签
- 找到 WebSocket 连接,复制以下参数:
- Cookie
- ttwid
- Web-Sdk-Ms-Token
- 其他必要的 headers
五、关键代码解析
5.1 消息发送流程
python
async def send_message(conversation_id, text):
# 1. 构建请求数据
request_data = {
"headers": {...},
"body": {...},
"cmd": 100,
...
}
# 2. 编码请求
tq_result = tQ(request_data)
# 3. 生成签名
x_bogus = generate_xbogus(tq_result)
# 4. 构建 Frame
frame_data = {...}
# 5. 编码 Frame
t2_result = t2(frame_data)
# 6. 发送
await websocket.send(t2_result)
5.2 消息接收处理
python
async def handle_message(message):
if isinstance(message, bytes):
parser = ProtobufParser()
fields = parser.parse(message)
if fields:
structured_json = format_to_structured_json(fields, message)
print(json.dumps(structured_json, indent=2, ensure_ascii=False))
六、注意事项
⚠️ 重要提示:
- 仅供学习研究使用,请勿用于商业用途
- 频繁使用可能导致账号被限制
- 认证参数有有效期,需要定期更新
- TikTok 协议可能随时变更,需要跟进调整
七、总结
这个项目完整展示了如何逆向和实现一个实时 IM 客户端,涉及的技术点包括:
- WebSocket 通信
- Protobuf 编解码
- 反爬虫签名生成
- 异步编程
希望这篇文章对你有所帮助!如果有任何问题,欢迎在评论区交流。
原创声明:本文为原创技术文章,转载请注明出处。