XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 0
UTF-8

原生双客户端自动化验证

入口是 scripts/Test-NativeOnline.ps1,实际编排脚本是 scripts/capture/test_native_online.py。它使用两份已由启动器创建的隐藏游戏进程及 OnlineIntegration 的独立工作区,不操作桌面、鼠标或键盘。两份游戏必须使用不同账号和持久化配置目录,保持无网络 AppContainer,通过启动器连接同一个 HTTPS 服务器。

./scripts/Test-NativeOnline.ps1 `
  -RunDirectoryA <A的artifacts启动目录> `
  -RunDirectoryB <B的artifacts启动目录> `
  -FixtureDirectory <OnlineIntegration独立工作区目录> `
  -Python <安装了Frida的Python完整路径>

脚本要求固定 E 盘 Odyssey 版本。它验证实际原生内容检查为 Odyssey、完整存档解析返回 0,再观察两端的 SideWinder 实体。仅有两个登录会话、相同 Island/Wake 或数据包转送,都不足以通过。

实体验证同时要求原生生命周期为 Live(8),以及本次观察中原始飞船物理更新路径实际访问过该实体。后者用于排除已释放内存中残留的旧实体记录。每端必须存在两艘编号不同、且能在另一端找到同编号副本的完整飞船。

驾驶测试按 A 前进、B 前进、A 转向、B 转向执行。输入限定到本次选定的单个实体,在原生物理输入求值期间短暂设置轴值并在返回时恢复。前进读取 IShipControl 的 +0x10,角轴使用原生求值器复制到角速度需求 X 分量的 +0x50。不写入坐标、速度、就绪标志或菜单资格。

位置与姿态来自原生双精度世界矩阵缓存,按固定 getter 的选择条件只读解析。测试要求本端和对端都有多个更新样本,前进位移超过 5 米、转向超过 3 度,最终位置误差小于 0.5 米、姿态误差小于 0.2 度。原始 JSONL 保留时间、实体编号、采样值和原生 RVA。

随后调用客户端配置中的原生保存返回主菜单动作,核对中央存档中的位置和旋转向量;再通过已满足资格的 Continue/Open Play 回调重进。同一组游戏 PID 必须保留,双方重载后的两艘飞船必须恢复到服务器保存的位置与姿态。

每个 PID 只允许一个诊断助手持有 native-control.lock。其他观察脚本也使用相同互斥约定,避免重复附加。报告 native-online-validation.json 保存每项检查、四段轨迹、原始证据文件及 SHA-256。失败报告保持 passed: false,不能用后续成功的单项检查覆盖失败结果。

服务器按最后一个已提交或待提交成员离开来回收空实例;新一轮进入会获得新的 Island/Wake 编号。原生路由查询会返回已授权的逻辑 IPv4 地址,自己的机器信息在加入实例前即可查询;跨实例路由仍被拒绝。

Win32 299 加载检查

启动器不再把远程线程退出或零填充的返回区视为调用成功。调用桩保存完整 64 位返回值,并在真正返回后写入完成标记;读取子进程内存前检查进程存活、线程退出码和标记。诊断包含阶段、线程/进程退出码、实际读取字节数及 Win32 错误。

发布后的启动器支持 --loader-check。它验证 64 位返回值、提前成功退出、提前失败退出,以及隐藏诊断子进程退出后不再读取其内存。此检查不会启动游戏或打开桌面。

清理隐藏测试时,先完成原生保存,再结束该启动回执拥有的游戏子进程,让启动器正常释放桥接、配置目录锁和临时 RX 权限;不要直接强制结束启动器。生产存档、私钥和抓包仍只保存在忽略的本机目录中。

本机双客户端验证不能替代跨电脑网络可达性测试,也不覆盖战斗、NPC、跃迁或空间站交易。