XJar 是一个用于加密 Spring Boot JAR 文件的工具,它同样也支持原生 JAR 文件。它通过加密 JAR 包内的资源和扩展 ClassLoader 的方式,实现了程序的加密启动和动态解密运行,以此来防止源码泄露和反编译。

功能特性

  • 无需侵入代码,只需对编译好的 JAR 包进行加密。
  • 完全在内存中解密,减少了源码和字节码泄露或被反编译的风险。
  • 支持所有 JDK 内置的加解密算法。
  • 可以选择性地加密特定的字节码或其他资源文件,以避免不必要的计算资源浪费。
  • 支持 Maven 插件,使得加密过程更加便捷。

一、添加Maven依赖

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>com.github.core-lib</groupId>
<artifactId>xjar</artifactId>
<version>4.0.2</version>
</dependency>

<dependency>
<groupId>com.github.core-lib</groupId>
<artifactId>loadkit</artifactId>
<version>v1.0.0</version>
</dependency>

可能需要将jar包方式安装到本地maven仓库

二、 生产加密jar包和go启动脚本

本地工程打成jar包后,使用如下逻辑将jar包加密:

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

public class JarEncryption {

public static void main(String[] args) throws Exception {
XCryptos.encryption()
.from("E:\\codebase\\test\\test\\target\\test-v6.0.jar")
.use("io.xjar") // 密码
.exclude("/static/**/*") // 排除的文件
.exclude("/initdata/**/*")
.exclude("/templates/**/*")
.exclude("/META-INF/resources/**/*")
.to("E:\\codebase\\test\\test\\target\\test-encryption.jar");
System.out.println("success");
}
}

注意一些放置在resouce的资源文件加密后可能出现异常,根据情况进行排除

执行完成后,以上例情况会生成:test-encryption.jarxjar.go文件

三、生成go启动器

在机器中(需安装有go环境)执行如下命令:

1
go build xjar.go

得到文件xjar

四、启动加密jar包

1
./xjar java -jar test-encryption.jar