论坛首页 编程语言技术论坛

Ruby 可以进行Code 加密吗?

浏览 5184 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-23  

如果用Ruby 来做一些商业的产品的话,
Ruby 可以象Java一样进行Code 加密, 来保护自己的产品吗?

还是象Perl/PHP一样, 只能提供所有的源代码给用户?

谢谢.
   发表时间:2007-04-23  
jacksonchenjp 写道

如果用Ruby 来做一些商业的产品的话,
Ruby 可以象Java一样进行Code 加密, 来保护自己的产品吗?

还是象Perl/PHP一样, 只能提供所有的源代码给用户?

谢谢.


Java的code加密等于没有,反编译太容易了,反而是PHP方面,Zend公司提供的加密方式,根本无法破解。Ruby也可以以类似的方式去做,只要改一下ruby解析器的文件加载部分就可以了。
0 请登录后投票
   发表时间:2007-04-23  
请教: 目前有现成的工具, 来做类似的加密处理吗?
0 请登录后投票
   发表时间:2007-04-23  
robbin 写道
jacksonchenjp 写道

如果用Ruby 来做一些商业的产品的话,
Ruby 可以象Java一样进行Code 加密, 来保护自己的产品吗?

还是象Perl/PHP一样, 只能提供所有的源代码给用户?

谢谢.


Java的code加密等于没有,反编译太容易了,反而是PHP方面,Zend公司提供的加密方式,根本无法破解。Ruby也可以以类似的方式去做,只要改一下ruby解析器的文件加载部分就可以了。


不见得java的加密很容易反编译, 难度与加密的算法有关.
0 请登录后投票
   发表时间:2007-04-23  
Java的加密工具,大多数是起到一个Obfuscator, 混淆的作用.

说白一点, 反编译出来的code 的可读性会很差.
0 请登录后投票
   发表时间:2007-04-23  
jacksonchenjp 写道
Java的加密工具,大多数是起到一个Obfuscator, 混淆的作用.

说白一点, 反编译出来的code 的可读性会很差.


是的,我想这样就差不多了。没有注释,没有命名规则的源码,很难读了。当然对于防止黑客是不够的,但对于版权保护差不多可以了。
但我想,即便是C一类的东西,不一样可以被破解。所以防黑客这一条可以忽略了。
0 请登录后投票
   发表时间:2007-04-23  
还可以把核心的文件压缩。在对压缩文件进行加密。用zip读取
如:
require 'zip/zipfilesystem'

Zip::ZipFile.open("zip/my.zip", true) {
  |zf|
  zf.file.open("log/simplelog.rb", "w") {
    |f|
    f.puts "def simpleLog(v)"
    f.puts '  Kernel.puts "INFO: #{v}"'
    f.puts "end"
  }
}

require 'zip/ziprequire'
$:<< 'zip/my.zip'
require 'log/simplelog'
simpleLog 'Hello world'
0 请登录后投票
   发表时间:2007-04-24  
 
rubyzip重写了Kernel#require,并把rb文件内容从zip中读出来进行eval。


module Kernel #:nodoc:all
  alias :oldRequire :require

  def require(moduleName)
    zip_require(moduleName) || oldRequire(moduleName)
  end

  def zip_require(moduleName)
    return false if already_loaded?(moduleName)
    get_resource(ensure_rb_extension(moduleName)) { 
      |zis| 
      eval(zis.read); $" << moduleName 
    }
    return true
  rescue Errno::ENOENT => ex
    return false
  end

  def get_resource(resourceName, &aProc)
    zl = ZipList.new($:.grep(/\.zip$/))
    zl.get_input_stream(resourceName, &aProc)
  end

  def already_loaded?(moduleName)
    moduleRE = Regexp.new("^"+moduleName+"(\.rb|\.so|\.dll|\.o)?$")
    $".detect { |e| e =~ moduleRE } != nil
  end

  def ensure_rb_extension(aString)
    aString.sub(/(\.rb)?$/i, ".rb")
  end
end
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics