写点什么

RubyEncoder:Ruby 混淆器和代码保护

2008 年 10 月 29 日

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

2008 年 10 月 29 日 21:503291
用户头像

发布了 33 篇内容, 共 34308 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

封装变化的内容

硬核编程

程序开发

第 9 周作业 _ 数据分析

园子

单片机如何从上电复位执行到main函数?

不脱发的程序猿

嵌入式软件 单片机 28天挑战 3月日更 上电复位执行到main函数

第九章学习总结

Kasn

产品经理 产品经理训练营

AI量化智能交易软件,量化策略系统搭建

13823153121

从优秀到卓越:成为DevOps专家的7项软技能

禅道项目管理

DevOps 趋势 软技能

音频互动连麦使用手册

anyRTC开发者

ios android 音视频 WebRTC RTC

世界首台人工智能地震监测系统问世;AAAI 2021 | 利用深度元学习对城市销量进行预测

京东科技开发者

大数据 红帽

聊聊Java的异常机制问题

华为云开发者社区

Java 对象 异常机制 Throwable Error

最火前端Web组态软件(可视化)

尔嵘

可视化数据分析搭建 前端可视化 web组态 托拉拽组态

如何避免水肥一体化过量灌溉?开启智慧管理,一个屏幕轻松搞定

一只数据鲸鱼

物联网 数据可视化 智慧城市 智慧农业

EGG Network公链生态应用EFTalk阿凡提

币圈那点事

五年磨一剑,海外运营商数字化转型与新一代OSS

鲸品堂

方法论 数字化转型 运营商

nginx做代理访问慢,优化方案

Ng

颠覆认知——Redis会遇到的15个「坑」,你踩过几个?

Kaito

redis 踩坑 后端

nginx配置日志为json格式,nginx按照天实现日志分割,nginx配置负载均衡

Ng

图解 | 原来这就是 IO 多路复用

云流

Java 程序员 架构 面试

layui使用templet格式化表格数据

互联网大厂100道Android面试题助你冲关金三银四!附小技巧

欢喜学安卓

android 程序员 面试 移动开发

第九章作业

Kasn

产品经理 产品经理训练营

程序开发必备的六个信条

硬核编程

程序开发

通过序列号Sequence零代码实现订单流水号

crudapi

低代码 流水号 crud crudapi 序列号

力扣(LeetCode)刷题,简单题(第12期)

不脱发的程序猿

LeetCode 面试刷题 28天写作 算法面经 3月日更

产品经理训练营作业 06

KingSwim

产品经理训练营 - 作业六

胡小湖

使用VUE和Element 创建一个dialog对话框组件的详细过程

尔嵘

智慧平安社区开发解决方案,智能安防小区综合管控平台建设

WX13823153201

大侠请留步!欢迎有极客精神的你

Lily

Kubernetes弃用Docker运行时,小甜甜变牛夫人影响了谁?

会飞的鱼

Docker 云计算 架构 容器 #Kubernetes#

中国云基础设施支出创新高,增速全球第一;国内首个区块链特色司法鉴定机构在京成立

京东科技开发者

区块链 人工智能 开发者

vue+element中引入百度地图

尔嵘

Vue Element 百度地图

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

RubyEncoder:Ruby混淆器和代码保护-InfoQ