找回密码
 registerss
搜索
查看: 41|回复: 0

洱海月 v0-07-0300 封包解析:ID 778 CGLoginAcc(登录账号数据提交)

[复制链接]
  • 打卡等级:本地老炮
  • 打卡总天数:603
  • 打卡月天数:1
  • 打卡总奖励:600
  • 最近打卡:2026-10-03 06:32:28
Waylee 发表于 2026-4-13 23:27 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

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

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

×

CGLoginAcc 是客户端提交登录账号数据的变长请求包。当前 Game.exe 与现役 /home/ubuntu/Game2 Lua 都能确认:它的包体结构为 1 字节长度 + 长度字节串,并且长度会被限制在 0x32(50)字节以内。

包信息

项目 内容
封包 ID 778
包名 CGLoginAcc
方向 CG 客户端 -> 服务端
包长 变长,1 + N,其中 N <= 50
专用回包 无专用回包
当前 Lua 协议定义 /home/ubuntu/Game2/services/game/packet.lua
当前 Lua 请求入口 未在现役主链中检出
当前用途 按包名和字段形态推断,用于提交登录账号 / 认证数据

当前 Game.exe 可直接确认:

GetPacketID()   = 778;
GetPacketSize() = min(size, 50) + 1;
Read()          = read_u8_size + read_bytes(size);
Write()         = write_u8_size + write_bytes(size);
Execute()       = 2;

包体结构

按当前 Game.exe 与现役 Lua packet.lua,包体结构如下:

偏移 长度 字段 类型 含义
0x00 0x01 size uint8 后续数据长度;当前 Game.exe 与 Lua 都会把它截断到 0x32
0x01 size data bytes[size] 登录数据负载;当前 Lua 只按原始字节串保存,不做进一步解包

长度规则:

packet_size = 1 + min(size, 50)

字段命名说明:

  • size 与 data 可以直接由现役 /home/ubuntu/Game2/services/game/packet.lua 确认。
  • “登录账号数据提交”属于基于包名 CGLoginAcc 和字段形态作出的语义推断;当前现役 Lua 未检出同名处理入口,因此无法进一步把 data 精确命名为“账号名”“票据”或“Token”。

当前实际行为

  • 当前 Game.exe 在读取这条包时,会先读取 size,如果 size > 0x32,就强制截断为 50。
  • 截断后再按 size 读取对应字节数的 data。
  • 写包逻辑与读包一致:如果内部 size 大于 50,发包时也只会写出 50。
  • GetPacketSize() 同样以 min(size, 50) + 1 计算,因此这条包在当前链路中的最大长度是 51 字节。
  • 当前现役 /home/ubuntu/Game2 主链里只保留了协议定义,没有检出:
    • request:CGLoginAcc()
    • services/login 下的同名处理入口
    • services/scene 或 services/msgagent.lua 中的同名分发逻辑
  • 这说明从现役 Lua 角度看,CGLoginAcc 更接近“协议保留定义”,而不是当前已经落地的 Lua 登录处理链。
  • 当前 Game.exe 里的 Execute() 只是直接返回 2,没有额外本地逻辑。
  • 现役 Lua 也没有对应的 GCLoginAcc 或 LoginAccResult 专用回包定义,因此当前文档按“无专用回包”处理。

服务端落点

当前现役服务端能确认的落点如下:

  • /home/ubuntu/Game2/services/game/packet.lua
    • 定义 packet.XYID_CG_LOGIN_ACC = 778
    • packet.CGLoginAcc.bis() 读取 size 和 data

当前现役主链未检出以下同名接入:

  • /home/ubuntu/Game2/services/msgagent.lua
  • /home/ubuntu/Game2/services/login
  • /home/ubuntu/Game2/services/scene/scenecore.lua
  • /home/ubuntu/Game2/services/scene/obj/human.lua

因此,当前项目里可以确认“协议结构存在”,但不能确认“现役 Lua 登录链仍在消费这条包”。

关键代码

当前 Game.exe 结构

__int64 GetPacketID() {
    return 778;
}

__int64 GetPacketSize(Packet *pkt) {
    return (pkt->size <= 0x32 ? pkt->size : 50) + 1;
}

__int64 Read(Packet *pkt, Stream *s) {
    s->Read(&pkt->size, 1);
    if (pkt->size > 0x32)
        pkt->size = 50;
    s->Read(pkt->data, pkt->size);
    return 1;
}

__int64 Write(Packet *pkt, Stream *s) {
    uint8_t size = pkt->size <= 0x32 ? pkt->size : 50;
    s->Write(&size, 1);
    s->Write(pkt->data, size);
    return 1;
}

__int64 Execute() {
    return 2;
}

当前 Lua 协议定义

packet.CGLoginAcc = {
    xy_id = packet.XYID_CG_LOGIN_ACC,
    ctor = function(self)
        self.size = 0
        self.data = ""
    end,
    bis = function(self, buffer)
        local stream = bistream.new()
        stream:attach(buffer)
        self.size = stream:readuchar()
        if self.size > 0x32 then self.size = 0x32 end
        self.data = stream:read(self.size)
    end
}

结论

  1. CGLoginAcc 是一条变长请求包,当前结构为 uint8 size + bytes[size]。
  2. 当前 Game.exe 与现役 Lua 都明确把 size 上限限制为 50,所以最大包长为 51 字节。
  3. 当前链路里可以确认字段名只有 size 和 data;“登录账号数据”属于基于包名的语义推断,不能进一步断定为具体账号名或某种固定票据格式。
  4. 现役 /home/ubuntu/Game2 主链未检出同名请求处理入口,因此当前只能确认协议定义存在,不能确认它仍在现役 Lua 登录链中被消费。
  5. 当前 Game.exe 的 Execute() 没有额外逻辑,现役 Lua 也未见专用结果包定义,因此本文按“无专用回包”处理。
您需要登录后才可以回帖 登录 | registerss

本版积分规则

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

GMT+8, 2026-10-4 11:26 , Processed in 0.069588 second(s), 26 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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