Initial import of IC.Rebuild
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
# 客户端更新补丁 2026.10.06 完整适配与反汇编审计记录
|
||||
|
||||
- **日期**:2026 年 10 月 13 日
|
||||
- **新客户端版本**:国际服 `2026.10.06.0000.0000`
|
||||
- **新目标二进制**:`ffxiv_dx11.exe`(51,890,944 字节,SHA256 `B38840761E2677128B6BEC1CEAEE3F2870CD84E1D38AB7958216373058383780`)
|
||||
- **旧客户端基线**:国际服 `2026.09.15.0000.0000`(51,878,744 字节,SHA256 `5BBC501DD5C7F22FD61A11D08C25356041D878DB7CD83203ADAE393E4DFACC44`)
|
||||
- **旧二进制备份路径**:[`binaries/2026.09.15.0000.0000/ffxiv_dx11.exe`](file:///e:/SapphireServer/Dalamud%20Dev/IC.Rebuild/binaries/2026.09.15.0000.0000/)
|
||||
|
||||
---
|
||||
|
||||
## 1. 原生二进制签名全量扫描对比
|
||||
|
||||
在新版二进制 `ffxiv_dx11.exe`(`2026.10.06.0000.0000`)上对所有 23 处特征码进行完整静态扫描,**23/23 处特征码全部在新二进制中唯一定位成功**(其中 22 处为单一匹配,1 处 `NoBackswing` 包装入口匹配 2 处且首匹配正确)。
|
||||
|
||||
在扫描过程中,修正了 [`AdaptationManifest.cs`](file:///e:/SapphireServer/Dalamud%20Dev/IC.Rebuild/Core/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. 核心原生入口反汇编与结构偏移核实
|
||||
|
||||
对关键功能的原生反汇编指令和内存结构进行逐一反编译核验:
|
||||
|
||||
1. **M4 主动发包通道结构不变**:
|
||||
- `ReceiverSendPacket`(`0x1CFD120`):依然检查 `*(nint*)(rcx + 0xA70)`(`ZoneClient` 指针),为空则直接返回 `0`;非空则调用 `ZoneClientSendPacket`。
|
||||
- `ZoneClientSendPacket`(`0x1D03020`):依然检查 `*(nint*)(rcx + 0x98)`,调用底层网络发送函数 `ZoneUp`(`0x1D72B00`)。
|
||||
- `ZoneUp`(`0x1D72B00`):发送数据缓冲区协议完全未变(`+0x00`: Opcode, `+0x08`: TotalSize, `+0x20`: Payload)。
|
||||
2. **模块 36 原始收发包 Hook 结构不变**:
|
||||
- `ZoneDown`(`0x1D72680`):检查 `*(nint*)(rcx + 0x88)`,下行载荷解包偏移完全一致。
|
||||
3. **模块 8 状态屏蔽结构不变**:
|
||||
- `StatusSetter`(`0x8A6A30`):汇编代码仍为 `83 FA 3C`(`cmp edx, 3Ch` 即 60 个状态栏槽位),槽位大小依然为 12 字节。
|
||||
- `LocalPlayerPtr`(`0xB37D0A`):依然调用虚函数表 `+0x278`(`FF 90 78 02 00 00`),读取本地玩家。
|
||||
4. **模块 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. 自动化验证与部署
|
||||
|
||||
1. **测试套件**:84/84 项单元测试全部一次性通过(涵盖双版本适配清单核验、门控行为、网络管线、M4 原生缓冲区分组、状态阻断等)。
|
||||
2. **发布与备份**:
|
||||
- 旧版本 `0.1.15` 已备份至 [`deploy-backups/0.1.15-before-0.1.16/`](file:///e:/SapphireServer/Dalamud%20Dev/IC.Rebuild/deploy-backups/0.1.15-before-0.1.16/)。
|
||||
- 新版本 `0.1.16.0` 已部署至 `%APPDATA%\XIVLauncher\dev\ICRebuild`。
|
||||
Reference in New Issue
Block a user