CreeperUX/war-thunder-acmi

GitHub: CreeperUX/war-thunder-acmi

War Thunder 回放文件(.wrpl)的本地纯命令行无损解包器,负责版本校验、数据提取与完整性验证,为空战运动学分析与复盘提供结构化数据基础。

Stars: 0 | Forks: 0

# War Thunder Air Combat Maneuvering Instrumentation **WT ACMI — WRPL Extractor** WT ACMI 是面向 War Thunder `.wrpl` 回放的本地命令行解包器。当前仓库只保留 检查、无损提取、运动数据导出和完整性校验能力;不包含 GUI、本地网页服务、 2D/3D Viewer 或 Tacview `.acmi` 转换器。 当前解析器锁定 WRPL 版本 `0x18c0b`。未知版本默认拒绝,避免把变化后的协议 布局静默解释成错误数据。 ## 快速开始 要求 Python 3.10 或更高版本,不依赖第三方 Python 包。 python -m wrpl_tool inspect "D:\War Thunder\Replays\example.wrpl" python -m wrpl_tool extract "D:\War Thunder\Replays\example.wrpl" python -m wrpl_tool verify "D:\War Thunder\Replays\example.wrpl-extracted" 直接传入回放路径等价于 `extract`: python -m wrpl_tool "D:\War Thunder\Replays\example.wrpl" 也可以安装命令行入口: python -m pip install -e . wrpl-extractor inspect "example.wrpl" 为避免破坏已有自动化,`wt-acmi`、`wrpl-tool` 和 `sortiescope` 仍作为同一 纯解包 CLI 的兼容别名;它们不再提供 GUI 子命令。 运行 `python -m wrpl_tool --help` 或 `python -m wrpl_tool <命令> --help` 查看完整参数。 ## 命令 ### `inspect` 只读取并验证回放,不创建提取目录。摘要包括文件哈希、版本、包数量、轨迹数量、 运动点数量、聊天解码结果和解析警告。 python -m wrpl_tool inspect "example.wrpl" python -m wrpl_tool inspect "example.wrpl" --json ### `extract` 默认在回放旁创建 `<文件名>.wrpl-extracted`。输出目录非空时不会覆盖;只有 指定 `--overwrite` 后,工具才会事务式替换旧 manifest 管理且未经修改的文件, 其他用户文件会保留。 python -m wrpl_tool extract "example.wrpl" -o "D:\Analysis\example" python -m wrpl_tool extract "example.wrpl" --overwrite 已由外部证据确认的 WeaponSync 实体可用 `--label` 命名。标签来源会明确写入 manifest,不会伪装成 WRPL 内置型号字段。 python -m wrpl_tool extract "example.wrpl" ` --label 0x7c05=AIM-120C-8 ` --label 0x8405=Meteor ### `verify` 按 `manifest.json` 重新计算所有产物哈希,检查原始 WRPL 能否逐字节重建,并 复核 `packet_stream.zlib` 与 `packet_stream.bin` 是否一致。 python -m wrpl_tool verify "example.wrpl-extracted" python -m wrpl_tool verify "example.wrpl-extracted" --json ## 提取结果 example.wrpl-extracted/ ├─ header.bin ├─ settings.blk ├─ packet_stream.zlib ├─ packet_stream.bin ├─ results.blk ├─ manifest.json ├─ replay_metadata.json ├─ mpi_index.csv ├─ packets/ │ └─ index.csv ├─ events/ │ ├─ index.csv │ ├─ chat_packets.csv │ ├─ chat.csv │ └─ chat_errors.json ├─ tracks.json ├─ tracks.csv └─ tracks/ └─ <每条飞机或武器轨迹>.csv 原始区段 `header.bin`、`settings.blk`、`packet_stream.zlib` 和 `results.blk` 按 manifest 顺序拼接后必须与源 WRPL 的 SHA-256 完全一致。 v0.6 使用 `manifest_version: 2`,不再声明旧 Viewer 的 `include_viewer`、`engagement` 或 `offline_viewer` 字段。`verify` 仍能校验 旧版输出,`--overwrite` 也能在哈希确认未被修改后安全迁移 v1 目录。 运动数据同时提供紧凑 JSON、总 CSV 和逐轨迹 CSV,包括: - 回放时间 `time_ms`; - 世界坐标 `x_m`、`y_m`、`z_m`; - 相邻样本速度 `speed_mps`; - 约一秒窗口速度 `speed_1s_mps`; - 飞机协议姿态 `heading_rad`、`attitude_rad`、`bank_rad`; - 原始 packed Euler 值; - 武器与飞机的保守几何候选及其距离、时间和分离度诊断。 完整字段、单位、来源和不确定性见 [WRPL 格式、输出和字段说明](docs/FORMAT_AND_FIELDS.md)。 ## Windows 单文件版本 `WRPL-Extractor.exe` 是控制台程序,可以直接接收拖放的 `.wrpl` 文件。 powershell -ExecutionPolicy Bypass -File .\build-extractor.ps1 powershell -ExecutionPolicy Bypass -File .\package-extractor.ps1 发布构建固定使用 CPython 3.11.15、Windows x64、OpenSSL 3.5.7 和 PyInstaller 6.21.0;环境不匹配时脚本会停止。便携包包含 `Drop-WRPL-Here.cmd`、构建信息、SHA-256 清单和第三方许可证。详细使用与 SmartScreen 提示见 [WRPL-Extractor 说明](WRPL-Extractor-README.md)。 ## 测试 仓库旁的真实回放样本用于端到端回归。也可通过 `WRPL_TEST_REPLAY` 指定其他 样本。 python .\tests\chat_test.py python .\tests\protocol_security_test.py python .\tests\smoke_test.py python .\tests\extractor_cli_test.py 构建 EXE 和便携包后可继续运行: powershell -ExecutionPolicy Bypass -File .\tests\extractor_exe_smoke.ps1 powershell -ExecutionPolicy Bypass -File .\tests\extractor_release_smoke.ps1 ## 项目结构 wrpl_tool/ ├─ core.py WRPL 边界、解压和顶层包解析 ├─ weapon_sync.py WeaponSync 运动样本 ├─ aircraft.py AircraftSmall/FMSync 运动与姿态 ├─ chat.py 保守 Chat 解码 ├─ exporter.py 无损区段、索引、轨迹和 manifest └─ extractor_cli.py inspect / extract / verify ## 数据解释边界 - 回放世界 Y 轴的基准尚不能直接等同于海拔或离地高度。 - 武器与飞机关联仅是保守几何候选,不是所有权、发射方或目标断言。 - 轨迹首末观察点不等同于已验证的发射、命中、近炸或自毁事件。 - 未解码的载具型号、队伍、雷达锁定和目标身份不会被猜测。 - 客户端和服务器回放可见的对象范围可能不同。 - `--force` 只尝试已知布局,不代表未知版本已经兼容。 本项目是独立、非官方的社区互操作工具,不隶属于或获 Gaijin 认可。法律声明、 协议参考和第三方许可见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。
标签:AI合规, Python, 代码示例, 安全测试工具, 数据分析, 数据解析, 无后门, 游戏, 漏洞挖掘, 运动数据提取, 逆向工具