扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 96|回复: 0

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

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    2024-11-27 10:08
  • 签到天数: 108 天

    连续签到: 4 天

    [LV.6]常住居民II

    2219

    主题

    376

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    9661
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    12284

    灌水之王

    发表于 2024-11-21 18:11:19 | 显示全部楼层 |阅读模式
    本脚本作用是将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. # 脚本编译为 YARV 字节码
    5. code = $RGSS_SCRIPTS[1..-1].map{|v| v[3].force_encoding('UTF-8')}.join("\n")
    6. arr = RubyVM::InstructionSequence.new(code).to_a
    7. # 加载字节码并执行
    8. RubyVM::InstructionSequence.load(arr).eval
    9. msgbox 11  # 此行不会被执行
    复制代码


    更新日志


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




                本帖来自P1论坛作者张咚咚,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=497291  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

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

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-1-16 01:05 , Processed in 0.083297 second(s), 55 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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