← 返回总索引组队「按名字」发包分析 2026-09-16-13-19-49\组队_名字组_发包分析.md
分类:内存逆向与基址定位来源会话:2026-09-16原件:2026-09-16-13-19-49\组队_名字组_发包分析.md

组队「按名字」发包分析

★★★ 重要修正(2026-09-16 21:04,用户游戏实测确认)★★★
A440(一)不是名字定界符! 之前误把抓包首尾的 A4 40 当成固定包裹。
实测真相:你抓的两条包角色名本身就叫「一至尊霸王花一」「一至尊一美美一」
那两个 A4 40 是名字自带的「一」字的 BIG5 编码,属于名字内容。
正确结构 = 固定头 + 名字本身的 BIG5(不加任何 A440 包裹)+ 00 00 + 补零到 40。
已用 Python 验证:用新结构拼「一至尊霸王花一」逐字节 = 抓包1、拼「一至尊一美美一」逐字节 = 抓包2(完全吻合)。

来源:用户抓到的两条 组队-邀请(按名字) 发包样本
- 包1 名字 一至尊霸王花一(名字本身含首尾「一」)
- 包2 名字 一至尊一美美一
工具:analyze_team_packet.py(BIG5 解码 + 字节差分)

一、两条包逐字节对照(已验证)

偏移  包1(一至尊霸王花一)   包2(一至尊一美美一)   说明
00    00 00                00 00                ┐
02    00 00                00 00                │ 固定头(14字节)
04    30 00                30 00                │ 两包完全相同
06    14 00                14 00                │
08    01 00                01 00                │
0A    01 00                01 00                │
0C    FF FF                FF FF                ┘ 名字区起始标记
0E(14) A4 40 一            A4 40 一            ┐
10(16) A6 DC 至            A6 DC 至            │
12(18) B4 4C 尊            B4 4C 尊            │ 这是「名字本身的 BIG5」
14(20) C5 51 霸            A4 40 一   ★差异    │ (首/尾 A440 是名字自带的「一」字,
16(22) A4 FD 王            AC FC 美   ★差异    │  不是定界符!)
18(24) AA E1 花            AC FC 美   ★差异    │
1A(26) A4 40 一            A4 40 一            ┘
1C(28) 00 00                00 00                名字 null 终止
1E..   00 00 00 ...(补零到 40 字节)             填充

两包 总长均 = 40 字节,唯一差异在名字区(offset 20–25)。固定头 14 字节 + 名字区(含自带「一」) + 00 00 终止 + 补零。

二、核心结论(✅ 已二进制验证)

项目 结论
包类型 SEND(客户端→服务器)组队邀请/建队-按名字
名字编码 BIG5(每汉字 2 字节),与内存中角色名编码一致
名字区 角色名本身的 BIG5 字节,两端不加任何 A440 包裹(名字自带「一」时才含 A440,它是名字内容)
名字终止 紧跟 00 00(null 终止)
固定头 00 00 00 00 30 00 14 00 01 00 01 00 FF FF(14 字节,常量)
长度 两样本首 4 字节为 00 00 00 00 → 长度/占位字段,发送前由发包函数填实际长度(抓的是填长度之前的模板)
校验 尾部全 0,无附加 CRC/校验

BIG5 对照(已用 big5 解码验证):
=A440 =A6DC =B44C =C551 =A4FD =AAE1 =ACFC =A853 =A6B3 =A86B =AA42 =A4CD

三、结构解读(opcode 字段需游戏内再确认)

[00..03] 00 00 00 00   长度/占位(发送时填实际长度,小端)
[04..05] 30 00          疑似 opcode = 0x0030(组队相关;用你 发包.static.e.txt 比对确认)
[06..07] 14 00          0x0014=20,疑似子命令/模式
[08..09] 01 00          计数/类别 = 1
[0A..0B] 01 00          标志 = 1("按名字"模式)
[0C..0D] FF FF          名字区起始标记
[0E.. ] NAME(本身BIG5)  名字(可变长, 以 00 00 结束);名字若含「一」则自然带 A440
[   ..] 00 ...          补零到 40 字节

⚠ opcode/长度字段含义仅凭两条同类型样本推断,建议用你 发包.static.e.txt 里已有的组队发包函数交叉核对 opcode,或抓一条"长度已填"的活包确认 [00..03] 是不是长度。固定头、名字编码、以及"不加 A440 定界"是 100% 确定的。

四、易语言「按名字组队」发包构造器(修正版,不加 A440 包裹)

关键:简体名 → BIG5 → 直接拼名字本身 → 拼固定头 → 补零到 40。不要再手动包 A440。
若角色名本身带「一」(如「一至尊霸王花一」),编码_简体到BIG5 会自动把「一」编成 A440,自然包含,无需额外处理。

.版本 2

.子程序 构造_按名字组队发包, 字节集, , 返回完整发包字节集,交给你的发包函数发送
.参数 玩家名简体, 文本型, , 角色真实名字,例如 "没有男朋友" / "LOADING" / "一至尊霸王花一"
.局部变量 名包裹, 字节集
.局部变量 包头, 字节集
.局部变量 结果, 字节集

' 1) 固定包头(14字节,已验证两包完全一致)
包头 = { 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x14, 0x00, 0x01, 0x00, 0x01, 0x00, 0xFF, 0xFF }

' 2) 名字:直接 BIG5(名) + 00 00(★不加 A440 包裹)
名包裹 = 编码_简体到BIG5_字节集 (玩家名简体) + { 0x00, 0x00 }

' 3) 拼包并补零到 40 字节
结果 = 字节集_合并 (包头, 名包裹)
.如果 (取字节集长度 (结果) < 40)
    结果 = 结果 + 取重复字节集 (40 - 取字节集长度 (结果), 0)
.如果结束

返回 (结果)

注:编码_简体到BIG5_字节集 换成你模块里实际的「简体→BIG5 字节集」函数名(常见 编码_简体到BIG5 返回文本,再用 到字节集)。简体"没/有"在 BIG5 无对应单字,该模块是 GBK→BIG5 转换,会自动转成繁体「沒/有」,这正是游戏需要的。

验证小段(先打印出来核对,再发)

调试输出 (字节集_到十六进制 (构造_按名字组队发包 ("没有男朋友")))
' 应输出: 000000003000140001000100FFFFA853A6B3A86BAA42A4CD00000000000000000000000000000000

五、验证示例(已用 Python 精确生成,无 A440 包裹)

名字 完整 40 字节包(名字区=纯 BIG5)
没有男朋友 000000003000140001000100FFFFA853A6B3A86BAA42A4CD00000000000000000000000000000000
没男朋友 000000003000140001000100FFFFA853A86BAA42A4CD000000000000000000000000000000000000
LOADING(ASCII) 000000003000140001000100FFFF4C4F4144494E4700000000000000000000000000000000000000
一至尊霸王花一(名字自带一) 000000003000140001000100FFFFA440A6DCB44CC551A4FDAAE1A440000000000000000000000000
一至尊一美美一 000000003000140001000100FFFFA440A6DCB44CA440ACFCACFCA440000000000000000000000000

后两条即你原始抓包,用「名字本身 BIG5」拼法逐字节吻合,证明 A440 确为名字内容、非定界符。

六、对你自动组队的价值