《不恋爱就完蛋了》的资源文件提取和反编译

注意:为了保护创作者权益,此教程在自游戏发布的 6 个月内会隐藏操作的关键细节。

游戏在 2025-05-13 的更新似乎完全针对本文更改了关键细节,我理解开发者不愿自己的美术资源被提取,所以不会提供明确的解决方案。聪明的读者应当自行研究游戏中附带的引擎源码中对RPAv3ArchiveHandler的定义并修改unrpadeobfuscate_entry

我想引用 Ren’Py 文档中对归档文件的描述:

关于游戏归档的问题,请三思。使用开放文件可能有助于后人在未来的平台上运行你的游戏——那些你离开这个世界之后才出现的平台。

Please think twice about archiving your game. Keeping files open will help others run your game on future platforms – platforms that may not exist until after you’re gone.

此文档也可作为其他 Ren’Py 游戏逆向工程的参考。

获取游戏

请支持正版:Steam

获取工具

步骤

提取 RPA 包

《不恋爱就完蛋了》的 RPA 包使用自定义的后缀名和文件头,使用--force参数指定版本[隐藏操作的关键细节]即可提取。

针对一般的 Ren’Py 游戏,打包文件的后缀名是rpa

需要修改工具源码来读取被修改的引擎打包格式,此指令不是开箱即用的。

完整的命令是:

1
unrpa --verbose --force "[隐藏操作的关键细节]" 文件名

将全部的打包文件提取到game目录下,删除打包文件,只保留提取后的文件。

反编译rpycrpy代码

Clone unrpyc项目到本地,修改源码:

此修改仅针对《不恋爱就完蛋了》的 Ren’Py 引擎版本,不确认其他游戏是否也需要同样的修改。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
diff --git a/decompiler/util.py b/decompiler/util.py
index 87302ef..2bc1817 100644
--- a/decompiler/util.py
+++ b/decompiler/util.py
@@ -381,10 +381,10 @@ def reconstruct_arginfo(arginfo):
             if name is not None:
                 rv.append(f'{name}=')
             rv.append(val)
-        if arginfo.extrapos:
+        if hasattr(arginfo, "extrapos"):
             rv.append(sep())
             rv.append(f'*{arginfo.extrapos}')
-        if arginfo.extrakw:
+        if hasattr(arginfo, "extrakw"):
             rv.append(sep())
             rv.append(f'**{arginfo.extrakw}')

执行命令:

1
python unrpyc.py --clobber "到 game 文件夹的路径"

rpy文件会生成在与rpyc相同的位置。

提交: 1bc164fd 环境: production Hugo: 0.147.7 主题: 3.30.0-modified 时间: 1749356916060709
本博客内容仅供参考,作者不对其准确性、完整性或适用性作出任何明示或暗示的保证。因使用、引用或解读本博客内容所引发的任何直接或间接后果,作者概不承担任何责任。
本博客可能包含第三方转载内容,相关版权归原作者所有。转载内容仅为分享信息之目的,不代表作者观点。如涉及侵权,请联系删除。
使用 Hugo 构建
主题 StackJimmy 设计