5.9 KiB
5.9 KiB
客户端更新补丁 2026.10.06 完整适配与反汇编审计记录
- 日期:2026 年 10 月 13 日
- 新客户端版本:国际服
2026.10.06.0000.0000 - 新目标二进制:
ffxiv_dx11.exe(51,890,944 字节,SHA256B38840761E2677128B6BEC1CEAEE3F2870CD84E1D38AB7958216373058383780) - 旧客户端基线:国际服
2026.09.15.0000.0000(51,878,744 字节,SHA2565BBC501DD5C7F22FD61A11D08C25356041D878DB7CD83203ADAE393E4DFACC44) - 旧二进制备份路径:
binaries/2026.09.15.0000.0000/ffxiv_dx11.exe
1. 原生二进制签名全量扫描对比
在新版二进制 ffxiv_dx11.exe(2026.10.06.0000.0000)上对所有 23 处特征码进行完整静态扫描,23/23 处特征码全部在新二进制中唯一定位成功(其中 22 处为单一匹配,1 处 NoBackswing 包装入口匹配 2 处且首匹配正确)。
在扫描过程中,修正了 AdaptationManifest.cs 中 ForcedWalkHook 的签名字符串笔误(???? 修正为标准的 ?? ?? 分隔通配符),成功定位到新 RVA 0x194AFE3。
23 处 Hook 与函数入口 RVA 偏移位移对照表
| 序号 | 目标名称 | 模块 ID | 旧版本 RVA (2026.09.15) | 新版本 RVA (2026.10.06) | RVA 偏移量 | 匹配数 | 状态 |
|---|---|---|---|---|---|---|---|
| 1 | SpeedHook |
1 | 0x8D6E40 |
0x8D6AF0 |
-0x350 | 1 | 匹配 |
| 2 | AccelerationHook |
2 | 0x182BB20 |
0x182BB40 |
+0x20 | 1 | 匹配 |
| 3 | MovePermissionHook |
3 | 0xE16130 |
0xE16030 |
-0x100 | 1 | 匹配 |
| 4 | AntiKnockHook |
4 | 0x90BC90 |
0x90B650 |
-0x640 | 1 | 匹配 |
| 5 | OnSendFlagHook |
5 | 0x62AF60 |
0x62B050 |
+0xF0 | 1 | 匹配 |
| 6 | FallCheckHook |
6 | 0x182F9E4 |
0x182FA04 |
+0x20 | 1 | 匹配 |
| 7 | ForcedWalkHook |
7 | 0x194AEC3 |
0x194AFE3 |
+0x120 | 1 | 匹配 |
| 8 | StatusSetter |
8 | 0x8A6BF0 |
0x8A6A30 |
-0x1C0 | 1 | 匹配 |
| 9 | LocalPlayerPtr |
8 | 0xB37D7A |
0xB37D0A |
-0x70 | 1 | 匹配 |
| 10 | OnSendNormalMove |
9 | 0x62B680 |
0x62B770 |
+0xF0 | 1 | 匹配 |
| 11 | OnSendCombatMove |
9 | 0x62B730 |
0x62B820 |
+0xF0 | 1 | 匹配 |
| 12 | ActorRadius |
14 | 0x175728F |
0x175720F |
-0x80 | 1 | 匹配 |
| 13 | NativeTargetRingUpdate |
14 | 0x7B5430 |
0x7B52D0 |
-0x160 | 1 | 匹配 |
| 14 | NoBackswing |
15 | 0x8D6F30 |
0x8D6BE0 |
-0x350 | 2 (首匹配有效) | 匹配 |
| 15 | ActionMovementStart |
16 | 0x1822510 |
0x1822530 |
+0x20 | 1 | 匹配 |
| 16 | SyncRecast |
17 | 0x8EF260 |
0x8EEC20 |
-0x640 | 1 | 匹配 |
| 17 | CastStaticAddress |
19 | 0x104F17 |
0x104FF7 |
+0xE0 | 1 | 匹配 |
| 18 | CastUpdate |
19 | 0x8E00A0 |
0x8DFA60 |
-0x640 | 1 | 匹配 |
| 19 | SetScale |
29 | 0x899720 |
0x899560 |
-0x1C0 | 1 | 匹配 |
| 20 | ZoneUp |
36 | 0x1D718C0 |
0x1D72B00 |
+0x1240 | 1 | 匹配 |
| 21 | ZoneDown |
36 | 0x1D71440 |
0x1D72680 |
+0x1240 | 1 | 匹配 |
| 22 | ReceiverSendPacket |
M4 | 0x1CFD140 |
0x1CFD120 |
-0x20 | 1 | 匹配 |
| 23 | ZoneClientSendPacket |
M4 | 0x1D03040 |
0x1D03020 |
-0x20 | 1 | 匹配 |
2. 核心原生入口反汇编与结构偏移核实
对关键功能的原生反汇编指令和内存结构进行逐一反编译核验:
- M4 主动发包通道结构不变:
ReceiverSendPacket(0x1CFD120):依然检查*(nint*)(rcx + 0xA70)(ZoneClient指针),为空则直接返回0;非空则调用ZoneClientSendPacket。ZoneClientSendPacket(0x1D03020):依然检查*(nint*)(rcx + 0x98),调用底层网络发送函数ZoneUp(0x1D72B00)。ZoneUp(0x1D72B00):发送数据缓冲区协议完全未变(+0x00: Opcode,+0x08: TotalSize,+0x20: Payload)。
- 模块 36 原始收发包 Hook 结构不变:
ZoneDown(0x1D72680):检查*(nint*)(rcx + 0x88),下行载荷解包偏移完全一致。
- 模块 8 状态屏蔽结构不变:
StatusSetter(0x8A6A30):汇编代码仍为83 FA 3C(cmp edx, 3Ch即 60 个状态栏槽位),槽位大小依然为 12 字节。LocalPlayerPtr(0xB37D0A):依然调用虚函数表+0x278(FF 90 78 02 00 00),读取本地玩家。
- 模块 2 最大加速度结构不变:
AccelerationHook(0x182BB40):依然核对偏移+0x20、+0x3C、+0x44与 owner+0x3E0。
3. 网络协议与 Opcode 变动核实
SE 在本次 2026.10.06 补丁中对 Opcode 编号进行了全量重排:
UP_PingReq:旧版为838(0x346),新版更新为137(0x89)。DOWN_PingRsp:依然为338(0x152)。- 由于模块 36 属于通用二进制载荷抓取,无需等待所有 Opcode 逆向即可正常捕获和导出所有数据包。
XIVLauncher本地配置opcodes.json已追加2026.10.06.0000.0000节点,Ping 对齐功能可立即正常显示。
4. 双版本向后兼容设计(Dual-Version Support)
为确保过渡平滑与回滚安全,代码更新为支持双审计版本:
- 当前审计版本(
AuditedClientVersion):2026.10.06.0000.0000 - 兼容基线版本(
BaselineClientVersion):2026.09.15.0000.0000 IsAuditedVersion(v)同时认可两者,未在审计名单中的未知版本(如2026.99.99)继续受 M0 严格门控保护。
5. 自动化验证与部署
- 测试套件:84/84 项单元测试全部一次性通过(涵盖双版本适配清单核验、门控行为、网络管线、M4 原生缓冲区分组、状态阻断等)。
- 发布与备份:
- 旧版本
0.1.15已备份至deploy-backups/0.1.15-before-0.1.16/。 - 新版本
0.1.16.0已部署至%APPDATA%\XIVLauncher\dev\ICRebuild。
- 旧版本