威胁模型
RenMori 如实说明客户端保护能做到什么、不能做到什么。本页是本项目及其对外宣传所能作出的一切宣称的基准,在作出任何承诺之前请先阅读本页。
无法回避的前提
Ren'Py 游戏运行在玩家的机器上。引擎要运行就必须读取自身的资源,因此:
- 解密逻辑随游戏一同分发
- 密钥材料可在客户端派生,否则无法解密
- 最终渲染的画面与解码后的音频必然存在于内存与屏幕之上
因此,任何客户端工具都无法使游戏不可破解。 一名熟练且坚持的攻击者,只要拥有分发出去的二进制、调试器与足够的时间,终究能够从任意一款游戏中提取出任意单项资源。这就是白盒问题,历史上所有本地 DRM 方案最终都未能克服它。任何与此相反的说法,都是对客户端保护能力的错误描述。
RenMori 实际改变了什么
现实可行的手段,按价值排序:
- 使现成工具失效:
unrpa、rpatool、RenPack、RenpyEx与unrpyc(包括--try-harder与un.rpyc注入)在受保护的构建上全部失效;这一点之所以重要,是因为现实中绝大多数资源提取与脚本泄露事件,都只是有人运行了其中某个工具,而仅会调用这些工具的 AI Agent 也属于同一类 - 使破解无法迁移:逐构建多态意味着逆向一款游戏只能得到仅适用于该游戏、该版本的工具,而非可复用的解包器,因此不存在可在论坛上传播的“RenMori 解包器”
- 使旧破解随时间失效:每次发布都会轮换方案,泄露或已被逆向的旧构建对新构建毫无帮助
- 磁盘上无明文:任何时刻都不会有任何文件(包括字体)以解密状态留在文件系统上
RenMori 无法阻止的攻击
请向用户如实说明以下几点:
- 对显示内容的屏幕截图与录屏:从定义上即无法阻止
- 熟练攻击者的内存提取(例如针对运行中进程的 NinjaRipper 一类工具):惰性分块解密会抬高成本,但无法阻止
- 针对某一款游戏、愿意投入时间的专家:他们能够攻破这一款游戏的这一个版本,但无法将这次成果转化为通用工具
要真正阻止注入式提取器,需要内核级反作弊。这超出了本项目的范围,对玩家不友好,并且与性能优先及 Steam Deck/Proton 兼容的目标相冲突。
本项目获准作出的宣称
RenMori 使所有标准的 Ren'Py 解包与反编译工具失效,磁盘上不留明文,并使每次构建各不相同,从而使通用解包器无从存在。它将提取的成本抬高到针对单一游戏、单一版本的专家级投入。它不能、也无法使游戏不可破解。
任何比这更强的说法都缺乏依据,不得出现在文档、README 或任何宣传材料中。最终用户许可协议(EULA)中包含与之对应的、不保证不可破解的条款。