加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 张咚咚 于 2024-11-9 12:57 编辑
本脚本作用是将ruby的脚本转成YARV字节码,加载字节码即可运行游戏(一定程度上防解密出原脚本)
本帖受https://rpg.blue/thread-484281-1-1.html帖子启发搞的一个VA的版本。
ruby1.9.2自带一个RubyVM::InstructionSequence将脚本编译为YARV字节码执行,
但是RM一定程度上进行了阉割,所以只有编译,没有加载,所以只要实现iseq_load就可以了,
在找方法的时候发现RGSS有的方法还不是完整体,于是将阉割的方法又再次补全...
找了几天终于完成下面是最终产物
脚本部分,放到脚本列表第一行执行。
发布时将iseq.to_a的内容序列化保存,使用RubyVM::InstructionSequence.load加载执行即可。(注意备份好原脚本)
仅支持 RGSS301.dll
RGSSDLL = Win32API.new('kernel32', 'GetModuleHandleA', 'p', 'i').call("System/RGSS300.dll") RVM = Win32API.new('load.dll', "Initialize", 'l', 'v') RVM.call(RGSSDLL) # 脚本编译为 YARV 字节码 code = $RGSS_SCRIPTS[1..-1].map{|v| v[3].force_encoding('UTF-8') }.join("\n") arr = RubyVM::InstructionSequence.new(code).to_a # 加载字节码并执行 RubyVM::InstructionSequence.load(arr).eval msgbox 11 # 此行不会被执行
RGSSDLL = Win32API.new('kernel32', 'GetModuleHandleA', 'p', 'i').call("System/RGSS300.dll")
RVM = Win32API.new('load.dll', "Initialize", 'l', 'v')
RVM.call(RGSSDLL)
# 脚本编译为 YARV 字节码
code = $RGSS_SCRIPTS[1..-1].map{|v| v[3].force_encoding('UTF-8') }.join("\n")
arr = RubyVM::InstructionSequence.new(code).to_a
# 加载字节码并执行
RubyVM::InstructionSequence.load(arr).eval
msgbox 11 # 此行不会被执行
更新日志
加载字节码和原版脚本的差异
YARV_1.3.7z
(1.32 MB, 下载次数: 14)
|