Java字节码加密⼯具ClassFinal
ClassFinal是⼀款Java class⽂件安全加密⼯具,⽀持直接加密jar包或war包,⽆需修改任何项⽬代码,兼容spring-framework,可避免源码泄漏或字节码被反编译。
项⽬模块说明
classfinal-core: ClassFinalde的核⼼模块,⼏乎所有加密的代码都在这⾥;
classfinal-fatjar: ClassFinal打包成独⽴运⾏的jar包;
classfinal-maven-plugin: ClassFinal加密的maven插件;
功能特性
⽆需修改原项⽬代码,只要把编译好的jar/war包⽤本⼯具加密即可。
运⾏加密项⽬时,⽆需求修改tomcat,spring等源代码。
⽀持普通jar包、springboot jar包以及普通java web项⽬编译的war包。
⽀持spring framework、swagger等需要在启动过程中扫描注解或⽣成字节码的框架。
⽀持maven插件,添加插件后在打包过程中⾃动加密。
⽀持加密WEB-INF/lib或BOOT-INF/lib下的依赖jar包。
环境依赖
JDK 1.8 +
使⽤说明
加密
执⾏以下命令
java -jar classfinal-fatjar.jar -file yourpaoject.jar -libjars a.jar,b.jar -urpackage2 -urpackage.Main -pwd 123456 -Y
参数说明
-file 加密的jar/war完整路径
-packages 加密的包名(可为空,多个⽤","分割)
-libjars jar/war包lib下要加密jar⽂件名(可为空,多个⽤","分割)
-exclude 排除的类名(可为空,多个⽤","分割)
-pwd 加密密码
-Y ⽆需确认,不加此参数会提⽰确认以上信息
结果: ⽣成 yourpaoject-encrypted.jar,这个就是加密后的jar⽂件;加密后的⽂件不可直接执⾏,需要配置javaagent。
注: 以上⽰例是直接⽤参数执⾏,也可以直接执⾏ java -jar classfinal-fatjar.jar按照步骤提⽰输⼊信息完成加密。
maven插件⽅式
在要加密的项⽬l中加⼊以下插件配置,⽬前最新版本是:1.1.0。
<plugin>
<groupId&seboy</groupId>
<artifactId>classfinal-maven-plugin</artifactId>
<version>${classfinal.version}</version>
<configuration>
<password>000000</password>
<packages&urpackage2</packages>
<excludes>org.spring</excludes>
<libjars>a.jar,b.jar</libjars>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>classFinal</goal>
</goals>
</execution>
</executions>
</plugin>
运⾏mvn package时会在target下⾃动加密⽣成yourpaoject-encrypted.jar。
maven插件的参数名称与直接运⾏的参数相同,请参考上节的参数说明。
启动加密后的jar
加密后的项⽬需要设置javaagent来启动项⽬,项⽬在启动过程中解密class,完全内存解密,不留下任何解密后的⽂件。
解密功能已经⾃动加⼊到 yourpaoject-encrypted.jar中,所以启动时-javaagent与-jar相同,不需要额外的jar包。
启动jar项⽬执⾏以下命令:
java源代码加密java -javaagent:yourpaoject-encrypted.jar='-pwd 0000000' -jar yourpaoject-encrypted.jar
参数说明
-pwd 密码
tomcat下运⾏加密后的war
tomcat catalina 增加以下配置:
//linux下 catalina.sh
CATALINA_OPTS="$CATALINA_OPTS -javaagent:classfinal-fatjar.jar='-pwd 0000000'";
export CATALINA_OPTS;
//win下catalina.bat
set CATALINA_OPTS="%CATALINA_OPTS% -javaagent:classfinal-fatjar.jar='-pwd 0000000'"
参数说明:
-pwd 0000000 密码
本⼯具使⽤AES算法加密class⽂件,密码是保证不被破解的关键,请保存好密码,请勿泄漏。
密码⼀旦忘记,项⽬不可启动且⽆法恢复,请牢记密码。
本⼯具加密后,原始的class⽂件并不会完全被加密,只是⽅法体被清空,保留⽅法参数、注解等信息,这是为了兼容
spring,swagger等扫描注解的框架; ⽅法体被清空后,反编译者只能看到⽅法名和注解,看不到⽅法的具体内容;当class被classloader加载时,真正的⽅法体会被解密注⼊。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论