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

java真的无法加密么

浏览 13882 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-05-07  

公司给了我一个任务,要对java代码进行加密,避免其他人拿到公司产品反编译。

目前考虑的方案的是:

java文件编译为class文件之后,使用加密工具加密,然后编写classloader,其中读取文件解密成bytecode的部分使用c语言编写,然后java classloader通过jni的方式调用。

貌似一个完美的解决方案,但是读了http://www.javaworld.com/javaworld/javaqa/2003-05/01-qa-0509-jcrypt.html?page=1文章之后,我彻底崩溃了,难道真的没有合理的解决方案了么

 

这篇文章提到破解上述方案的方法:

因为classloader最终都要调用defineClass,而多个defineClass方法最终都会调用defineClass(String, byte[], int, int, ProtectionDomain) ,所以只要重写jdk中的defineClass(String, byte[], int, int, ProtectionDomain) 方法实现,就可以将你的原始class bytecode暴露无遗,此时再做反编译即可。

 

作者还提到了另一个方法 自定义 JVMPI 代理来处理JVMPI_EVENT_CLASS_LOAD_HOOK事件,也可以做到破解.

 

作者最后给的结论是:maybe Java was born to be a language for pure open source development after all。

要解决,可以考虑.net等开发语言。

   发表时间:2013-05-07  
无论是java还是.net,甚至是native code的程序,都是可以反编译的,只要增加反编译成本就行了,最有效的方法是混淆代码,降低翻遍以后代码的可读性
0 请登录后投票
   发表时间:2013-05-07  
混淆可以在一定程度上解决问题
但仅仅是一定程度上
0 请登录后投票
   发表时间:2013-05-08  
混淆用用么好了,大型商业公司也都是仅仅用混淆来保护自己的知识产权。
0 请登录后投票
   发表时间:2013-05-09  
混淆一下,即使别人拿到class反编译后,是可以运行打包,但很难读懂修改。
至于java加密class,最多也就是给反编译的人添点堵,多浪费点时间而已。
0 请登录后投票
   发表时间:2013-05-09  
混淆是比较有效的,其他的加密,感觉成本太高,而且防范能力也不是很高!
0 请登录后投票
   发表时间:2013-05-09  
最好的加密就是业务逻辑,复杂到就算明文都没人愿意看,你就成功了
0 请登录后投票
   发表时间:2013-05-10  
虽然我比较讨厌这种做法,但我倒是有一个思路。
1,对你的jar,class文件进行加密(对称加密jar,classes,非对称加密秘钥,同SSL);
2,扩展URLClassLoader,加在加密过的jar,class文件,解密,再构造你自己的Classloader;
这样只要你秘钥不丢失,就不可能被解密了。
但是我想说的是,现在竞争对手要抄袭你的东西,很少从源代码的层面抄袭了,一般都是从你的界面,功能。
我的个人看法。
0 请登录后投票
   发表时间:2013-05-10  
elgs 写道
虽然我比较讨厌这种做法,但我倒是有一个思路。
1,对你的jar,class文件进行加密(对称加密jar,classes,非对称加密秘钥,同SSL);
2,扩展URLClassLoader,加在加密过的jar,class文件,解密,再构造你自己的Classloader;
这样只要你秘钥不丢失,就不可能被解密了。
但是我想说的是,现在竞争对手要抄袭你的东西,很少从源代码的层面抄袭了,一般都是从你的界面,功能。
我的个人看法。

你再怎么加密最后总要解密了才能在JVM上运行的,我直接HOOK JVM就可以破解了
0 请登录后投票
   发表时间:2013-05-10  
我们在这个问题上也折腾过好长时间,最后用的是HASP加密锁方案
0 请登录后投票
论坛首页 编程语言技术版

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