豫ICP备17040950号-2

springboot的jar加密防止反编译

文章目录
  1. 1. 1、引入 pom
  2. 2. 2、 通过main方法运行
  3. 3. 3、详细步骤说明:
  4. 4. 4、编译之后,得到执行器:
  5. 5. 5、项目启动运行:
  6. 6. 6、此时jar通过xjar可正常运行

XJar,是一款Spring Boot JAR 安全加密运行工具, 同时支持的原生JAR.

基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动, 动态解密运行的方案, 避免源码泄露以及反编译.

功能特性

  • 无代码侵入, 只需要把编译好的JAR包通过工具加密即可.
  • 完全内存解密, 降低源码以及字节码泄露或反编译的风险.
  • 支持所有JDK内置加解密算法.
  • 可选择需要加解密的字节码或其他资源文件.
  • 支持Maven插件, 加密更加便捷.
  • 动态生成Go启动器, 保护密码不泄露.

对Springboot打包后的jar加密处理后,jd-gui已不能反编译成功

github地址:https://github.com/core-lib/xjar

1、引入 pom

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- 防止反编译加密 -->
<dependency>
<groupId>com.github.core-lib</groupId>
<artifactId>xjar</artifactId>
<version>4.0.0</version>
</dependency>
<!-- xjar的依赖,否则会报错 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.20</version>
</dependency>
<!--依赖包仓库-->
<repositories>
<repository>
<id>jitpack</id>
<url>https://jitpack.io</url>
</repository>
</repositories>

2、 通过main方法运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import io.xjar.XCryptos;

public static void main(String[] args) throws Exception {
produce();
}

public static void produce() throws Exception {
XCryptos.encryption()
// 项目生成的jar
.from("D:\\projects\\test\\target\\test.jar")
// 加密的密码
.use("testaa1111122222")
// 要加密的资源
.include("/**/*.class")
.include("/**/*.xml")
.include("/**/*.yml")
// 加密后的jar,此时:通过jd-gui反编译失败
.to("D:\\temp\\test.jar");
}

3、详细步骤说明:

(1)、对Springboot项目maven打包后生成的jar,以上述代码运行,可得到加密后的jar(此时加密的jar经jd-gui反编译报错)

(2)、生成加密jar的同时,目录下会生成xjar.go的GO启动器文件

(3)、对xjar.go编译(需要安装go环境,区分windows和linux),生成对应的go执行器。命令:

1
go build xjar.go

4、编译之后,得到执行器:

window:xjar.exe

linux:xjar

5、项目启动运行:

window:

1
xjar.exe java -jar test.jar

linux:

1
nohup ./xjar java -jar test.jar

6、此时jar通过xjar可正常运行