浏览 2055 次
|
锁定老贴子 主题:Ruby 可以进行Code 加密吗?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-04-23
如果用Ruby 来做一些商业的产品的话,
Ruby 可以象Java一样进行Code 加密, 来保护自己的产品吗? 还是象Perl/PHP一样, 只能提供所有的源代码给用户? 谢谢. 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间: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-24
还可以把核心的文件压缩。在对压缩文件进行加密。用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
:idea:
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
|
|
| 返回顶楼 | |










