一文springboot项目加密防止反编译

createh52个月前 (02-01)技术教程9

前言:

当公司开发的项目需要部署到其他公司的服务器上,为了防止源码泄露。我们可以对项目进行加密,以防止反编译。通过使用加密技术,可以保护源代码的安全性,防止恶意攻击者获取敏感信息和业务逻辑。

一:加密方式

  • 1. 代码混淆

代码混淆是一种通过改变源代码的结构和名称,使其难以阅读和理解的过程。它可以通过混淆工具(如proguard-maven-plugin)来实现,这些工具可以将类、方法、变量等名称替换为随机生成的名称,同时改变代码结构,使其难以还原为原始代码。

  • 2. 加密字节码

另一种防止反编译的方法是将字节码加密,使其无法被反编译工具直接还原为源代码。可以使用一些工具(如ClassFinal-maven-plugin, JBCO)将字节码加密,并在运行时动态解密。这种方法可以有效地保护源代码的安全性,但需要在运行时进行解密操作,可能会影响程序的性能。

二:使用ClassFinal-maven-plugin插件

  • 1.引入插件
 
            
                net.roseboy
                classfinal-maven-plugin
                1.2.1
                
                    
                    
                    
                    123456
                    org.spring
                    ${groupId}
                    
                    ${encrypt-config-file}
                    
                    ${encrypt-jar}
                
                
                    
                        package
                        
                            classFinal
                        
                    
                
            
  • 2.打包
  • 3.反编译工具(jd-gui)

下载地址;Java Decompiler

启动包加密之后,方法体被清空,保留方法参数、注解等信息.主要兼容swagger文档注解扫描,反编译只能看到方法名和注解,看不到方法体的具体内容,启动过程中解密class,是在内存中解密,不留下任何解密后的文件。

yml配置文件留下空白


controller,service层:



三:启动

命令启动方式:

#没有密码启动的方式
java -javaagent:study-classfinal-encrypted.jar -jar study-classfinal-encrypted.jar

#有密码启动方式
java -javaagent:study-classfinal-encrypted.jar=-pwd=123456  -jar  study-classfinal-encrypted.jar

docker启动:使用前面文章用到的docker-demo进行演示部署。

文章:docker一键部署springboot项目


四: 注意事项

  • 混淆和加密都可以增加反编译的难度,但不能完全防止反编译。对于非常有决心和技术的攻击者,仍然可能获取到源代码。因此,保护源代码的安全性需要多层次的防护措施。
  • 混淆和加密可能会对程序的性能产生一定的影响。因此,需要在保护源代码和程序性能之间进行权衡,选择适合的加密方法和配置。
  • 混淆和加密可能会使调试和后期维护变得困难。因此,需要在开发阶段和测试阶段进行充分的测试和验证,以确保程序的正确性和稳定性。
  • 在部署加密的 Jar 包时,需要确保运行环境的安全性,防止敏感信息泄露。同时,需要定期更新加密算法和密钥,以应对潜在的安全威胁。

相关文章

防止jar被反编译——最简单的方法

有的时候,给别人提供的jar,有些核心的密匙不想被人通过反编译工具查看,那么要怎样才能做到呢?既要能正常调用,又不想别人反编译jar查看源码网上有很多方法,有使用第三方工具的、使用maven插件的,这...

安卓逆向之APK的反编译与回编译及常见的问题应该如何解决

Apk的反编译与回编译是通过什么途径实现的,遇到的问题会有哪些呢?今天小编就给大家总结一下。我们分为三部分来讲。第一部分是AndroidKillrr 的环境配置;第二部分是apktool工具的使用与更...