浏览 5184 次
锁定老帖子 主题:Ruby 可以进行Code 加密吗?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-23
如果用Ruby 来做一些商业的产品的话, Ruby 可以象Java一样进行Code 加密, 来保护自己的产品吗? 还是象Perl/PHP一样, 只能提供所有的源代码给用户? 谢谢. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-04-23
jacksonchenjp 写道 如果用Ruby 来做一些商业的产品的话, Ruby 可以象Java一样进行Code 加密, 来保护自己的产品吗? 还是象Perl/PHP一样, 只能提供所有的源代码给用户? 谢谢. Java的code加密等于没有,反编译太容易了,反而是PHP方面,Zend公司提供的加密方式,根本无法破解。Ruby也可以以类似的方式去做,只要改一下ruby解析器的文件加载部分就可以了。 |
|
返回顶楼 | |
发表时间:2007-04-23
请教: 目前有现成的工具, 来做类似的加密处理吗?
|
|
返回顶楼 | |
发表时间:2007-04-23
robbin 写道 jacksonchenjp 写道 如果用Ruby 来做一些商业的产品的话, Ruby 可以象Java一样进行Code 加密, 来保护自己的产品吗? 还是象Perl/PHP一样, 只能提供所有的源代码给用户? 谢谢. Java的code加密等于没有,反编译太容易了,反而是PHP方面,Zend公司提供的加密方式,根本无法破解。Ruby也可以以类似的方式去做,只要改一下ruby解析器的文件加载部分就可以了。 不见得java的加密很容易反编译, 难度与加密的算法有关. |
|
返回顶楼 | |
发表时间:2007-04-23
Java的加密工具,大多数是起到一个Obfuscator, 混淆的作用.
说白一点, 反编译出来的code 的可读性会很差. |
|
返回顶楼 | |
发表时间:2007-04-23
jacksonchenjp 写道 Java的加密工具,大多数是起到一个Obfuscator, 混淆的作用.
说白一点, 反编译出来的code 的可读性会很差. 是的,我想这样就差不多了。没有注释,没有命名规则的源码,很难读了。当然对于防止黑客是不够的,但对于版权保护差不多可以了。 但我想,即便是C一类的东西,不一样可以被破解。所以防黑客这一条可以忽略了。 |
|
返回顶楼 | |
发表时间: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' |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |