For AI agents: the complete documentation index is available at https://renmori.mewbaka.cn/llms.txt, the full documentation bundle is available at https://renmori.mewbaka.cn/llms-full.txt, and this page is available as Markdown at https://renmori.mewbaka.cn/index.md.
  • 简体中文
  • RenMori
    面向商业 Ren'Py 视觉小说的
    全量数据保护工具

    由 MewBaka 发布,无感地保护你的视觉小说游戏

    pip
    uv
    pipx
    pip install renmori
    RenMoriRenMori

    全量数据加密

    脚本、立绘、CG、音频、视频、字体、翻译与配置全部封入加密容器,仅在运行中的引擎内部解密,磁盘上不留存明文资源

    零侵入接入

    直接处理 Ren'Py 启动器生成的发行版构建或 .zip 压缩包,无需改动项目源码与既有开发流程

    构建级差异化

    每次构建生成的保护各不相同,针对单一作品或版本的逆向成果无法沿用到其他构建

    默认零配置

    开箱即用,可选的 renmori.toml 用于控制分块大小、排除清单、锁定、保护强度与密钥来源

    面向 CI 设计

    输出机读 JSON 结果与明确的退出码,renmori verify 可作为流水线门禁,随每次发行版构建自动完成封包与校验

    免费商用

    保护任何 Ren'Py 游戏均免费,包括商业作品,运行时可随游戏一同免费再分发

    数据与验证

    以下数据均取自 RenMori 仓库中的里程碑验证记录与容器格式规范,每项数据均注明其测量或推算条件。

    74 MB/s
    引擎内顺序解密吞吐
    基线参考读取器实测 ¹
    ≈ 0.024%
    容器体积开销
    依据格式规范计算 ²
    7 / 7
    资产类型逐字节一致
    SHA-256 比对 ³
    0
    可恢复的文件特征签名
    吉字节级容器扫描 ³

    解密吞吐与实时播放需求

    基线 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 逐一比对。

    加密规格

    认证加密
    AES-256-GCM
    密钥派生
    HKDF-SHA256(RFC 5869)
    密钥粒度
    每文件独立密钥
    分块
    默认 64 KB,每分块 16 字节认证标签
    随机访问
    按 seek 定位分块,大文件流式解密
    构建独立性
    每次构建生成独立的 container_id 与逐文件密钥,不同构建的密钥互不可用
    逐构建多态与原生混淆
    构建期变换,不增加运行时开销
    1. ¹ 于 Ren'Py 8.5.2 引擎内测量,使用 Python 参考读取器(经 ctypes 调用 librenpython 中的 OpenSSL EVP),以 64 KB 分块的 AES-256-GCM 顺序读取多 MB 级资产;实际发行的原生解密器尚未测量。
    2. ² 依据容器格式 v1 规范计算,并非实测值。
    3. ³ 验证基于 Ren'Py 8.5.2,使用 SDK 样例项目 the_question 与一个包含数千项资产的吉字节级发行版构建。

    数据来源: M1 成果 · 容器格式 v1 · 架构 · M4