TikTok 私信实时交互客户端:从逆向到实现指南

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 函数)

发送消息需要经过两层编码:

  1. tQ 函数:编码请求体
  2. 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 获取认证参数

  1. 打开浏览器,访问 TikTok 网页版
  2. 登录账号,进入消息页面
  3. 打开开发者工具(F12),切换到 Network 标签
  4. 找到 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))

六、注意事项

⚠️ 重要提示:

  1. 仅供学习研究使用,请勿用于商业用途
  2. 频繁使用可能导致账号被限制
  3. 认证参数有有效期,需要定期更新
  4. TikTok 协议可能随时变更,需要跟进调整

七、总结

这个项目完整展示了如何逆向和实现一个实时 IM 客户端,涉及的技术点包括:

  • WebSocket 通信
  • Protobuf 编解码
  • 反爬虫签名生成
  • 异步编程

希望这篇文章对你有所帮助!如果有任何问题,欢迎在评论区交流。


原创声明:本文为原创技术文章,转载请注明出处。

相关推荐
派葛穆1 天前
Unity-鼠标悬停改变图像位置
unity·计算机外设·交互
青稞社区.1 天前
ROLL 团队分享:面向多轮交互 Agentic 场景的 Rollback 课程学习机制探索与实践
人工智能·经验分享·学习·交互
xgstb1 天前
如何使用C#与SQL Server数据库进行交互
数据库·c#·交互
JamesYoung79712 天前
第五部分 — 内容脚本与页面交互 DOM 访问模式与安全桥接
安全·交互
梦想的旅途22 天前
企微机器人接口:高并发私域交互与自动化的底层支撑
机器人·交互·企业微信
夫唯不争,故无尤也2 天前
Agent 开发者如何快速上手 SQL:从表设计到 Python 交互的一篇实战入门
python·sql·交互
天空属于哈夫克32 天前
域群运营机器人:实现大规模社群标准化管理与自动化交互
机器人·自动化·交互
梦想的旅途22 天前
企微群自动回复机器人:基于 API 的社群交互与自动化响应方案
机器人·交互·企业微信
AC赳赳老秦2 天前
2026国产大模型协同趋势:以DeepSeek为枢纽,构建高效智能协作网络
大数据·网络·人工智能·搜索引擎·交互·ai-native·deepseek