一.使用场景
在实际开发中,有时候我们可能需要对 SpringBoot 项目的 Jar 包进行加密,以防止他人对代码的反编译和恶意使用。以下是一些常见的使用场景:
1.商业应用保护:如果你的 SpringBoot 项目是一个商业应用,你可能希望将核心代码进行加密,以避免竞争对手或黑客窃取关键业务逻辑和算法。
2.安全性要求高的应用:某些应用程序可能处理敏感数据,如金融、医疗或政府数据等。在这种情况下,加密 Jar 包可以提供额外的安全层,确保数据和代码的机密性。
3.防止反编译:通过加密 Jar 包,你可以大幅降低他人对代码的理解和修改难度,从而减少源代码泄漏的风险,并阻碍恶意用户进行反编译、篡改和滥用代码。
4.保护知识产权:对于一些重要的知识产权,如算法、模型等,加密 Jar 包可以有效地防止他人窃取和复制这些知识产权,保护你的技术优势和商业利益。
二.加密方案
采用 ClassFinal。
ClassFinal 是一款 java class 文件安全加密工具,支持直接加密 Jar 包或 War 包,无需修改任何项目代码,兼容 spring-framework,可避免源码泄漏或字节码被反编译,并且可以对 yml、properties 配置文件以及 lib 目录下的 maven 依赖进行加密处理。支持绑定机器,项目加密后只能在特定机器运行。
三.配置使用
只需要在项目的 pom.xml 文件中增加如下插件即可,需要注意的是,该插件时要放到 spring-boot-maven-plugin 插件后面,否则不起作用。
四.启动方式
1.无密码启动
2.有密码启动
3.绑定机器启动
下载 classfinal-fatjar-1.2.1.jar 包,在下载的包所在路径下 cmd 执行 java -jar classfinal-fatjar-1.2.1.jar -C 命令,会自动生成一串机器码:
将此生成好的机器码,放到 maven 插件中的 code 里面即可。这样,打包好的项目只能在生成机器码的机器运行,其他机器则启动不了项目。
五.反编译效果
启动包加密之后,方法体被清空,保留方法参数、注解等信息。主要兼容 swagger 文档注解扫描,反编译只能看到方法名和注解,看不到方法体的具体内容。启动过程中解密 class,完全内存解密,不留下任何解密后的文件。
评论