【问题标题】:Ruby obfuscator [duplicate]Ruby混淆器[重复]
【发布时间】:2010-01-23 14:20:53
【问题描述】:

是否有 ruby​​ 混淆器或“编译器”?

【问题讨论】:

    标签: ruby obfuscation


    【解决方案1】:

    有几个选项,例如RubyScript2ExeAllInOneRuby。但是,所有解释型语言的混淆器都存在严重缺陷:它们通常不了解更复杂的元编程技术。

    也就是说,他们不一定能分辨出像 foo.send(:bar, ...) 这样的东西是在完全不同的库中对 bar 方法的调用,或者 eval("require %w{abc def ghi}") 意味着需要三个不同的库。这些都是微不足道的例子——当你把method_missing 和它的同类混在一起时,事情会变得更加复杂。

    当混淆器遇到此类代码时,它会尽职尽责地编译相应的指令,但它可能不知道还要包含某些库或其他地方的其他代码。这可能会导致严重的问题,因为动态的 included 或 required 在运行时在静态链接的可执行文件中将不可用。

    不幸的是,许多 gem 和库都使用复杂的元编程技术。如果您尝试使用混淆并期望您的程序具有相同的行为,您可能会在这里遇到麻烦。更糟糕的是,由于间接层级太多,如果混淆版本中出现错误,您可能永远不知道究竟发生了什么或如何重现它。

    【讨论】:

    • 注意:这并不是对 RubyScript2Exe 或 AllInOneRuby 能力的具体评论,只是对具有强大反射/自省能力的语言中的混淆器不足的一般评论。
    【解决方案2】:

    根据您要执行的操作,有一个 Gem 允许您从 Ruby 脚本创建 C 扩展,然后可以将其用作 Ruby 应用程序中的要求。它被称为ruby2cext。它会将您的所有代码混淆为 C,您可以在单独的 Ruby 脚本中要求 .so,它的功能就像普通的 Ruby 脚本一样。

    【讨论】:

    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 2013-01-29
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 2012-12-16
      相关资源
      最近更新 更多