一 背景: 公司给甲方做的项目基本完结, 甲方向我们索要源码, 按公司要求,技术人员应对核心源码加密后,与非核心源码交给甲方, 甲方可以单独部署。
二 问题点:
1 核心源码和业务源码紧密耦合,导致核心源码分离困难
2 如何才能保护自己的源码不被破解
三 我的分析:
1 对于问题一,因核心源码涉及业务较多。不利于提取为单独的服务部署, 抽取成jar包引入可以减少代码的改动
2 对于问题二, 技术上有三种方案,即混淆、加密和远程JAR包引用。
四 解决方案:
根据业务背景,我首先考虑的是混淆, 原因如下:
1 加密方式: 加密适用于整个JAR包class文件加密, 而且加密后仍需要解密, 但目前有的技术时在字节码加载时期通过重写类加载器, 来进行class文件的解密。那么开放的源码在引入JAR包时的编译器就找不到对应的类, 导致编译失败。 所以JAR包加密不适用于此情景
2 源码混淆: 严格意义上来说, 源码混淆其实算不上对源码的保护, 只是增加了代码阅读的难度,耐心一点是可以读懂源码的,现阶段, 其他方案短期内也不容易实现, 就采取了曲线救国的方式
3 远程JAR引用: 也考虑了这种方案,但因源码和核心源码耦合太多, 且调用只能通过反射,耗时耗力就放弃了
五 技术支持:
1 JAR包加密方式有一下几种提供参考:
1) 对包后的class进行加密, 重写类加载器对加密的class文件进行解密。
2) 通过JVMTI agent 动态加载来解密
当前流行的工具: VRBOX,ClassFinal,XJar。。。
2 混淆思路,将字段替换为a,b,c...难以读懂的代码
目前流行工具:proguard
3 远程JAR引用:
JDK自带API,
URLClassLoader loader=new URLClassLoader(new URL[]{new URL("http://aa.bb.com/xxx.jar")})
标签:
jar
本文转载自: https://blog.csdn.net/herendong/article/details/120321996
版权归原作者 醉心苍林 所有, 如有侵权,请联系我们删除。
版权归原作者 醉心苍林 所有, 如有侵权,请联系我们删除。