老板提了个新需求,要求我们把源代码加密再出售,并且使用加授权码(机器码),才能正常启动jar包.

一开始我是拒绝的,因为有点常识的人都知道,java文件编译成.class文件,然后丢给JVM运行,如果.class是加密的,那么JVM是无法识别,铁定会报错的

如果是java文件加密,也没用,最终客户要的是能运行的jar包,jar包是可以反编译得到java源代码的,所以我一时间不知道该如何是好.好在万能的Google.找个一个折中的方案:

jar包的代码也是加密,但是启动的时候才解密加载到JVM里面,不过也存在一个问题,如果对方客户也是懂行的,肯定知道

jvm加载执行class的过程。既然虚拟机可以正常解析class文件,那么经过虚拟机加载的class一定是解密之后。所以,解密后的文件肯定会在jvm中加载。java探针技术,其实这个探针技术和spring的aop有点类似。就是在执行某个class的时候对他进行动态代理。在执行前后插入一些自己想要的方法操作。

因为spring会先通过asm读取字节码信息,然后进行classloader,然后只要运行过得class文件都会在你指定的目录下被加载出来。

那如何解决呢?我暂时没有头绪,只能赌对方是个不懂行的程序员了

ClassFinal是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译。
https://gitee.com/roseboy/classfinal