InfoQ

新闻

RubyEncoder:Ruby混淆器和代码保护

作者 Mirko Stocker 译者 贾晓楠 发布于 2008年10月29日 下午9时50分

社区
Ruby
主题
Ruby on Rails,
运行时,
安全
标签
JRuby,
源代码

RubyEncoder通过编译和加密来保护Ruby和Ruby on Rails文件。经过加密的脚本由RubyEncoder的加载器来运行。RubyEncoder是由Inovica Ltd开发的。他们还为PHP做了一个类似的东西:SourceGuardian

RubyEncoder还能保护工程的一部分,允许明文的Ruby代码和配置文件的存在;还可以把程序限制在特定主域上,或设定一个期限来创建试用版(详见RubyEncoder FAQ部分)。

InfoQ采访了RubyEncoder的领衔开发者Alexander Belonosov,从技术的角度来谈谈该项目。

InfoQ:编码和加载/运行是如何进行的?

首先把Ruby源代码编译成内部的中间格式,然后进行加密。一旦编码之后,源代码就不在被保护的脚本里了。你需要安装 RubyEncoder加载器来运行被保护的脚本。加载器实际上是一个Ruby扩展,用来解码和运行被保护的脚本。被保护的脚本是与平台无关的,这点很重 要,你可以在所有支持的平台上运行它。不同的操作系统和平台的加载器是不同的。我们支持以下平台:OSX、Linux、FreeBSD,以及我们最近才开 始支持的Solaris x86。我们还打算近期加入对Windows和其他UNIX的支持。

InfoQ:源代码会被转换为一种中间格式。你们有没有自己的解释器来运行它,还是需要还原成原始的Ruby代码?

原始的Ruby代码是不可能还原出来的。我们使用内部的中间格式。[..] 它是内部的、二进制的、可执行的,并且绝不可能还原出原始代码。

InfoQ:要是你们有自己的解释器,它如何支持元编程(metaprogramming)以及Ruby的其他动态特性?或者说,难道没有什么限制吗?

目 前,加载器会把代码的内部表示返回给Ruby来执行。这让我们拥有最大的兼容性,并保持Ruby代码的动态本质。但是,我们仍在寻找其他办法,在产品的下 一个版本来改变或者实现一个新的方案。不管怎样,使用RubyEncoder来保护产品将会对终端用户是透明的,而且Ruby开发者会得到更高级的、更高 效的编码器。

InfoQ:我们可以使用ParseTree gem包访问一个类或一个方法的解析树。RubyEncoder会影响到它吗?

ParseTree 是个很棒的扩展,可以用来研究Ruby内部以及代码优化等。如果你是想问我们是否限制使用ParseTree,那么答案是不会。当你使用 ParseTree之类的工具时,你必须知道需要把什么从Ruby内部提取出来,以及如何发现它。我认为你还必须思考其原因,消耗的时间,以及最终的结果 是什么:-)

InfoQ:你们是否打算支持其他Ruby实现版本,比如JRuby?有没有可能把加载器移植到Java上来运行JRuby代码?

目前我们仅支持标准Ruby。JRuby是个很棒的项目,并且在日益成长。不过针对的市场会有一点不同。

InfoQ:使用JRuby和编译过的Ruby源码,ByteCode混淆器是不是也能达到跟RubyEncoder同样的效果?

使用JRuby和经过编译的Ruby源码也许能得到很高的保护等级。但是它面对的是Java环境。而我们的初衷是保护本地Ruby和Ruby on Rails工程,将来也许会决定加强或者扩展我们的产品。

InfoQ:RubyEncoder是用什么语言写的?用Ruby,然后自己加密自己?

不是,我并不是说Ruby元编程不好 :-) 但RubyEncoder和加载器是用C写的。

RubyEncoder是一个商用产品,这里提供一个30天试用版

你曾使用过这样的代码保护工具吗?有没有什么经验来分享?

查看英文原文:RubyEncoder: Obfuscation and Code Protection for Ruby

深度内容

和Google互补的搜索引擎Wolfram|Alpha

Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。

SOA契约成熟度模型

本文说明了所推荐的契约版本管理设计策略是如何与SOA成熟度模型发生联系的。文章目的是为实现版本管理和可组合性提供一个路线图。

数据服务简介

Vijay Narayanan在这篇文章中对数据服务的几个方面进行了介绍,它们都是SOA实践者和数据架构师感兴趣的内容。本文对数据服务的几个方面进行了介绍,包括需求定义,基本原理和好处、范围、开发以及消费模式。

分块云计算

在本文中,Jimmy Nilsson描述了一种他在过去数年间观察到的一种正在缓慢成长的架构风格,他把这种风格称为“分块云计算”。

豆瓣网技术架构变迁

罗马不是一天建成的,豆瓣的技术架构也是随着用户规模的增长一直在持续变化中。在本次演讲中,豆瓣的首席架构师洪强宁将与大家一起分享从上线时的单台服务器架构开始一直到现在的豆瓣架构变迁历程。

融合思想:深入探索S#arp架构

Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。

王雷谈开源以及新兴市场计划

中国作为新兴市场中的新兴市场,是Sun在美国之外实施SSE(SUN Startup Essentials)项目重点关注的地区。在QCon Beijing 2009期间,InfoQ中文站有幸对此项目的负责人王雷先生进行了采访,探讨了关于开源、新兴市场、SSE等话题。

使用HTML5构建下一代的Web Form

HTML5 是由 WHATWG发起的,最开始的名称叫做Web Application 1.0,而后这个标准吸纳了Web Forms 2.0的标准,并一同被W3C组织所采用,合并成为下一代的HTML5标准。