renmori 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- renmori-1.0.0/LICENSE +96 -0
- renmori-1.0.0/LICENSE.zh-CN.md +64 -0
- renmori-1.0.0/NOTICE +69 -0
- renmori-1.0.0/PKG-INFO +237 -0
- renmori-1.0.0/README.md +125 -0
- renmori-1.0.0/pyproject.toml +33 -0
- renmori-1.0.0/setup.cfg +4 -0
- renmori-1.0.0/src/renmori/__init__.py +3 -0
- renmori-1.0.0/src/renmori/__main__.py +5 -0
- renmori-1.0.0/src/renmori/cli.py +1232 -0
- renmori-1.0.0/src/renmori/container/__init__.py +14 -0
- renmori-1.0.0/src/renmori/container/crypto.py +294 -0
- renmori-1.0.0/src/renmori/container/format.py +132 -0
- renmori-1.0.0/src/renmori/container/reader.py +181 -0
- renmori-1.0.0/src/renmori/container/writer.py +101 -0
- renmori-1.0.0/src/renmori/runtime/__init__.py +2 -0
- renmori-1.0.0/src/renmori/runtime/hook.py +226 -0
- renmori-1.0.0/src/renmori/script/__init__.py +5 -0
- renmori-1.0.0/src/renmori/script/rpyc.py +54 -0
- renmori-1.0.0/src/renmori/script/transform.py +43 -0
- renmori-1.0.0/src/renmori.egg-info/PKG-INFO +237 -0
- renmori-1.0.0/src/renmori.egg-info/SOURCES.txt +28 -0
- renmori-1.0.0/src/renmori.egg-info/dependency_links.txt +1 -0
- renmori-1.0.0/src/renmori.egg-info/entry_points.txt +2 -0
- renmori-1.0.0/src/renmori.egg-info/requires.txt +4 -0
- renmori-1.0.0/src/renmori.egg-info/top_level.txt +1 -0
- renmori-1.0.0/tests/test_backend_discovery.py +18 -0
- renmori-1.0.0/tests/test_cli.py +430 -0
- renmori-1.0.0/tests/test_container.py +170 -0
- renmori-1.0.0/tests/test_script.py +54 -0
renmori-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
RenMori License
|
|
2
|
+
Version 1.0
|
|
3
|
+
|
|
4
|
+
Copyright (c) 2026 MewBaka (the RenMori authors)
|
|
5
|
+
|
|
6
|
+
RenMori is software for protecting the assets and compiled scripts of Ren'Py
|
|
7
|
+
visual novels. This license governs the RenMori framework and tools, together
|
|
8
|
+
with the runtime components RenMori embeds into a protected game — the loader
|
|
9
|
+
extension, the encrypted container format, and the native core and launcher
|
|
10
|
+
(collectively, the "Software").
|
|
11
|
+
|
|
12
|
+
Plain-language summary (the numbered terms below are what govern):
|
|
13
|
+
|
|
14
|
+
- Using RenMori to protect a Ren'Py game is free for everyone, including
|
|
15
|
+
commercial games, with no royalty. You may sell your game and ship the
|
|
16
|
+
embedded RenMori runtime inside it at no charge.
|
|
17
|
+
- You may not sell RenMori itself or a modified version of it, and you may not
|
|
18
|
+
run a paid service that encrypts other people's Ren'Py games with it.
|
|
19
|
+
|
|
20
|
+
1. Grant of use
|
|
21
|
+
|
|
22
|
+
You are granted a worldwide, royalty-free, non-exclusive right to install and
|
|
23
|
+
use the Software to protect Ren'Py games, including games that you sell,
|
|
24
|
+
regardless of the game's own content or licensing.
|
|
25
|
+
|
|
26
|
+
2. Grant to redistribute the runtime inside your game
|
|
27
|
+
|
|
28
|
+
You may reproduce and distribute the RenMori runtime components solely as
|
|
29
|
+
embedded in a Ren'Py game that you have protected with RenMori and that you
|
|
30
|
+
distribute. This grant is what lets you lawfully sell or give away your
|
|
31
|
+
protected game with the RenMori runtime inside it.
|
|
32
|
+
|
|
33
|
+
3. Modification for your own use
|
|
34
|
+
|
|
35
|
+
You may modify the Software for your own use in protecting your own games.
|
|
36
|
+
|
|
37
|
+
4. Restrictions
|
|
38
|
+
|
|
39
|
+
Whether for a fee or free of charge, you may not:
|
|
40
|
+
|
|
41
|
+
(a) sell, resell, rent, lease, sublicense, or distribute the Software itself,
|
|
42
|
+
or any substantial part of it, as a product or an offering, whether
|
|
43
|
+
unmodified or modified;
|
|
44
|
+
(b) offer a paid or commercial service that protects or encrypts Ren'Py games
|
|
45
|
+
for others using the Software — for example a "Ren'Py encryption" or
|
|
46
|
+
"代加密" service;
|
|
47
|
+
(c) distribute a modified version of the Software to third parties, or present
|
|
48
|
+
any modified version as RenMori.
|
|
49
|
+
|
|
50
|
+
The grants in sections 1 through 3 are the only distribution permitted: the
|
|
51
|
+
Software leaves your hands only as the runtime embedded in your own protected
|
|
52
|
+
game, under section 2.
|
|
53
|
+
|
|
54
|
+
5. Trademarks
|
|
55
|
+
|
|
56
|
+
"RenMori" and its logo are marks of the RenMori authors. This license grants
|
|
57
|
+
no right to use them, except to state accurately that a game was protected
|
|
58
|
+
with RenMori.
|
|
59
|
+
|
|
60
|
+
6. No warranty
|
|
61
|
+
|
|
62
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
63
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
64
|
+
FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT.
|
|
65
|
+
|
|
66
|
+
7. No guarantee of protection
|
|
67
|
+
|
|
68
|
+
No local content protection is unbreakable. RenMori raises the cost and skill
|
|
69
|
+
required to extract a protected game's assets and scripts; it does not and
|
|
70
|
+
cannot guarantee that a determined attacker will not succeed. The authors are
|
|
71
|
+
not liable for any extraction, piracy, or other loss.
|
|
72
|
+
|
|
73
|
+
8. Limitation of liability
|
|
74
|
+
|
|
75
|
+
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER
|
|
76
|
+
LIABILITY, WHETHER IN CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF, OR
|
|
77
|
+
IN CONNECTION WITH THE SOFTWARE OR ITS USE.
|
|
78
|
+
|
|
79
|
+
9. Third-party components
|
|
80
|
+
|
|
81
|
+
The Software includes or links third-party components that are licensed under
|
|
82
|
+
their own terms; see the NOTICE file. Nothing in this license limits any right
|
|
83
|
+
you have under those terms for those components.
|
|
84
|
+
|
|
85
|
+
10. Termination
|
|
86
|
+
|
|
87
|
+
Any use outside the grants above terminates the rights this license gives
|
|
88
|
+
you. Your rights under sections 1 and 2 for games you have already lawfully
|
|
89
|
+
distributed are not affected.
|
|
90
|
+
|
|
91
|
+
This English text is the authoritative version of this license. A Chinese
|
|
92
|
+
translation is provided in LICENSE.zh-CN.md for convenience; if the two differ,
|
|
93
|
+
this English text governs.
|
|
94
|
+
|
|
95
|
+
Not legal advice: this text was prepared for the project and has not been
|
|
96
|
+
reviewed by a lawyer. Have counsel review it before relying on it.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# RenMori 许可证 1.0 版
|
|
2
|
+
|
|
3
|
+
版权所有 (c) 2026 MewBaka(RenMori 作者)
|
|
4
|
+
|
|
5
|
+
RenMori 是用于保护 Ren'Py 视觉小说的素材与已编译脚本的软件。本许可证适用于 RenMori 框架与工具,以及 RenMori 嵌入受保护游戏中的运行时组件——加载器扩展、加密容器格式、原生核心与原生启动器(合称"本软件")。
|
|
6
|
+
|
|
7
|
+
> 本文为便于理解提供的中文译本。英文 `LICENSE` 为权威版本;两者如有歧义,以英文为准。
|
|
8
|
+
|
|
9
|
+
**通俗摘要(实际以下列条款为准):**
|
|
10
|
+
|
|
11
|
+
- 使用 RenMori 保护 Ren'Py 游戏对所有人免费,商业游戏亦然,不收取任何费用。你可以出售你的游戏,并在其中随附嵌入的 RenMori 运行时,无需付费
|
|
12
|
+
- 你不得出售 RenMori 本身或其修改版本,也不得运营以 RenMori 为之代他人加密 Ren'Py 游戏的收费服务
|
|
13
|
+
|
|
14
|
+
## 1. 使用授权
|
|
15
|
+
|
|
16
|
+
在本许可证之下,授予你一项全球范围、免版税、非独占的权利,可安装并使用本软件保护 Ren'Py 游戏,包括你出售的游戏,不论该游戏自身的内容或授权状况如何。
|
|
17
|
+
|
|
18
|
+
## 2. 随游戏再分发运行时的授权
|
|
19
|
+
|
|
20
|
+
你仅可以在你用 RenMori 保护并对外分发的 Ren'Py 游戏中,复制并分发其所嵌入的 RenMori 运行时组件。正是此项授权使你得以合法地连同其中的 RenMori 运行时一并出售或免费提供你的受保护游戏。
|
|
21
|
+
|
|
22
|
+
## 3. 为自用而修改
|
|
23
|
+
|
|
24
|
+
你可以为保护你自己的游戏之自用目的修改本软件。
|
|
25
|
+
|
|
26
|
+
## 4. 限制
|
|
27
|
+
|
|
28
|
+
无论收费与否,你不得:
|
|
29
|
+
|
|
30
|
+
(a) 以产品或服务的形式出售、转售、出租、租赁、再许可或分发本软件本身或其任何实质部分,不论是否经过修改;
|
|
31
|
+
|
|
32
|
+
(b) 以本软件为他人保护或加密 Ren'Py 游戏,提供收费或商业性质的服务——例如所谓"Ren'Py 代加密"服务;
|
|
33
|
+
|
|
34
|
+
(c) 向第三方分发本软件的修改版本,或将任何修改版本表示为 RenMori。
|
|
35
|
+
|
|
36
|
+
第 1 至 3 条中的授权是所允许的唯一分发方式:本软件离开你手中,只能以第 2 条所述、嵌入你自己受保护游戏中的运行时形式进行。
|
|
37
|
+
|
|
38
|
+
## 5. 商标
|
|
39
|
+
|
|
40
|
+
"RenMori"及其标识是 RenMori 作者的标记。除如实声明某游戏由 RenMori 保护外,本许可证不授予使用该等标记的任何权利。
|
|
41
|
+
|
|
42
|
+
## 6. 不提供担保
|
|
43
|
+
|
|
44
|
+
本软件按"现状"提供,不附带任何明示或默示的担保,包括但不限于适销性、特定用途适用性及不侵权的担保。
|
|
45
|
+
|
|
46
|
+
## 7. 不保证防护效果
|
|
47
|
+
|
|
48
|
+
任何本地内容保护都并非不可破解。RenMori 提高了提取受保护游戏素材与脚本所需的成本与技术门槛,但不能且无法保证坚定的攻击者不会得手。对于任何提取、盗版或其他损失,作者不承担责任。
|
|
49
|
+
|
|
50
|
+
## 8. 责任限制
|
|
51
|
+
|
|
52
|
+
在任何情况下,无论基于合同、侵权或其他,作者均不对因本软件或其使用而产生、引起或与之相关的任何索赔、损害或其他责任承担责任。
|
|
53
|
+
|
|
54
|
+
## 9. 第三方组件
|
|
55
|
+
|
|
56
|
+
本软件包含或链接按其各自条款授权的第三方组件,详见 NOTICE 文件。对于该等组件,本许可证不限制你在该等条款下享有的任何权利。
|
|
57
|
+
|
|
58
|
+
## 10. 终止
|
|
59
|
+
|
|
60
|
+
任何超出上述授权范围的使用将终止本许可证授予你的权利。对于你已合法分发的游戏,你在第 1 条与第 2 条下的权利不受影响。
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
非法律意见:本文系为本项目拟定,未经律师审阅。在据此行事前,请先咨询法律专业人士。
|
renmori-1.0.0/NOTICE
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
RenMori
|
|
2
|
+
Copyright (c) 2026 MewBaka
|
|
3
|
+
|
|
4
|
+
This product includes software developed by third parties. RenMori — the
|
|
5
|
+
framework and tools, the closed binary plugin, and the runtime that ships inside
|
|
6
|
+
protected games — is governed by the RenMori License in the LICENSE file (a
|
|
7
|
+
Chinese translation is in LICENSE.zh-CN.md): free to use to protect any Ren'Py
|
|
8
|
+
game, including commercial games, with no charge; selling RenMori itself or a
|
|
9
|
+
modified version, or running a paid encryption service with it, is not
|
|
10
|
+
permitted.
|
|
11
|
+
|
|
12
|
+
This NOTICE file lists third-party components and the license obligations that
|
|
13
|
+
attach to them. It is maintained as dependencies are added; entries marked
|
|
14
|
+
PLANNED are expected but not yet integrated.
|
|
15
|
+
|
|
16
|
+
================================================================================
|
|
17
|
+
Third-party components
|
|
18
|
+
================================================================================
|
|
19
|
+
|
|
20
|
+
Ren'Py
|
|
21
|
+
------------------------------------------------------------------------
|
|
22
|
+
Role: Target engine. renmori protects games built with Ren'Py and
|
|
23
|
+
repacks the engine runtime. renmori is not affiliated with or
|
|
24
|
+
endorsed by the Ren'Py project.
|
|
25
|
+
License: Ren'Py is distributed under a liberal (MIT-like) license, with
|
|
26
|
+
some bundled components under their own terms (LGPL, etc.).
|
|
27
|
+
Action: Preserve Ren'Py's own license and notices when repacking the
|
|
28
|
+
engine into a protected distribution.
|
|
29
|
+
URL: https://www.renpy.org/
|
|
30
|
+
|
|
31
|
+
FFmpeg [LANDMINE]
|
|
32
|
+
------------------------------------------------------------------------
|
|
33
|
+
Role: Video/audio decoding, as bundled by Ren'Py. renmori feeds it
|
|
34
|
+
decrypted streams through the loader; it does not modify FFmpeg.
|
|
35
|
+
License: LGPL-2.1+ (some builds/configurations are GPL).
|
|
36
|
+
Action: COMPLIANCE-CRITICAL. LGPL requires that the end user be able to
|
|
37
|
+
replace the FFmpeg library. Our protection must not break that
|
|
38
|
+
relinking ability for FFmpeg specifically, and we must not
|
|
39
|
+
statically bind FFmpeg into a form that defeats LGPL relinking.
|
|
40
|
+
Verify the license of the exact FFmpeg build shipped. Carry
|
|
41
|
+
FFmpeg's license text and source-offer as required.
|
|
42
|
+
URL: https://ffmpeg.org/legal.html
|
|
43
|
+
|
|
44
|
+
AES / cryptographic primitives [PLANNED]
|
|
45
|
+
------------------------------------------------------------------------
|
|
46
|
+
Role: Symmetric encryption (AES, AES-NI) in the native runtime and the
|
|
47
|
+
build tool.
|
|
48
|
+
License: TBD by chosen library (e.g. a permissively licensed crypto crate
|
|
49
|
+
or library). Record the exact library and license here once fixed.
|
|
50
|
+
Action: Confirm the license permits redistribution inside shipped games.
|
|
51
|
+
|
|
52
|
+
obfuscator-LLVM (build toolchain) [PLANNED]
|
|
53
|
+
------------------------------------------------------------------------
|
|
54
|
+
Role: Compile-time native code obfuscation of the closed binary.
|
|
55
|
+
License: Derived from LLVM (Apache-2.0 with LLVM exceptions) in most forks;
|
|
56
|
+
confirm the specific fork's terms.
|
|
57
|
+
Note: Used as a build toolchain; does not itself ship to end users. Still
|
|
58
|
+
record its terms for the build pipeline.
|
|
59
|
+
URL: https://github.com/obfuscator-llvm/obfuscator
|
|
60
|
+
|
|
61
|
+
================================================================================
|
|
62
|
+
When adding a dependency
|
|
63
|
+
================================================================================
|
|
64
|
+
|
|
65
|
+
1. Add an entry here with role, license, and any redistribution obligation.
|
|
66
|
+
2. Pay special attention to anything (L)GPL: it must not conflict with shipping
|
|
67
|
+
the closed runtime inside customer games, and relinking rights must be
|
|
68
|
+
preserved where required.
|
|
69
|
+
3. Keep the dependency's own LICENSE/NOTICE text alongside the distribution.
|
renmori-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: renmori
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Full-data protection for commercial Ren'Py games (open-core framework).
|
|
5
|
+
Author: MewBaka
|
|
6
|
+
License: RenMori License
|
|
7
|
+
Version 1.0
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2026 MewBaka (the RenMori authors)
|
|
10
|
+
|
|
11
|
+
RenMori is software for protecting the assets and compiled scripts of Ren'Py
|
|
12
|
+
visual novels. This license governs the RenMori framework and tools, together
|
|
13
|
+
with the runtime components RenMori embeds into a protected game — the loader
|
|
14
|
+
extension, the encrypted container format, and the native core and launcher
|
|
15
|
+
(collectively, the "Software").
|
|
16
|
+
|
|
17
|
+
Plain-language summary (the numbered terms below are what govern):
|
|
18
|
+
|
|
19
|
+
- Using RenMori to protect a Ren'Py game is free for everyone, including
|
|
20
|
+
commercial games, with no royalty. You may sell your game and ship the
|
|
21
|
+
embedded RenMori runtime inside it at no charge.
|
|
22
|
+
- You may not sell RenMori itself or a modified version of it, and you may not
|
|
23
|
+
run a paid service that encrypts other people's Ren'Py games with it.
|
|
24
|
+
|
|
25
|
+
1. Grant of use
|
|
26
|
+
|
|
27
|
+
You are granted a worldwide, royalty-free, non-exclusive right to install and
|
|
28
|
+
use the Software to protect Ren'Py games, including games that you sell,
|
|
29
|
+
regardless of the game's own content or licensing.
|
|
30
|
+
|
|
31
|
+
2. Grant to redistribute the runtime inside your game
|
|
32
|
+
|
|
33
|
+
You may reproduce and distribute the RenMori runtime components solely as
|
|
34
|
+
embedded in a Ren'Py game that you have protected with RenMori and that you
|
|
35
|
+
distribute. This grant is what lets you lawfully sell or give away your
|
|
36
|
+
protected game with the RenMori runtime inside it.
|
|
37
|
+
|
|
38
|
+
3. Modification for your own use
|
|
39
|
+
|
|
40
|
+
You may modify the Software for your own use in protecting your own games.
|
|
41
|
+
|
|
42
|
+
4. Restrictions
|
|
43
|
+
|
|
44
|
+
Whether for a fee or free of charge, you may not:
|
|
45
|
+
|
|
46
|
+
(a) sell, resell, rent, lease, sublicense, or distribute the Software itself,
|
|
47
|
+
or any substantial part of it, as a product or an offering, whether
|
|
48
|
+
unmodified or modified;
|
|
49
|
+
(b) offer a paid or commercial service that protects or encrypts Ren'Py games
|
|
50
|
+
for others using the Software — for example a "Ren'Py encryption" or
|
|
51
|
+
"代加密" service;
|
|
52
|
+
(c) distribute a modified version of the Software to third parties, or present
|
|
53
|
+
any modified version as RenMori.
|
|
54
|
+
|
|
55
|
+
The grants in sections 1 through 3 are the only distribution permitted: the
|
|
56
|
+
Software leaves your hands only as the runtime embedded in your own protected
|
|
57
|
+
game, under section 2.
|
|
58
|
+
|
|
59
|
+
5. Trademarks
|
|
60
|
+
|
|
61
|
+
"RenMori" and its logo are marks of the RenMori authors. This license grants
|
|
62
|
+
no right to use them, except to state accurately that a game was protected
|
|
63
|
+
with RenMori.
|
|
64
|
+
|
|
65
|
+
6. No warranty
|
|
66
|
+
|
|
67
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
68
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
69
|
+
FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT.
|
|
70
|
+
|
|
71
|
+
7. No guarantee of protection
|
|
72
|
+
|
|
73
|
+
No local content protection is unbreakable. RenMori raises the cost and skill
|
|
74
|
+
required to extract a protected game's assets and scripts; it does not and
|
|
75
|
+
cannot guarantee that a determined attacker will not succeed. The authors are
|
|
76
|
+
not liable for any extraction, piracy, or other loss.
|
|
77
|
+
|
|
78
|
+
8. Limitation of liability
|
|
79
|
+
|
|
80
|
+
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER
|
|
81
|
+
LIABILITY, WHETHER IN CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF, OR
|
|
82
|
+
IN CONNECTION WITH THE SOFTWARE OR ITS USE.
|
|
83
|
+
|
|
84
|
+
9. Third-party components
|
|
85
|
+
|
|
86
|
+
The Software includes or links third-party components that are licensed under
|
|
87
|
+
their own terms; see the NOTICE file. Nothing in this license limits any right
|
|
88
|
+
you have under those terms for those components.
|
|
89
|
+
|
|
90
|
+
10. Termination
|
|
91
|
+
|
|
92
|
+
Any use outside the grants above terminates the rights this license gives
|
|
93
|
+
you. Your rights under sections 1 and 2 for games you have already lawfully
|
|
94
|
+
distributed are not affected.
|
|
95
|
+
|
|
96
|
+
This English text is the authoritative version of this license. A Chinese
|
|
97
|
+
translation is provided in LICENSE.zh-CN.md for convenience; if the two differ,
|
|
98
|
+
this English text governs.
|
|
99
|
+
|
|
100
|
+
Not legal advice: this text was prepared for the project and has not been
|
|
101
|
+
reviewed by a lawyer. Have counsel review it before relying on it.
|
|
102
|
+
|
|
103
|
+
Requires-Python: >=3.9
|
|
104
|
+
Description-Content-Type: text/markdown
|
|
105
|
+
License-File: LICENSE
|
|
106
|
+
License-File: LICENSE.zh-CN.md
|
|
107
|
+
License-File: NOTICE
|
|
108
|
+
Requires-Dist: cryptography>=42
|
|
109
|
+
Provides-Extra: dev
|
|
110
|
+
Requires-Dist: pytest>=7; extra == "dev"
|
|
111
|
+
Dynamic: license-file
|
|
112
|
+
|
|
113
|
+
<div align="center">
|
|
114
|
+
|
|
115
|
+
 [](README.zh-CN.md)
|
|
116
|
+
|
|
117
|
+
</div>
|
|
118
|
+
|
|
119
|
+
# RenMori
|
|
120
|
+
|
|
121
|
+
**Full-data protection for commercial Ren'Py visual novels.** RenMori takes an
|
|
122
|
+
already-built Ren'Py 8.x distribution and produces a protected one: every asset —
|
|
123
|
+
scripts, sprites, CGs, audio, video, fonts, translations, and configuration — is
|
|
124
|
+
packed into an encrypted container and decrypted only inside the running engine.
|
|
125
|
+
Off-the-shelf unpackers and decompilers, and the agents that merely call them,
|
|
126
|
+
fail outright, and every build differs so no single tool works across games.
|
|
127
|
+
|
|
128
|
+
A game that runs on the player's machine can never be made uncrackable — the
|
|
129
|
+
engine must read its own assets, so the keys ship with it. RenMori does not claim
|
|
130
|
+
otherwise; it raises extraction from "run a tool" to dedicated, per-title,
|
|
131
|
+
per-version expert effort. The honest threat model is in
|
|
132
|
+
[docs/threat-model.md](docs/threat-model.md).
|
|
133
|
+
|
|
134
|
+
Chinese: [README.zh-CN.md](README.zh-CN.md).
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 1. Install & use the CLI
|
|
139
|
+
|
|
140
|
+
### Install
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
pip install renmori
|
|
144
|
+
renmori --version
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Requires **Python 3.9+** on the developer's machine (reading a `renmori.toml`
|
|
148
|
+
config needs 3.11+, or `pip install tomli` on older versions). `cryptography` is
|
|
149
|
+
pulled in automatically. To work on the source instead:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
git clone https://github.com/MewBaka/RenMori.git
|
|
153
|
+
cd RenMori && pip install -e .
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Protect a game
|
|
157
|
+
|
|
158
|
+
1. **Build your game** in the Ren'Py launcher (*Build Distributions*). RenMori
|
|
159
|
+
runs on that output and never touches your source.
|
|
160
|
+
2. **Protect the build** — the input is the built folder, or the `.zip` the
|
|
161
|
+
launcher made (it is unzipped for you):
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
renmori protect ./dist/MyGame-1.0-pc -o ./dist/MyGame-1.0-pc-protected
|
|
165
|
+
# or straight from the archive:
|
|
166
|
+
renmori protect ./dist/MyGame-1.0-pc.zip
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
The first full protect downloads the closed plugin for your platform from the
|
|
170
|
+
public release, verifies it, and caches it — no manual step. On a terminal it
|
|
171
|
+
asks first; in CI it downloads automatically.
|
|
172
|
+
|
|
173
|
+
3. **Verify** the result (usable as a CI gate):
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
renmori verify ./dist/MyGame-1.0-pc-protected
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
4. **Ship** the protected folder as your release (`renmori.rmc` + `renmori.rpe`
|
|
180
|
+
together). Don't re-run the Ren'Py launcher on it — that rebuilds from source
|
|
181
|
+
and drops the protection.
|
|
182
|
+
|
|
183
|
+
The command is zero-config by default, prints a machine-readable JSON result line
|
|
184
|
+
for CI, and has clear exit codes. An optional `renmori.toml` controls chunk size,
|
|
185
|
+
an exclude list, lockdown, strength, and key sources. For the open-source
|
|
186
|
+
**baseline** format (no plugin, fully offline), pass `--strength baseline`. Full
|
|
187
|
+
reference: [docs/usage.md](docs/usage.md) and
|
|
188
|
+
[examples/renmori.toml](examples/renmori.toml).
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## 2. Documentation
|
|
193
|
+
|
|
194
|
+
> A hosted docs site is coming soon; until then the links below point at the
|
|
195
|
+
> sources in this repository. (Each page also has a `*.zh-CN.md` Chinese version.)
|
|
196
|
+
|
|
197
|
+
**Understand it**
|
|
198
|
+
|
|
199
|
+
- [research.md](docs/research.md) — what already exists and why a new tool is needed
|
|
200
|
+
- [architecture.md](docs/architecture.md) — the full design, layer by layer
|
|
201
|
+
- [threat-model.md](docs/threat-model.md) — what it stops, and what it cannot
|
|
202
|
+
|
|
203
|
+
**Protect your game**
|
|
204
|
+
|
|
205
|
+
- [usage.md](docs/usage.md) — the `renmori` CLI in full (`protect` / `verify`, flags, output)
|
|
206
|
+
- [examples/renmori.toml](examples/renmori.toml) — the configuration file
|
|
207
|
+
|
|
208
|
+
**Automate in CI**
|
|
209
|
+
|
|
210
|
+
- [ci.md](docs/ci.md) — CI pipelines and key management
|
|
211
|
+
- [examples/github-actions-protect.yml](examples/github-actions-protect.yml) — a sample GitHub Actions workflow
|
|
212
|
+
- [interface.md](docs/interface.md) — the contract between the open tool and the closed plugin
|
|
213
|
+
|
|
214
|
+
**Ship**
|
|
215
|
+
|
|
216
|
+
- [steam-release.md](docs/steam-release.md) — publishing to Steam (overlay, DRM, Steamworks)
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 3. Licensing
|
|
221
|
+
|
|
222
|
+
RenMori — the framework and tools, the closed plugin, and the runtime that ships
|
|
223
|
+
inside a game — is under the **RenMori License 1.0**:
|
|
224
|
+
[`LICENSE`](LICENSE) (Chinese: [`LICENSE.zh-CN.md`](LICENSE.zh-CN.md)).
|
|
225
|
+
|
|
226
|
+
- **Free to use.** Protecting any Ren'Py game, commercial or not, is free, and the
|
|
227
|
+
RenMori runtime may be redistributed embedded in a released game at no charge.
|
|
228
|
+
- **No resale.** Selling RenMori itself or a modified version, or running a paid
|
|
229
|
+
"encryption-as-a-service" with it, is not permitted.
|
|
230
|
+
- This is a **source-available** license, not an OSI open-source one, because the
|
|
231
|
+
no-resale term cannot be expressed under a permissive license.
|
|
232
|
+
|
|
233
|
+
Third-party notices are in [`NOTICE`](NOTICE) (note the FFmpeg LGPL/GPL terms). No
|
|
234
|
+
warranty of unbreakability is given — see the license and
|
|
235
|
+
[docs/threat-model.md](docs/threat-model.md).
|
|
236
|
+
|
|
237
|
+
Full terms and FAQ: *(website coming soon)*.
|
renmori-1.0.0/README.md
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
 [](README.zh-CN.md)
|
|
4
|
+
|
|
5
|
+
</div>
|
|
6
|
+
|
|
7
|
+
# RenMori
|
|
8
|
+
|
|
9
|
+
**Full-data protection for commercial Ren'Py visual novels.** RenMori takes an
|
|
10
|
+
already-built Ren'Py 8.x distribution and produces a protected one: every asset —
|
|
11
|
+
scripts, sprites, CGs, audio, video, fonts, translations, and configuration — is
|
|
12
|
+
packed into an encrypted container and decrypted only inside the running engine.
|
|
13
|
+
Off-the-shelf unpackers and decompilers, and the agents that merely call them,
|
|
14
|
+
fail outright, and every build differs so no single tool works across games.
|
|
15
|
+
|
|
16
|
+
A game that runs on the player's machine can never be made uncrackable — the
|
|
17
|
+
engine must read its own assets, so the keys ship with it. RenMori does not claim
|
|
18
|
+
otherwise; it raises extraction from "run a tool" to dedicated, per-title,
|
|
19
|
+
per-version expert effort. The honest threat model is in
|
|
20
|
+
[docs/threat-model.md](docs/threat-model.md).
|
|
21
|
+
|
|
22
|
+
Chinese: [README.zh-CN.md](README.zh-CN.md).
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 1. Install & use the CLI
|
|
27
|
+
|
|
28
|
+
### Install
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pip install renmori
|
|
32
|
+
renmori --version
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Requires **Python 3.9+** on the developer's machine (reading a `renmori.toml`
|
|
36
|
+
config needs 3.11+, or `pip install tomli` on older versions). `cryptography` is
|
|
37
|
+
pulled in automatically. To work on the source instead:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
git clone https://github.com/MewBaka/RenMori.git
|
|
41
|
+
cd RenMori && pip install -e .
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Protect a game
|
|
45
|
+
|
|
46
|
+
1. **Build your game** in the Ren'Py launcher (*Build Distributions*). RenMori
|
|
47
|
+
runs on that output and never touches your source.
|
|
48
|
+
2. **Protect the build** — the input is the built folder, or the `.zip` the
|
|
49
|
+
launcher made (it is unzipped for you):
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
renmori protect ./dist/MyGame-1.0-pc -o ./dist/MyGame-1.0-pc-protected
|
|
53
|
+
# or straight from the archive:
|
|
54
|
+
renmori protect ./dist/MyGame-1.0-pc.zip
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The first full protect downloads the closed plugin for your platform from the
|
|
58
|
+
public release, verifies it, and caches it — no manual step. On a terminal it
|
|
59
|
+
asks first; in CI it downloads automatically.
|
|
60
|
+
|
|
61
|
+
3. **Verify** the result (usable as a CI gate):
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
renmori verify ./dist/MyGame-1.0-pc-protected
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
4. **Ship** the protected folder as your release (`renmori.rmc` + `renmori.rpe`
|
|
68
|
+
together). Don't re-run the Ren'Py launcher on it — that rebuilds from source
|
|
69
|
+
and drops the protection.
|
|
70
|
+
|
|
71
|
+
The command is zero-config by default, prints a machine-readable JSON result line
|
|
72
|
+
for CI, and has clear exit codes. An optional `renmori.toml` controls chunk size,
|
|
73
|
+
an exclude list, lockdown, strength, and key sources. For the open-source
|
|
74
|
+
**baseline** format (no plugin, fully offline), pass `--strength baseline`. Full
|
|
75
|
+
reference: [docs/usage.md](docs/usage.md) and
|
|
76
|
+
[examples/renmori.toml](examples/renmori.toml).
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 2. Documentation
|
|
81
|
+
|
|
82
|
+
> A hosted docs site is coming soon; until then the links below point at the
|
|
83
|
+
> sources in this repository. (Each page also has a `*.zh-CN.md` Chinese version.)
|
|
84
|
+
|
|
85
|
+
**Understand it**
|
|
86
|
+
|
|
87
|
+
- [research.md](docs/research.md) — what already exists and why a new tool is needed
|
|
88
|
+
- [architecture.md](docs/architecture.md) — the full design, layer by layer
|
|
89
|
+
- [threat-model.md](docs/threat-model.md) — what it stops, and what it cannot
|
|
90
|
+
|
|
91
|
+
**Protect your game**
|
|
92
|
+
|
|
93
|
+
- [usage.md](docs/usage.md) — the `renmori` CLI in full (`protect` / `verify`, flags, output)
|
|
94
|
+
- [examples/renmori.toml](examples/renmori.toml) — the configuration file
|
|
95
|
+
|
|
96
|
+
**Automate in CI**
|
|
97
|
+
|
|
98
|
+
- [ci.md](docs/ci.md) — CI pipelines and key management
|
|
99
|
+
- [examples/github-actions-protect.yml](examples/github-actions-protect.yml) — a sample GitHub Actions workflow
|
|
100
|
+
- [interface.md](docs/interface.md) — the contract between the open tool and the closed plugin
|
|
101
|
+
|
|
102
|
+
**Ship**
|
|
103
|
+
|
|
104
|
+
- [steam-release.md](docs/steam-release.md) — publishing to Steam (overlay, DRM, Steamworks)
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 3. Licensing
|
|
109
|
+
|
|
110
|
+
RenMori — the framework and tools, the closed plugin, and the runtime that ships
|
|
111
|
+
inside a game — is under the **RenMori License 1.0**:
|
|
112
|
+
[`LICENSE`](LICENSE) (Chinese: [`LICENSE.zh-CN.md`](LICENSE.zh-CN.md)).
|
|
113
|
+
|
|
114
|
+
- **Free to use.** Protecting any Ren'Py game, commercial or not, is free, and the
|
|
115
|
+
RenMori runtime may be redistributed embedded in a released game at no charge.
|
|
116
|
+
- **No resale.** Selling RenMori itself or a modified version, or running a paid
|
|
117
|
+
"encryption-as-a-service" with it, is not permitted.
|
|
118
|
+
- This is a **source-available** license, not an OSI open-source one, because the
|
|
119
|
+
no-resale term cannot be expressed under a permissive license.
|
|
120
|
+
|
|
121
|
+
Third-party notices are in [`NOTICE`](NOTICE) (note the FFmpeg LGPL/GPL terms). No
|
|
122
|
+
warranty of unbreakability is given — see the license and
|
|
123
|
+
[docs/threat-model.md](docs/threat-model.md).
|
|
124
|
+
|
|
125
|
+
Full terms and FAQ: *(website coming soon)*.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "renmori"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = "Full-data protection for commercial Ren'Py games (open-core framework)."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
license = { file = "LICENSE" }
|
|
12
|
+
authors = [{ name = "MewBaka" }]
|
|
13
|
+
|
|
14
|
+
# NOTE: `cryptography` is a dependency of the BUILD TOOL only (our dev/CI
|
|
15
|
+
# environment). The runtime that ships inside a protected game uses the native
|
|
16
|
+
# module and does NOT depend on any pip package, because Ren'Py's bundled Python
|
|
17
|
+
# does not include one. The pure-Python reader in this package is a reference
|
|
18
|
+
# implementation for the baseline format and for tests.
|
|
19
|
+
dependencies = [
|
|
20
|
+
"cryptography>=42",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
[project.optional-dependencies]
|
|
24
|
+
dev = ["pytest>=7"]
|
|
25
|
+
|
|
26
|
+
[project.scripts]
|
|
27
|
+
renmori = "renmori.cli:main"
|
|
28
|
+
|
|
29
|
+
[tool.setuptools.packages.find]
|
|
30
|
+
where = ["src"]
|
|
31
|
+
|
|
32
|
+
[tool.pytest.ini_options]
|
|
33
|
+
testpaths = ["tests"]
|
renmori-1.0.0/setup.cfg
ADDED