• 作者:老汪软件技巧
  • 发表时间:2024-09-16 00:02
  • 浏览量:

今天给大家分享一个 SpringBoot 程序 Jar 包加密的方式,通过代码加密可以实现无法反编译。

应用场景就是当需要把公司的产品部署到友方公司或者其他公司时,可以防止客户直接反编译出来源码,大大提升代码的安全性。

版本一、proguard-maven-plugin

第一种方式就是使用代码混淆的方式,可以参考proguard-maven-plugin插件使用,因为配置复杂,用起来太麻烦,本文不做重点介绍。

/wvengen/pro…

二、classfinal-maven-plugin

第二种方式就是使用代码加密的方式,classfinal-maven-plugin方式比较简单,只需要在pom.xml文件中引入一个plugin,然后简单的修改几项配置即可使用。

这种方式不仅可以对代码进行加密,对配置文件application.yml、lib 下的依赖也可以加密。

还可以指定机器运行程序。

/roseboy/cla…

三、实战

下面我们实战一下,首先创建一个 SpringBoot 程序,在 pom.xml 中加入。

需要注意的是,该插件需要放到spring-boot-maven-plugin后面

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
            <plugin>
                
                <groupId>net.roseboygroupId>
                <artifactId>classfinal-maven-pluginartifactId>
                <version>1.2.1version>
                <configuration>
                    <password>#password>
                    <excludes>org.springexcludes>
                    <packages>${groupId}packages>
                    <cfgfiles>application.yml,application-dev.ymlcfgfiles>
                    <libjars>hutool-all.jarlibjars> 
                    <code>xxxxxcode> 
                configuration>
                <executions>
                    <execution>
                        <phase>packagephase>
                        <goals>
                            <goal>classFinalgoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
    build>

上述代码中的机器码可以使用如下工具生成,进去之后点击下载。

https://repo1.maven.org/maven2/net/roseboy/classfinal-fatjar/1.2.1/classfinal-fatjar-1.2.1.jar

然后执行,注意最后参数为大写的C。

_jar包加密防止反编译_java防止反编译加密

java -jar classfinal-fatjar-1.2.1.jar -C

最后将输出的机器码放入到上方的 code 中即可。

执行 Maven 命令打包即可,生成文件如下,其中EncryptDemo-0.0.1-SNAPSHOT-encrypted.jar为生成的加密jar 包。

如需提供给客户,提供该包即可。

使用反编译工具,查看 jar 包中配置文件,可以看到配置文件已经为空。

反编译工具我这里用的是 luyten。

/deathmarine…

查看代码文件,可以看到方法体被清空,只保留了方法参数、注解等信息。

原理就是启动过程中进行解密,全是内存操作,非常安全。

源代码如下:/zuiyu-main/…

分支:jar-encry

最后介绍一下 ClassFinal ,ClassFinal 能够对class文件进行加密,支持直接加密jar包或者war包,无需修改任务代码,兼容spring framework,可避免源码泄露或者字节码被反编译。

目前看官方介绍支持的功能如下:

如有需求的小伙伴可以试试,用了一下,暂时还挺好用,不知道有没有坑,有用过的小伙伴或者有更好用的工具欢迎评论区交流一下。