找回密码
 registerss
搜索

洱海月 v0-07-0300 封包解析:ID 972 WGCAladdinToken(阿拉丁令牌返回)

[复制链接]
Waylee 发表于 2026-4-15 17:39 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?registerss

×

WGCAladdinToken 是 CGWAskAladdinToken(971) 的直接回包。当前 Game.exe 能明确确认它固定长度为 26 字节,由 2 + 4 + 16 + 4 四段组成;客户端真正消费的是中间 16 字节令牌数据和最后的结果标记。

包信息

项目 内容
封包 ID 972
包名 WGCAladdinToken
方向 WGC 消息服 -> 客户端
包长 26 字节
对应请求 CGWAskAladdinToken (971)
当前 Lua 协议定义 /home/ubuntu/Game2/services/game/packet.lua
当前消息服发送 /home/ubuntu/Game2/services/msgagent.lua
主要作用 返回一段 16 字节令牌数据及结果标记

当前 Game.exe 虚函数结论:

GetPacketID()   = 972;
GetPacketSize() = 26;
Read()          = 0x140622CD0;
Write()         = 0x140622D40;
Execute()       = 0x140622CC0 -> 0x140098BF0;

包体结构

偏移 长度 字段 类型 含义
0x00 0x02 reserved_1 uint16 当前客户端执行链未直接消费
0x02 0x04 reserved_2 uint32 当前客户端执行链未直接消费
0x06 0x10 token_data char[16] 16 字节令牌正文
0x16 0x04 result_flag uint32 结果标记;当前客户端按它决定是否写入本地令牌缓存

当前实际行为

  1. 客户端收到回包后,会先检查 result_flag。
  2. 当 result_flag != 0 时,客户端会把 token_data 写入本地缓存,并执行两步令牌刷新流程。
  3. 当 result_flag == 0 时,客户端不会把 token_data 落到本地缓存,只执行一条状态刷新链。
  4. 无论是否成功,客户端最后都会把 result_flag 继续传给后续处理函数。

当前 Lua 消息服实现如下:

  • reserved_1 = 6114
  • reserved_2 = 270213680
  • token_data = 固定 16 字节
  • result_flag = 0

这意味着现行 Lua 返回的是一条固定内容、且不会让客户端真正缓存令牌的返回包。

服务端落点

  • 协议定义:
    • /home/ubuntu/Game2/services/game/packet.lua
  • 消息服发送:
    • /home/ubuntu/Game2/services/msgagent.lua

关键代码

当前 Lua 协议定义

packet.WGCAladdinToken = {
    xy_id = packet.XYID_WGC_AlADDIN_TOKEN,
    ctor = function(self)
        self.reserved_1 = 0
        self.reserved_2 = 0
        self.token_data = ""
        self.result_flag = 0
    end,
    bos = function(self)
        local stream = bostream.new()
        stream:writeushort(self.reserved_1)
        stream:writeuint(self.reserved_2)
        stream:write(self.token_data, 0x10)
        stream:writeuint(self.result_flag)
        return stream:get()
    end
}

当前 Game.exe 执行逻辑

if (result_flag != 0) {
    cache_token(token_data);
    refresh_token_state();
    refresh_token_ui();
} else {
    refresh_token_state();
}
dispatch_result_flag(result_flag);

结论

WGCAladdinToken 是一条固定 26 字节的阿拉丁令牌返回包。当前客户端真正关心的是 token_data 和 result_flag;现行 Lua 消息服虽然会回这条包,但固定把 result_flag 置为 0,因此客户端不会把返回的 16 字节令牌真正写入本地缓存。

您需要登录后才可以回帖 登录 | registerss

本版积分规则

QQ|手机版|雪舞知识库 ( 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 )

GMT+8, 2026-10-24 13:01 , Processed in 0.045817 second(s), 27 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表