N0zoM1z0/siglusengine-reverse-engineering
GitHub: N0zoM1z0/siglusengine-reverse-engineering
一套基于证据的 SiglusEngine 逆向工程工具与笔记,用于从该视觉小说引擎中提取和还原图像、音频、视频、剧本及存档等原始资源。
Stars: 0 | Forks: 0
# SiglusEngine 逆向工程
[](LICENSE)
基于证据的逆向工程笔记与原始资源工具,用于
*Rewrite 超自研活动记录外传*(前传与后传章节)所使用的
SiglusEngine 版本。
本次调查始于该引擎的 G00、NWA、OVK 和 OMV 媒体路径,
并最终还原了 Lucia–Chihaya 的偶像演出:这是一段时长六秒、
共 180 帧的动画,在 2024 年的早期提取尝试中未能成功复原。

完整的技术细节记录在
[复原丢失的六秒](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 无任何隶属关系。
标签:云资产清单, 多媒体处理, 技术文档, 游戏引擎, 资源提取, 逆向工具, 逆向工程