大家好,我是爱撸代码的开源大叔!
在开发项目时,我们不希望自己的代码被别人抄袭,但是 java 开发的项目可以被反编译,我们可以用代码混淆的方式来解决。Java 代码混淆就是为了保护 Java 源代码,对编译好的class文件进行混淆处理。
常见的加密方式:
对class文件的字节码完全加密
对class文件混淆:字节码混淆,比如对类名、变量名、方法名进行替换。
今天给大家推荐一款好用的代码混淆工具 – classfinal。
项目简介
ClassFinal 是 java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework。
基于 -agentJava:xxx.jar这一原理,加密时对class文件做了两次处理,一次是对class文件的字节码完全加密,一次是对class文件混淆,这个混淆是保留成员和方法,对方法内部实现进行隐藏;解密时,判断如果该类是自己加密过的,找到完全加密的字节码进行解密,如果不是自己加密的就跳过。其对class文件混淆,就是方便类似SpringBoot等三方框架直接分析class文件。
项目特性
- 不用修改源代码,直接对jar或者war包进行加密
- 支持普通 jar包、springboot jar包以及 java web项目编译的war包。
- 支持maven插件,在打包过程中直接加密。
- 支持加密配置文件
- 支持指定机器,加密后jar或者war只能在指定机器上运行
- 加密后文件通过 jd-gui 或者 IDE 打开后是空文件或者是空方法
项目使用
下载项目
1 | https://repo1.maven.org/maven2/net/roseboy/classfinal-fatjar/1.2.1/classfinal-fatjar-1.2.1.jar |
加密jar包
1 | java -jar classfinal-fatjar.jar -file test.jar -libjars a.jar,b.jar -packages com.demo -exclude com.demo.Main -pwd 1qaz -Y |
注意:packages 这个参数必须指定!
生成的test-encrypted.jar 就是加密后的文件,加密后的文件不可直接执行,需要配置 javaagent。
maven 插件加密
在pom.xml中加入以下插件配置:
1 | <plugin> |
加密文件启动
加密后的项目需要设置 javaagent 来启动,并且要指定密码。
1 | java -javaagent:test-encrypted.jar -jar test.jar |
启动后在控制台里输入密码。
总结
ClassFinal 是一款不错的文件加密方式,使用起来很方便,不需要改动源代码,有了它在也不担心代码被抄袭了!感兴趣的小伙伴赶快下载试试吧~
1 | 项目地址:https://gitee.com/roseboy/classfinal |