如何避免springboot jar包源码泄露以及反编译

近期笔者在为客户做私有云的部署。而这个客户有个特点,喜欢破解。为了防止源码泄漏,决定对jar包进行加密。

Xjar

Xjar基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动,动态解密运行的方案,避免源码泄露或反编译。它不需要侵入代码,只需要把编译好的JAR包通过工具加密即可。

引入pom

<dependency>
  <groupId>com.github.core-lib</groupId>
  <artifactId>xjar</artifactId>
  <version>4.0.0</version> 
</dependency>

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-compress</artifactId>
<version>1.20</version>
</dependency>

添加repositories内容,否则可能存在jar导入失败

<repositories>
        <repository>
            <id>jitpack</id>
            <url>https://jitpack.io</url>
        </repository>
    </repositories>

编写main方法对jar包进行加密

package com.test;

import io.xjar.XCryptos;

public class Test {

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

    public static void encrypt() throws Exception {

        XCryptos.encryption()
                // 项目生成的jar
                .from("D:\\project\\AIP\\aip-admin\\target\\source.jar")
                // 加密的密码
                .use("testaa1111122222")
                .include("/**/*.class")
                .include("/**/*.xml")
                .include("/**/*.yml")
                .to("D:\\project\\AIP\\temp\\test.jar");
    }
}

此时会在指定路径生成test.jar以及xjar.go 文件

安装go环境

test.jar目录下执行go bulid xjar.go,生成xjar.exe

启动项目

window : xjar.exe java -jar test.jar (如果报错,查看报错内容并更正)

linux: nohup ./xjar java -jar test.jar

至此,便完成对spring boot jar包的加密了

相关文章

Java基础 - javac命令详解之编译 如何使用javac命令编译

1.为什么要搞定 javac 命令1.javac 是java中的编译源代码的命令工具,将.java文件编译成 .class 文件;2.由于当下为了提高开发效率,大多数的开发工作都在 java的 集成开...

Java 代码执行原理 java执行过程和编译原理

专注于Java领域优质技术,欢迎关注作者 | Alan来源 | cnblogs.com/wangjiming/p/10455993.html对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者...

阿里P8大牛耗费三年整理的:Java架构之完美设计实战PDF

前言做学问就像爬山,从山脚出发的人很多,能爬到山顶的却寥寥无几。有些人爬得很快,到达半山腰就盖了一所房子住在那里,对爬向山顶没有太大的兴趣。而能够登顶的人,除了要具备必要的技能外,更要有坚强的毅力,不...

Java 编译速度有多快? java的编译

在 Java 开发中,编译速度一直是程序员关注的一个重要问题。虽然 Java 编译器(javac)本身的编译速度相对较快,但当我们引入构建工具(如 Maven、Gradle 或 Mill)后,编译速度...

Java 代码编译的3种方式,其中JIT最重要!

通过 Javac 将程序源代码进行编译,转换成 Java 字节码,JVM 通过模板方式把字节码翻译成对应的机器指令,逐条读入,逐条解释翻译,执行速度必然比可执行的二进制字节码程序慢得多。为了提高执行速...

9000字,通俗易懂的讲解下Java注解

对于Java注解,我咨询过一些身边的人,很多人表示:知道怎么用,不熟悉不知道你是不是这样?在我没有系统性的学习一边注解的时候,我也是如此,在我花时间学习过注解之后,我觉得,对于注解,最重要的在于理解,...