全量数据加密
脚本、立绘、CG、音频、视频、字体、翻译与配置全部封入加密容器,仅在运行中的引擎内部解密,磁盘上不留存明文资源
脚本、立绘、CG、音频、视频、字体、翻译与配置全部封入加密容器,仅在运行中的引擎内部解密,磁盘上不留存明文资源
直接处理 Ren'Py 启动器生成的发行版构建或 .zip 压缩包,无需改动项目源码与既有开发流程
每次构建生成的保护各不相同,针对单一作品或版本的逆向成果无法沿用到其他构建
开箱即用,可选的 renmori.toml 用于控制分块大小、排除清单、锁定、保护强度与密钥来源
输出机读 JSON 结果与明确的退出码,renmori verify 可作为流水线门禁,随每次发行版构建自动完成封包与校验
保护任何 Ren'Py 游戏均免费,包括商业作品,运行时可随游戏一同免费再分发
以下数据均取自 RenMori 仓库中的里程碑验证记录与容器格式规范,每项数据均注明其测量或推算条件。
基线 Python 参考读取器在引擎内对多 MB 级资产测得约 74 MB/s 的顺序解密吞吐,远高于实时视频与音频解码所需的数 MB/s。实际发行的原生解密器移除了逐分块的 Python 调用开销,其吞吐尚未单独测量。
示意图,未按比例绘制
offset(i) = data_offset + i × (chunk_size + 16)每个分块独立加密并附带 16 字节 GCM 认证标签,体积开销约为 16 / 65,536 ≈ 0.024%,另有 64 字节头部与加密索引。固定的分块步长使任意位置均可按 seek 直接定位,大文件以流式方式解密,无需整体载入内存。
game/archive.rpa明文game/images.rpa明文game/script.rpyc明文game/script.rpy明文game/renmori.rmc加密容器game/renmori.rpe运行时加载器保护完成后,磁盘上不再残留明文封包、.rpyc 或 .rpy,全部资产仅以加密形式存在于容器中,运行时仅额外生成 cache/ 目录。
| 工具 | 实测结果 |
|---|---|
unrpa | 拒绝该容器:版本自动探测失败,该文件并非 RPA 封包 |
unrpyc | 无从下手:磁盘上不存在可供反编译的 .rpyc 或 .rpy |
PNG未命中RENPY RPC2未命中OggS未命中RIFF未命中OTTO未命中zip未命中对吉字节级容器进行特征签名雕刻,未发现任何多字节文件魔数,仅余统计意义上预期的三字节巧合命中,且均不可恢复,容器与随机数据无从区分。
| 资产类型 | 投递路径 | 结果 |
|---|---|---|
| 图像:立绘、CG(PNG/JPG) | 缓冲 | 逐字节一致 |
| 音频(Opus/OGG) | 缓冲 | 逐字节一致 |
| 脚本(.rpyc) | 缓冲 | 逐字节一致 |
| 翻译(tl/<language>/) | 缓冲 | 逐字节一致 |
| 字体,小型(TTF) | 缓冲 | 逐字节一致 |
| 字体,大型多 MB(TTF) | 流式 | 逐字节一致 |
| 视频,大型(WebM/OGV/AVI) | 流式 | 逐字节一致 |
每一种资产类型均经引擎内真实的 renpy.loader 解密,并与原始文件的 SHA-256 逐一比对。