Ruby混淆器

时间:2010-01-23 14:20:53

标签: ruby obfuscation

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

3 个答案:

答案 0 :(得分:26)

有一些选项,例如RubyScript2ExeAllInOneRuby。然而,所有解释性语言的混淆者往往都有严重的缺陷:他们通常不了解更复杂的元编程技术。

也就是说,它们不一定能说明foo.send(:bar, ...)之类的东西是完全不同的库中bar方法的调用,或者eval("require %w{abc def ghi}")意味着需要三个不同的库。这些都是微不足道的例子 - 当你把method_missing之类的东西放到混合中时,事情变得复杂得多。

当混淆器遇到这种代码时,它将尽职尽责地编译适当的指令,但它可能不知道还包括来自其他地方的某些库或其他代码。这可能会导致严重问题,因为动态include d或require d在运行时将无法在静态链接的可执行文件中使用。

不幸的是,许多宝石和图书馆使用复杂的元编程技术。如果您尝试使用模糊处理并期望程序具有相同的行为,那么您可能会遇到麻烦。更糟糕的是,因为间接层次太多,如果混淆版本中出现错误,您可能永远不会知道究竟发生了什么或如何重现它。

答案 1 :(得分:3)

根据您要做的事情,有一个Gem允许您从Ruby脚本创建C扩展,然后可以在Ruby应用程序中将其用作需求。它叫做ruby2cext。它会将您的所有代码混淆为C,并且您可以在单独的Ruby脚本中使用.so,它将像普通的Ruby脚本一样运行。

答案 2 :(得分:0)