- pigzhou
- 等级: 初级会员
- 性别:
- 文章: 3
- 积分: 40
- 来自: 北京
|
公司给了我一个任务,要对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等开发语言。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
返回顶楼 |
|
|
- 四不象
- 等级: 初级会员
- 性别:
- 文章: 53
- 积分: 20
- 来自: 上海
|
无论是java还是.net,甚至是native code的程序,都是可以反编译的,只要增加反编译成本就行了,最有效的方法是混淆代码,降低翻遍以后代码的可读性
|
返回顶楼 |
|
|
- aochant
- 等级: 初级会员
- 性别:
- 文章: 27
- 积分: 30
- 来自: 北京
|
混淆可以在一定程度上解决问题 但仅仅是一定程度上
|
返回顶楼 |
|
|
- diggywang
- 等级: 初级会员
- 性别:
- 文章: 174
- 积分: 30
- 来自: Mars
|
混淆用用么好了,大型商业公司也都是仅仅用混淆来保护自己的知识产权。
|
返回顶楼 |
|
|
- cs6641468
- 等级: 初级会员
- 文章: 4
- 积分: 30
|
混淆一下,即使别人拿到class反编译后,是可以运行打包,但很难读懂修改。 至于java加密class,最多也就是给反编译的人添点堵,多浪费点时间而已。
|
返回顶楼 |
|
|
- freezingsky
- 等级: 初级会员
- 文章: 263
- 积分: 40
|
混淆是比较有效的,其他的加密,感觉成本太高,而且防范能力也不是很高!
|
返回顶楼 |
|
|
- kanme818
- 等级: 初级会员
- 性别:
- 文章: 76
- 积分: 30
- 来自: 上海
|
最好的加密就是业务逻辑,复杂到就算明文都没人愿意看,你就成功了
|
返回顶楼 |
|
|
- elgs
- 等级: 初级会员
- 性别:
- 文章: 41
- 积分: 70
- 来自: 上海
|
虽然我比较讨厌这种做法,但我倒是有一个思路。 1,对你的jar,class文件进行加密(对称加密jar,classes,非对称加密秘钥,同SSL); 2,扩展URLClassLoader,加在加密过的jar,class文件,解密,再构造你自己的Classloader; 这样只要你秘钥不丢失,就不可能被解密了。 但是我想说的是,现在竞争对手要抄袭你的东西,很少从源代码的层面抄袭了,一般都是从你的界面,功能。 我的个人看法。
|
返回顶楼 |
|
|
- 四不象
- 等级: 初级会员
- 性别:
- 文章: 53
- 积分: 20
- 来自: 上海
|
elgs 写道 虽然我比较讨厌这种做法,但我倒是有一个思路。
1,对你的jar,class文件进行加密(对称加密jar,classes,非对称加密秘钥,同SSL);
2,扩展URLClassLoader,加在加密过的jar,class文件,解密,再构造你自己的Classloader;
这样只要你秘钥不丢失,就不可能被解密了。
但是我想说的是,现在竞争对手要抄袭你的东西,很少从源代码的层面抄袭了,一般都是从你的界面,功能。
我的个人看法。
你再怎么加密最后总要解密了才能在JVM上运行的,我直接HOOK JVM就可以破解了
|
返回顶楼 |
|
|
- founder
- 等级:
- 性别:
- 文章: 34
- 积分: 107
- 来自: 南京
|
我们在这个问题上也折腾过好长时间,最后用的是HASP加密锁方案
|
返回顶楼 |
|
|