You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从JavaScript重构Protocol Buffer Schema以解码WebSocket二进制消息?

从JavaScript中重构Protocol Buffer Schema的方法

一、从给定onMessage函数中提取的直接线索

你提供的onMessage函数里已经包含不少Protobuf核心信息,可直接整理出基础Schema框架:

  • 字段标签与类型:代码中通过g.tag匹配的HeaderTags枚举对应Protobuf字段标签,结合解析方法能确定字段类型:
    • PID/SID/SeqNu/Request/UserData/UniqueId/ReplyNu/ResponseId:均为int32类型(通过g.int(u)解析)
    • Response:string类型(通过g.string(u)解析)
  • 请求/响应枚举:HeaderRequests(订阅、心跳、登录等请求类型)、HeaderResponses(成功、重启、错误等响应状态)对应Protobuf中的枚举定义

基于以上可写出基础的Protobuf头部Schema:

syntax = "proto3";

enum HeaderTags {
    End = 0;
    PID = 1;
    SID = 2;
    SeqNu = 3;
    Request = 4;
    UserData = 5;
    UniqueId = 6;
    ReplyNu = 7;
    ResponseId = 8;
    Response = 9;
}

enum HeaderRequests {
    Subscribe = 1;
    Unsubscribe = 2;
    ChangeSubscriptions = 3;
    Ping = 4;
    LoginProvider = 5;
    StartRealtime = 6;
    LoginAuthentication = 7;
}

enum HeaderResponses {
    Ok = 0;
    Restart = 1;
    Error = 2;
}

message MessageHeader {
    int32 pid = 1;
    int32 sid = 2;
    int32 seq_nu = 3;
    HeaderRequests request = 4;
    int32 user_data = 5;
    int32 unique_id = 6;
    int32 segment = 7;
    HeaderResponses response_id = 8;
    string response = 9;
}

二、JS文件中需补充搜索的线索

要补全完整Schema,还得在整个JS代码中搜索以下内容:

  • Tag类的完整实现:查看是否定义了其他字段类型的解析方法(比如bool、float、bytes或嵌套消息解析)
  • Parser.next方法的逻辑:确认是否遵循标准Protobuf编码规则(如Varint、长度前缀),还是自定义编码
  • h.data(o, u, i)函数实现:这是业务消息体的核心处理逻辑,里面会包含具体数据的字段标签、类型和结构信息
  • 枚举的具体数值:找到e.HeaderTags/e.HeaderRequests/e.HeaderResponses的定义,确认每个枚举对应的整数(比如Subscribe的实际tag值)
  • 其他解析调用:搜索所有类似g.int(u)、g.string(u)的代码,统计所有出现的字段类型与对应标签

三、替代提取方案

如果JS代码混淆严重,可尝试这些方法:

  • 抓包分析二进制数据:用浏览器Network面板导出WebSocket二进制消息,结合Protobuf编码规则(如Varint格式),对比JS解析逻辑反向推导字段
  • 动态调试:在浏览器控制台给onMessage打打断点,跟踪g.tag的具体数值、解析后的数据内容,直接获取字段tag和值类型
  • 逆向工具辅助:使用protoscope、protobuf-inspector等工具导入二进制数据,结合已知字段信息辅助推导完整Schema

内容的提问来源于stack exchange,提问作者Per

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:45:29