0


JAR包混淆与加密处理

    一  背景: 公司给甲方做的项目基本完结, 甲方向我们索要源码, 按公司要求,技术人员应对核心源码加密后,与非核心源码交给甲方, 甲方可以单独部署。

   二  问题点:

            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
版权归原作者 醉心苍林 所有, 如有侵权,请联系我们删除。

“JAR包混淆与加密处理”的评论:

还没有评论