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

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


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

相关推荐
环黄金线HHJX.8 小时前
龙虾钳足启发的AI集群语言交互新范式
开发语言·人工智能·算法·编辑器·交互
UXbot1 天前
UXbot 是什么?一句指令生成完整应用的 AI 工具
前端·ai·交互·个人开发·ai编程·原型模式·ux
乐鑫科技 Espressif2 天前
乐鑫联合 Bosch Sensortec(博世传感器)推出磁感应交互方案
esp32·交互·乐鑫科技·博世·c磁感应·交互方案
cy_cy0023 天前
互动地面投影:优化展厅动线的智能向导
大数据·科技·人机交互·交互·软件构建
左手厨刀右手茼蒿3 天前
Flutter for OpenHarmony:mailer — 基于 SMTP 的极速邮件投递服务(适配鸿蒙 HarmonyOS Next ohos)
android·flutter·华为·交互·harmonyos
梓贤Vigo3 天前
【Axure教程】字母定位选择器
交互·产品经理·axure·原型·中继器
钛态4 天前
Flutter 三方库 result_type 深入鸿蒙强类型返回栈跨界交互适配:肃清空指针回调与运行时崩溃、大幅增注接口安全壁垒且提升多隔离桥接数据抛出健壮性-适配鸿蒙 HarmonyOS ohos
flutter·交互·harmonyos
点云SLAM4 天前
Qt+PCL手把手教材(第11讲)——PCL库PCLVisualizer点云可视化以及与 VTK 交互器(Interactor)详解和代码示例
人工智能·交互·3d数据可视化·pcl点云库·qt+pcl·pclvisualizer使用·vkt
全栈若城4 天前
HarmonyOS6 半年磨一剑 - RcInput 组件清空、密码切换与图标交互机制
架构·交互·harmonyos6·三方库开发实战·rchoui·三方库开发
结衣结衣.4 天前
【Linux】命名管道的妙用:实现进程控制与实时字符交互
linux·运维·开发语言·学习·操作系统·交互