N0zoM1z0/siglusengine-reverse-engineering

GitHub: N0zoM1z0/siglusengine-reverse-engineering

一套基于证据的 SiglusEngine 逆向工程工具与笔记,用于从该视觉小说引擎中提取和还原图像、音频、视频、剧本及存档等原始资源。

Stars: 0 | Forks: 0

# SiglusEngine 逆向工程 [![许可证: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) 基于证据的逆向工程笔记与原始资源工具,用于 *Rewrite 超自研活动记录外传*(前传与后传章节)所使用的 SiglusEngine 版本。 本次调查始于该引擎的 G00、NWA、OVK 和 OMV 媒体路径, 并最终还原了 Lucia–Chihaya 的偶像演出:这是一段时长六秒、 共 180 帧的动画,在 2024 年的早期提取尝试中未能成功复原。 ![Lucia–Chihaya 每隔半秒采样的演出画面](https://static.pigsec.cn/wp-content/uploads/repos/cas/74/74b7018272477f1028894b9d9c18cfbb0038701d31bf25cf4359733ff89a1f88.jpg) 完整的技术细节记录在 [复原丢失的六秒](docs/BLOG.md)中。较短的 [Lucia/Chihaya 场景索引](docs/LUCIA_CHIHAYA_SCENE.zh-TW.md)以繁体中文 记录了存档状态与剧本的对齐情况。 ## 仓库政策 本仓库包含原始源代码、精简的逆向工程 笔记、合成测试,以及少量压缩的文档配图。 它**不**包含: - 游戏可执行文件、归档文件、存档或剧本包; - 提取出的 G00、NWA、OVK、OMV、Ogg、WAV、MKV 或全分辨率输出; - IDA 数据库、反编译器转储或专有 SDK 文件; - 包含本地路径的生成清单。 请在仅对您拥有合法检查权限的副本文件使用这些工具。 文档配图仅用于识别和解释 研究成果;它们不在 MIT 许可证授权范围内。参见 [资产声明](docs/assets/README.md)。 ## 已实现的功能 | 类别 | 输入 | 输出 / 分析 | 状态 | |---|---|---|---| | 图像 | G00 类型 0 和 2 | RGBA PNG,包括稀疏 type-2 部分 | 已通过语料库验证 | | 图像 | G00 类型 1 | 调色板/索引解码器 | 已通过可执行文件确认;本作无样本 | | 音频 | NWA raw 及压缩级别 0–5 | PCM WAV | 已通过语料库验证 | | 语音 | OVK | 原始有界 Ogg/Vorbis 条目 | 已通过语料库验证 | | 视频 | OMV 模式 1 | Ogg/Theora 及重建的 BGRA/alpha | 已通过语料库验证 | | 视频 | OMV 模式 2 | Ogg/Theora 及不透明 RGBA/FFV1 | 已通过后传章节验证 | | 剧本 | Scene.pck / Scene.chs | 移除 XOR 并按块进行 LZ 解码 | 已在日文 (JP) 和简体中文 (CHS) 包上验证 | | 存档 | 带编号的手动存档 | 解密的 payload 及恢复元数据 | 已在简体中文 (CHS) 版本上验证 | | 索引 | 加密的 VM 字符串 | 从保存的 IP 提取的有序媒体引用 | 已在 `scene01001` 上验证 | NWA 解码器有两种实现:可读性强的 Python 参考实现,以及 通过 CFFI 暴露的本地编写的 C 版本。加速路径将实测的 `BGM002.nwa` 转换时间从约 15 秒缩减至 1.18 秒, 且输出的 WAV 文件字节完全一致。 ## 目录结构 ``` . ├── siglus_unpack.py # G00/NWA/OVK/OMV unpacker ├── nwa_decoder.c/.h # optional native NWA hot loop ├── build_nwa_cffi.py # CFFI build entry point ├── siglus_scene_unpack.py # Scene package XOR/LZ decoder ├── siglus_save_unpack.py # manual-save decoder ├── index_scene_media.py # encrypted-string media indexer ├── compare_g00_sets.py # front/latter SHA-256 comparison ├── verify_unpacked.py # output-tree validation ├── tests/ # synthetic, asset-free codec tests └── docs/ ├── BLOG.md ├── RE_NOTES.md ├── UNPACKING.md ├── G00_COMPARISON.md ├── LUCIA_CHIHAYA_SCENE.zh-TW.md └── assets/ ``` ## 环境要求 - Python 3.11 或更高版本 - Pillow - CFFI 和 C 编译器(用于可选的 NWA 加速器) - FFmpeg 和 FFprobe(用于 Ogg/Theora 检查、Vorbis 转换和还原的 FFV1 视频) ``` python3 -m venv .venv . .venv/bin/activate python -m pip install -r requirements.txt python build_nwa_cffi.py # optional but recommended ``` 如果缺少编译模块,`siglus_unpack.py` 会自动回退 到纯 Python 的 NWA 实现。 ## 快速开始 将工具指向您自己的本地安装目录。生成的输出会被 Git 忽略。 ``` export SIGLUS_GAME_DIR='/path/to/chapter' python siglus_unpack.py all \ "$SIGLUS_GAME_DIR" ./unpacked \ --restore-video python verify_unpacked.py ./unpacked ``` 单资源示例: ``` python siglus_unpack.py g00 \ "$SIGLUS_GAME_DIR/g00/BG002.g00" ./one/images python siglus_unpack.py nwa \ "$SIGLUS_GAME_DIR/bgm/BGM002.nwa" ./one/audio python siglus_unpack.py ovk \ "$SIGLUS_GAME_DIR/koe/z0003.ovk" ./one/voice python siglus_unpack.py omv \ "$SIGLUS_GAME_DIR/mov/lucihaya01.omv" ./one/video \ --restore-video ``` 详细的[解包说明](docs/UNPACKING.md)描述了输出目录树以及 全语料库的验证结果。 ## 重建 Lucia–Chihaya 索引 决定性的证据来自于将简体中文 (CHS) 手动存档与字节完全一致的 日文 VM 代码进行对齐。存档 `0008` 在 IP `0x24F2C` 处恢复了 `scene01001`; 位于 `0x25983` 的媒体操作数被解析为 `lucihaya01.omv`。 ``` python siglus_scene_unpack.py \ '/path/to/Scene.pck' ./scene_decoded/Scene.pck.dec \ --manifest ./scene_decoded/Scene.pck.json python siglus_save_unpack.py \ '/path/to/savedata' ./scene_output/saves \ --engine '/path/to/SiglusEngine_CHS.exe' python index_scene_media.py \ ./scene_decoded/Scene.pck.dec \ ./scene_decoded/Scene.pck.json \ '/path/to/latter/chapter' \ ./scene_output/index \ --block 1 --module scene01001 --ip 0x24F2C ``` 本仓库不提供最终解码的剧本、存档 payload、 包含本地路径的媒体索引或还原的动画。它提供的是解析器以及 重现该发现所需的证据。 ## 验证 最初的前传章节完整运行过程未出现任何提取错误: - 444 个 G00 输入文件生成了 1,453 个 RGBA PNG 文件; - 40 个 NWA 文件生成了 40 个 PCM WAV 文件; - 两个 OVK 音频库生成了 552 条有界 Ogg/Vorbis 流; - 六个 OMV 生成了六个嵌入的 OGV 流和六个无损的 BGRA FFV1 重建文件; - 总共验证了 705 个 OMV 帧。 仓库测试仅使用合成的字节流,因此不需要游戏 数据: ``` python -m unittest discover -s tests -v ``` ## 文档 - [完整的英文技术文章](docs/BLOG.md) - [可执行文件级别的笔记与 IDA 重命名映射](docs/RE_NOTES.md) - [解包与语料库验证](docs/UNPACKING.md) - [前传/后传 G00 对比](docs/G00_COMPARISON.md) - [Lucia/Chihaya 场景索引(繁体中文)](docs/LUCIA_CHIHAYA_SCENE.zh-TW.md) ## 许可证与所有权 原始源代码和文本在 [MIT 许可证](LICENSE)下发布。 SiglusEngine、*Rewrite* 以及所有相关的游戏素材均属于其 各自的版权所有者。本项目是一项独立的实现互操作性与 以保存为目的的研究工作,与 VisualArt's 或 Key 无任何隶属关系。
标签:云资产清单, 多媒体处理, 技术文档, 游戏引擎, 资源提取, 逆向工具, 逆向工程