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

[转载发布] 抽象语法树提取/加载

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    6 天前
  • 签到天数: 127 天

    连续签到: 11 天

    [LV.7]常住居民III

    2341

    主题

    417

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    11285
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    14071

    灌水之王

    发表于 2024-4-20 01:30:56 | 显示全部楼层 |阅读模式
    虽然本来确实不想写了
    但还是来了

    简介:
       ruby1.8执行代码的方式是分析代码->生成语法树->执行语法树 (1.9之后也会构建语法树 但是在执行前会生成字节码 目测这样)
    这个脚本可以预先提取语法树 然后加载执行 即省去了代码处理的过程  即消去了明文代码
       代码依旧可以通过语法树进行还原 只要有耐心
    当然 加上混淆会更好 不过暂时不想写了 手动混淆吧

    正文:

    仅适用于RGSS103J
    ast.zip(254.2 KB, 下载次数: 12, 售价: 1 星屑)2021-1-9 01:02 上传
    点击文件名下载附件
    阅读权限: 20
    售价: 1 星屑         [记录] [购买]



    解压到游戏目录
    提取:
    RUBY 代码
    1. dump_filename = "scripts.ast"
    2. inf = ""
    3. c = 0
    4. for i in$RGSS_SCRIPTS
    5.   c += 1
    6.   nextif c == 1
    7.   df = i[2]
    8.   inf += Zlib::Inflate.inflate(df)
    9. end
    10. dll = Win32API.new("kernel32","LoadLibraryA","p","l").call("RGSS103J")
    11. dump = Win32API.new("dump","dump","lp","v")
    12. Win32API.new("dump","init","l","v").call(dll)
    13. dump.call(inf.__id__*2, dump_filename)
    14. exit
    复制代码

    插到所有脚本最上面
    然后运行游戏就会在目录下生成提取好的语法树
    这里 init 用于初始化ruby内部函数信息
    dump形式为 void dump(int str, char* fn)
    str是要提取的代码 fn保存文件名 可以自己根据需要改

    加载与运行:
    RUBY 代码
    1. dump_filename = "scripts.ast"
    2. dll = Win32API.new("kernel32","LoadLibraryA","p","l").call("RGSS103J")
    3. load = Win32API.new("load","eval","pl","v")
    4. Win32API.new("load","init","l","v").call(dll)
    5. raw = open(dump_filename,"rb"){|i|i.sysread(File.size(dump_filename))}
    6. load.call(raw, raw.size)
    复制代码

    这里 eval形式为 void eval(char* raw, unsigned len) 效果是构建并运行
    raw为提取的二进制流 len为其长度
    可以自己根据需要改
    (比方marshal dump二进制流塞到data/然后默认加密打包)

    发布时可以删掉 dump.dll 和所有其余代码了  不要忘记备份代码

    假如提取或构建时出现错误 请提供尽可能短的可复现代码以及出错信息 便于查错
    但不保证修复

       通过提取语法树 消去原代码 在一定程度上可以认为ruby代码是安全的
    基于此 在代码里进行各种检测游戏/加密资源的过程也可以认为是安全的
    这是写这个脚本的本意
                本帖来自P1论坛作者SixRC,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=484281  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

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

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

    使用道具 举报

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

    本版积分规则

    关闭

    幸运抽奖

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

    立即查看

    聊天机器人
    Loading...

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

    GMT+8, 2025-4-4 01:36 , Processed in 0.134299 second(s), 54 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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