【发布时间】:2010-01-23 14:20:53
【问题描述】:
是否有 ruby 混淆器或“编译器”?
【问题讨论】:
标签: ruby obfuscation
是否有 ruby 混淆器或“编译器”?
【问题讨论】:
标签: ruby obfuscation
有几个选项,例如RubyScript2Exe 或AllInOneRuby。但是,所有解释型语言的混淆器都存在严重缺陷:它们通常不了解更复杂的元编程技术。
也就是说,他们不一定能分辨出像 foo.send(:bar, ...) 这样的东西是在完全不同的库中对 bar 方法的调用,或者 eval("require %w{abc def ghi}") 意味着需要三个不同的库。这些都是微不足道的例子——当你把method_missing 和它的同类混在一起时,事情会变得更加复杂。
当混淆器遇到此类代码时,它会尽职尽责地编译相应的指令,但它可能不知道还要包含某些库或其他地方的其他代码。这可能会导致严重的问题,因为动态的 included 或 required 在运行时在静态链接的可执行文件中将不可用。
不幸的是,许多 gem 和库都使用复杂的元编程技术。如果您尝试使用混淆并期望您的程序具有相同的行为,您可能会在这里遇到麻烦。更糟糕的是,由于间接层级太多,如果混淆版本中出现错误,您可能永远不知道究竟发生了什么或如何重现它。
【讨论】:
根据您要执行的操作,有一个 Gem 允许您从 Ruby 脚本创建 C 扩展,然后可以将其用作 Ruby 应用程序中的要求。它被称为ruby2cext。它会将您的所有代码混淆为 C,您可以在单独的 Ruby 脚本中要求 .so,它的功能就像普通的 Ruby 脚本一样。
【讨论】:
RubyScript2Exe - http://www.erikveen.dds.nl/rubyscript2exe/
【讨论】: