• SpringBoot中使用XJar进行JAR安全加密运行同时支持原生JAR


    SpringBoot中使用XJar进行JAR安全加密运行同时支持原生JAR


    一、简介

    Spring Boot JAR 安全加密运行工具, 同时支持的原生JAR.
    基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动, 动态解密运行的方案, 避免源码泄露以及反编译.

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

    官网:
    GitHub: https://github.com/core-lib/xjar
    Gitee: https://gitee.com/mirrors/XJar

    二、使用

    1.添加依赖

    <project>
        <!-- 设置 jitpack.io 仓库 -->
        <repositories>
            <repository>
                <id>jitpack.io</id>
                <url>https://jitpack.io
            </repository>
        </repositories>
        <!-- 添加 XJar 依赖 -->
        <dependencies>
            <dependency>
                <groupId>com.github.core-lib</groupId>
                <artifactId>xjar</artifactId>
                <version>4.0.2</version>
                <!-- <scope>test</scope> -->
            </dependency>
        </dependencies>
    </project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    必须添加 https://jitpack.io Maven仓库.
    如果使用 JUnit 测试类来运行加密可以将 XJar 依赖的 scope 设置为 test.

    2.加密源码

    package cn.gzsendi.modules.liutests;
    
    import org.junit.Test;
    
    import io.xjar.XCryptos;
    
    /**
     * Xjar
     * 参考文档:https://gitee.com/mirrors/XJar
     * @author liujh
     */
    public class XjarTest {
    	
    	@Test
    	public void test() throws Exception{
    		
    	    XCryptos.encryption()
            .from("D:/temp/springbootLiuTest.jar")//指定待加密JAR包路径
            .use("123456")//指定加密密码
            //.include("/io/xjar/**/*.class")//指定要加密的资源相对于classpath的正则路径表达式
            //.include("/mapper/**/*Mapper.xml")//指定要加密的资源相对于classpath的正则路径表达式
            //.exclude("/static/**/*")//指定不加密的资源相对于classpath的正则路径表达式
            .exclude("/*.yml")//指定不加密的资源相对于classpath的正则路径表达式
            .exclude("/*.xml")
            .to("D:/temp/springbootLiuTestEncode.jar");
    	}
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    注:include 和 exclude 同时使用时即加密在include的范围内且排除了exclude的资源.

    3.Go环境准备

    Go环境安装文件下载地址:https://go.dev/dl/

    #下载Go安装文件与解压
    wget https://dl.google.com/go/go1.12.4.linux-amd64.tar.gz
    tar zxvf go1.12.4.linux-amd64.tar.gz  -C /usr/local
     
    #编辑/etc/profile文件添加如下:
    #go setting
    export GOROOT=/usr/local/go
    export GOPATH=/usr/local/gopath
    export PATH=$PATH:$GOROOT/bin
    source /etc/profile 生效
    
    #验证go环境准备:
    go version
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    4.编译脚本

    go build xjar.go
    
    • 1

    通过步骤2加密成功后XJar会在输出的JAR包同目录下生成一个名为 xjar.go 的的Go启动器源码文件.
    将 xjar.go 在不同的平台进行编译即可得到不同平台的启动器可执行文件, 其中Windows下文件名为 xjar.exe 而Linux下为 xjar.
    由于启动器自带JAR包防篡改校验, 故启动器无法通用, 即便密码相同也不行.

    5.启动运行

    /path/to/xjar /path/to/java [OPTIONS] -jar /path/to/encrypted.jar [ARGS]
    /path/to/xjar /path/to/javaw [OPTIONS] -jar /path/to/encrypted.jar [ARGS]
    nohup /path/to/xjar /path/to/java [OPTIONS] -jar /path/to/encrypted.jar [ARGS]
    
    #示例:
    ./xjar java -jar springbootLiuTestEncode.jar
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    仅支持通过 -jar 方式启动, 不支持-cp或-classpath的方式.
    -jar 后面必须紧跟着启动的加密jar文件路径

    其他问题及内容参考:https://gitee.com/mirrors/XJar

    以上介绍即为XJar的使用,希望对你有帮助.

  • 相关阅读:
    AndroidStudio推荐下载和配置
    使用文本分析识别一段文本中的主要性别
    Google Guava精讲(一)-Guava是什么?能做什么?
    返回当前系统串口名称
    JUC之volatile关键字
    Java核心篇,二十三种设计模式(十四),行为型——命令模式
    2022年--读书笔记
    初探Raft算法
    mysql -mmm
    非零基础自学Java (老师:韩顺平) 第4章 运算符 4.21 二进制转八进制等 && 4.27 原码、反码、补码 && 4.28 位运算符
  • 原文地址:https://blog.csdn.net/jxlhljh/article/details/126662285