Renpy初识与逆向详解

Sher10ck 发布于 9 天前 50 次阅读


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}

此作者没有提供个人介绍。
最后更新于 2026-07-09