Springboot利用xjar包并使用maven插件便捷对jar包加密,防止jar包反编译泄露源码数据
·
主要要感谢:
https://github.com/core-lib/xjar
https://github.com/core-lib/xjar-maven-plugin
主要内容在以上两个链接。
下面是我总结的加密过程和部署到Linux服务器的步骤
1、先打开上面两个链接,了解了主要内容后,添加依赖
<project>
<!-- 设置 jitpack.io 仓库 -->
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<!-- 添加 XJar 依赖 -->
<dependencies>
<dependency>
<groupId>com.github.core-lib</groupId>
<artifactId>xjar</artifactId>
<version>4.0.1</version>
<!-- <scope>test</scope> -->
</dependency>
</dependencies>
</project>
然后加入xjar的maven插件(版本都是写4.0.1不用修改了)
<project>
<!-- 设置 jitpack.io 插件仓库 -->
<pluginRepositories>
<pluginRepository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</pluginRepository>
</pluginRepositories>
<!-- 添加 XJar Maven 插件 -->
<build>
<plugins>
<plugin>
<groupId>com.github.core-lib</groupId>
<artifactId>xjar-maven-plugin</artifactId>
<version>4.0.1</version>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
<phase>package</phase>
<!-- 或使用
<phase>install</phase>
-->
<configuration>
<!-- <password>别看了,明文密码不可能写在这的</password> -->
<!-- optional <algorithm/> <keySize/> <ivSize/> <includes> <include/>
</includes> <excludes> <exclude/> </excludes> <sourceDir/> <sourceJar/> <targetDir/>
<targetJar/> -->
<excludes>
<exclude>
static/**
</exclude>
<exclude>
templates/**
</exclude>
<exclude>
resources/**
</exclude>
<exclude>
META-INF/resources/**
</exclude>
</excludes>
<targetJar>你的jar包名字-1.0.1.jar</targetJar>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
- 要记得将xjar-maven-plugin插件放置于 spring-boot-maven-plugin 的后面, 因为其插件的默认 phase 也是 package
注意:
- 不要在 pom.xml 的 xjar-maven-plugin(就是<password></password>) 配置中写上密码,这样会导致打包出来的 xjar 包中的 pom.xml 文件保留着密码,极其容易暴露密码!
- 记得排除下静态文件加密,比如我的项目就是:
<excludes>
<exclude>
static/**
</exclude>
<exclude>
templates/**
</exclude>
<exclude>
resources/**
</exclude>
<exclude>
META-INF/resources/**
</exclude>
</excludes>
- 最后就是设置好输出加密的jar名字:
<targetJar>你的jar包名字-1.0.1.jar</targetJar>
2、在eclipse或者STS工具上进行build
在工具上选择Maven build:
然后输入:
clean package "-Dxjar.password=你的password" "-Dmaven.test.skip=true"
然后点击右下角的run等待一分钟即可在你的project的target包中看到加密的jar包,加密后的jar包通常会比不加密的jar包大两倍的体积。
然后还会在target文件夹中生成一个xjar.go文件,这个才是解密的文件(GO启动器文件)
3、把加密后的jar包部署到服务器的过程
把生成加密的jar包和xjar.go上传到服务器后,需要服务器安装go环境
yum install golang
安装完后输入
go env
不报错就是安装go环境成功了。
接下来把上传的xjar.go编译得到启动器的可执行文件(记得转到xjar.go所在的文件后输入下面的命令)
go build xjar.go
输入完后Linux服务器会得到一个xjar的二进制包,每次在本地加密jar包生成的xjar.go都是和同一时间生成的加密jar包ma5码对应的,所以每次加密后都要把最新的xjar.go包一起上传然后build这个xjar.go才能解密运行在Linux服务器上!切记!!!
在生成好xjar二进制文件后,输入下面的命令运行jar包即可完成部署(记得修改下下面的提示)
#这是nohup后台启动的命令
nohup /path/to/xjar /path/to/java [OPTIONS比如Java的内存分配#-Xms2048m -Xmx5120m -Xss1024K -XX:MetaspaceSize=512m] -jar /path/to/你加密的jar包名字.jar [ARGS]
和之前没加密的jar启动方式就是多了 /path/to/xjar(解密)
千万记住每次加密后都要把最新的xjar.go包一起上传然后build这个xjar.go才能解密运行在Linux服务器上!
下面给出xjar包的特性,供大家参考:
Spring Boot JAR 安全加密运行工具, 同时支持的原生JAR.
基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动, 动态解密运行的方案, 避免源码泄露以及反编译.
功能特性
- 无代码侵入, 只需要把编译好的JAR包通过工具加密即可.
- 完全内存解密, 降低源码以及字节码泄露或反编译的风险.
- 支持所有JDK内置加解密算法.
- 可选择需要加解密的字节码或其他资源文件.
- 支持Maven插件, 加密更加便捷.
- 动态生成Go启动器, 保护密码不泄露.
环境依赖
JDK 1.7 +
更多推荐
已为社区贡献3条内容
所有评论(0)