找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 39|回复: 0

[经验] 记一次renpy游戏加密解包,以及谈谈renpy游戏加密新思路

[复制链接]
发表于 前天 20:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 天使的遗族 于 2025-2-21 20:07 编辑

在一次解包委托中,全局搜索发现怎么都找不到一个函数,但是在游戏目录下面找到两个形迹可疑的文件

http://renpy.org和ren.ver.txt,经过验证,前者是翻译文本文件,后一个就不清楚是什么类型的文件,但是查到跟ren.ver.txt有关的操作是
[RenPy] 纯文本查看 复制代码
init -999 python:
 import zlib
 try:
 #读取renpy版本
 with renpy.open_file("ren.ver.txt") as f:
 a = f.read()
 #获取更新日志
 exec(zlib.decompress(zlib.decompress(a)))

 except Exception as e:
 print(" ")

甚至注释写成读取renpy版本蒙混过关(憋笑)
但是从下面操作可知这是用zlib压缩了两次的文件,exec(zlib.decompress(zlib.decompress(a)))是执行zlib解压两次的内容,由此推断解压后的内容极大可能是utf-8编码的文本,可以作为renpy代码执行 。
于是修改代码,看zlib到底解压了什么

[RenPy] 纯文本查看 复制代码
try:
# 读取 renpy 版本文件
with renpy.open_file("ren.ver.txt") as f:
a = f.read()

# 双重解压
decompressed_data = zlib.decompress(zlib.decompress(a))

print("解压后的数据长度:", len(decompressed_data))
print("解压后的数据内容:", decompressed_data)

# 保存解压后的数据
with open('output_file.txt','wb') as f:  # 使用 'wb' 以二进制方式写入
f.write(decompressed_data)
f.flush() # 确保数据写入磁盘

except Exception as e:
print("发生错误:", e)

于是在控制台中得到这些内容

                               
登录/注册后可看大图

以为这样还能蒙混过关,翻了半天终于找到这句


                               
登录/注册后可看大图

exec(__import__('base64').b64decode("BASE64CODE").decode("utf8"))这个执行的是base64解码
原来是base64编码的字符串,解码可得renpy代码


                               
登录/注册后可看大图

由上述代码可知,renpy.org依旧需要解压两次再执行,在此不再赘述,下面谈谈加密思路
renpy传统“加密”,通常是修改rpa包的后缀,再用十六进制编辑器修改文件头,之后在loader.py代码中修改要读取的包后缀和文件头,但是unren.bat这种解包工具是放在游戏根目录,执行renpy文件夹里的loader.py来解包和反编译的,所以这种rpa“包”加密,已经过时。
如果要制作游戏加密,比如输入注册码激活,可以把相关的激活操作的rpy文件写成上述执行代码的操作,再用zlib压缩几次再用base64编码,就不易被解包后注释代码跳过激活。执行解压激活操作代码文件的代码,也这样压缩几次,这样极大提升解包和分析的难度。
虽然base64不是加密只是编码,但是如果我所有rpy里都是这样操作,还压缩了,阁下在全局搜索函数和变量时什么都找不到会怎么办?
也可以写个新操作,禁止读取不在列表内的rpa包和rpyc文件,这样别人想“注入”分析就难了。记得把这个操作的代码也用zlib压缩处理,这样别人就不知道怎么解压这个代码注释掉包和文件校验。
开始解压缩文件执行代码的rpyc文件,用传统“加密”封入很大的一个包,跟其他文件比如image混淆一起,极大提高找到zlib解压缩操作入口的难度!甚至直接可以把这个文件命名为背景图片,然后后缀是png,藏木于林!



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|RenPy中文空间 ( 苏ICP备17067825号|苏公网安备 32092302000068号 )

GMT+8, 2025-2-23 14:31 , Processed in 0.196002 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表