Renpy初识与逆向详解
1.引言
了解Renpy主要是26年ccb决赛时候碰到的,当时没工具逆向rpyc文件,于是特意学习了一下renpy的相关知识与逆向工具和方法,在此文章进行分享
2.Renpy简介
Renpy主要是一个游戏引擎工具,类似于之前提到过得Unity,Renpy广泛应用于 galgame、不同于Unity引擎的全面性。以 Python 语言为基础,同时提供了更加简洁的脚本语法,使开发者能够通过较低的学习成本完成角色对白、背景切换、立绘显示、音乐播放、选项分支、好感度变量、存档读档等功能。
在 Ren’Py 中,游戏内容主要通过 .rpy 脚本文件编写。开发者可以使用 define 定义角色,使用 label 设置剧情入口,使用 scene 切换背景,使用 show 显示角色立绘,使用 menu 制作玩家选择分支。使用 Ren’Py 制作的游戏还可以导出到 Windows、macOS、Linux、Android 等平台。归根到底就是旮旯给木的制片厂。
3.各个.pyc文件的作用
直接让GPT跑了一份供大家参考
| 文件名 | 主要作用 | 简单理解 |
|---|
script.rpy | 写主线剧情、对白、旁白、选项和结局 | 游戏剧本正文 |
characters.rpy | 定义角色名称、角色说话时的显示样式 | 人物名单 |
images.rpy | 定义背景图、角色立绘、封面图等图片资源 | 图片登记表 |
variables.rpy | 定义游戏变量,比如好感度、分支标记、是否触发某剧情 | 游戏状态记录 |
transforms.rpy | 定义图片显示位置、缩放、移动效果 | 角色站位和动画 |
options.rpy | 设置游戏标题、窗口大小、版本号、存档目录等 | 游戏基础配置 |
screens.rpy | 定义游戏界面,比如主菜单、对话框、选项菜单、存档界面 | UI 界面布局 |
font_setup.rpy | 设置字体,主要是为了让中文正常显示 | 中文字体设置 |
1)script.rpy
这个文件里面放着我们游戏的全部剧情,包括对话流程分支跳转等等,是最主要的文件

2)characters.rpy
用于定义角色方便主线中内容简介,我们还可以定义角色的字体颜色等等

3)images.rpy
该模块存放着图片的构建内容,也是为了方便主文件简介的

4)options.rpy
用于标题、版本号等内容定义

5)screens.rpy
定义交互内容,主菜单,对话框等等,主要是UI交互界面的设置
6)其他.rpy
可以自己去命名定义一些.rpy文件,只要能起到对游戏界面有帮助同时协助解决script里面内容简介的均可写,比如做一些好感度列表之类的

4.Renpy逆向
Renpy逆向主要是解包rpa和反编译rpyc
1)rpa
通过python包unrpa即可
2)rpyc
不同平台工具不同,但基本上就使用unrpy和python自带的rpycdec
5.2026ccb决赛逆向dokigame
直接用工具(哪个都行反汇编rpyc文件),找到script.rpy然后看看对应内容

反汇编出来之后逻辑很简单,一个1.exe然后和一个异或,先把文件搞出来
import ast
from pathlib import Path
source_file = Path("script.rpy")
output_file = Path("1.exe")
for line in source_file.read_text(encoding="utf-8").splitlines():
if line.strip().startswith("_f = b"):
exe_data = ast.literal_eval(line.split("=", 1)[1].strip())
output_file.write_bytes(exe_data)
print(f"已生成 {output_file},大小为 {len(exe_data)} 字节")
break
ida看一下1.exe,有壳脱一下,拿到密文异或一下得到flag

flag{f17c53c3-dc26-46b1-b373-2ca00a6a6721}
Comments NOTHING