设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 334|回复: 2
打印 上一主题 下一主题

[原创发布] [YARV] ruby 脚本转字节码加载

[复制链接]

Lv4.逐梦者

梦石
0
星屑
19819
在线时间
3118 小时
注册时间
2013-1-11
帖子
1292
跳转到指定楼层
1
发表于 2024-11-6 20:45:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

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
RUBY 代码复制
  1. RGSSDLL = Win32API.new('kernel32', 'GetModuleHandleA', 'p', 'i').call("System/RGSS300.dll")
  2. RVM = Win32API.new('load.dll', "Initialize", 'l', 'v')
  3. RVM.call(RGSSDLL)
  4.  
  5. # 脚本编译为 YARV 字节码
  6. code = $RGSS_SCRIPTS[1..-1].map{|v| v[3].force_encoding('UTF-8') }.join("\n")
  7. arr = RubyVM::InstructionSequence.new(code).to_a
  8.  
  9. # 加载字节码并执行
  10. RubyVM::InstructionSequence.load(arr).eval
  11.  
  12. msgbox 11  # 此行不会被执行


更新日志

加载字节码和原版脚本的差异


YARV_1.3.7z (1.32 MB, 下载次数: 15)

评分

参与人数 3+3 收起 理由
gqxastg + 1 精品文章
fux2 + 1 精品文章
喵呜喵5 + 1 塞糖

查看全部评分

Lv4.逐梦者

梦石
0
星屑
14947
在线时间
5858 小时
注册时间
2011-7-18
帖子
159

开拓者

2
发表于 2024-11-9 00:17:21 | 只看该作者
本帖最后由 gqxastg 于 2024-11-9 00:49 编辑

试了一下v1.2附件里的范例工程,直接运行后会:
Script 'YARV' line 3: RuntimeError occurred.

LoadLibrary: load.dll

纯英文路径且所有文件包括RGSS300.dll和load.dll未变动,环境是Windows 10 教育版 20H2 19042.2965
【另外更早那版的附件工程 这边也是同样的加载'load.dll'那行报错

点评

修复了  发表于 2024-11-9 12:35
这里岚风·雷,任饭、PM理性粉、UT/DR原作粉、(Trans)Furry自萌,半吊子技术一枚_(:з」∠)_    游戏制作交流工(liao)作(tian)室欢迎来玩!
【无偿/有偿】RGSS3(VA)脚本定制 + 合作招募/同好交友    修正Firefox/火狐浏览器的代码框复制问题(油猴脚本)
Click→←Click
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-22 15:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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