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 编解码
  • 反爬虫签名生成
  • 异步编程

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


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

相关推荐
AI品信智慧数智人2 小时前
打破大屏局限!山东品信智慧科技数字人交互系统,实现可视化实时数据联动✨
科技·交互
2501_9400417410 小时前
前端工程化命题,覆盖性能/架构/交互
前端·交互
协享科技12 小时前
Vue 3 实现抖音式卡片滑动交互:从零到完整方案
前端·vue.js·交互·ai编程·英语·自考英语
若兰幽竹14 小时前
HarmonyOS 6.1 开发者盛宴|《灵犀厨房》实战(二十三):【交互动效】转场、列表动画与趣味反馈——让每一次点击都有温度
交互·华为鸿蒙系统·harmonyos6.1
罗超驿15 小时前
22.任务清单应用开发实战:从HTML结构到JavaScript交互的完整实现
javascript·html·交互
ZC跨境爬虫1 天前
跟着 MDN 学CSS day_36:(float、clear与BFC深度解析)
前端·javascript·css·ui·交互
爱喝水的鱼丶2 天前
SAP-ABAP:SAP 简单报表输出开发系列(共6篇)第三篇:SAP ALV 报表样式定制:字段布局与交互功能配置
服务器·开发语言·学习·交互·sap·abap
Wch1G0z8A2 天前
Slickflow.AI 基于 Harness 工程规范的多智能体交互过程实现
人工智能·交互
এ慕ོ冬℘゜2 天前
异步下拉选择组件|动态接口渲染、表单校验、交互优化全方案
交互