jar包防止反编译

 本文参考xjar官网: https://github.com/core-lib/xjar

  本篇用springboot jar作为示例对jar文件简单的加密操作,如更复杂的请查看xjar官方

  1. 在需要加密的jar的pom.xml文件添加依赖

<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>v2.0.6</version>
        </dependency>
    </dependencies>
</project>

 

2.执行加密命令,加密需要加密的jar

        //加密的密钥
        String password = "123456";
        XKey xKey = XKit.key(password);
        //第1个参数是源文件,第2个参数是加密后的jar文件
        XBoot.encrypt("G:\\gitReps\\ocr-manager\\bin\\manager\\g.jar", "G:\\gitReps\\ocr-manager\\bin\\manager\\manager.jar", xKey);

 

使用idea可以查看到没有加密的jar文件的class源码

 

加密后的源码则查看不到

 

 

3.  启动加密的jar文件

   执行完命令,输入密码启动jar

 

 如果项目中使用了 JPA 且实现为Hibernate时,由于Hibernate自己解析加密后的Jar文件,所以无法正常启动, 可以采用以下解决方案

去github clone xjar-agent-hibernate jar包, 然后在本地maven clean package 打成jar文件

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

(最上方有jar文件下载连接,本人下载是免费,建议大家去github clone 然后打包,别浪费币了)

然后把xjar-agent-hibernate放到和应用路径同级别,使用代理的方式启动jar文件

java -javaagent:xjar-agent-hibernate-v1.0.0.jar -jar manager.jar

 

4. 后台命令启动jar的时候无法使用控制台,这个时候使用密钥的方式启动

// 对于 nohup 或 javaw 这种后台启动方式,无法使用控制台来输入密码,推荐使用指定密钥文件的方式启动
nohup java -jar /path/to/encrypted.jar --xjar.keyfile=/path/to/xjar.key

//或者通过传参数的方式启动,这种源码容易泄露,不推荐使用
nohub java -jar /path/to/encrypted.jar --xjar.password=123456

 

参数说明

参数名称参数含义默认值说明
--xjar.password密码  
--xjar.algorithm密钥算法AES支持JDK所有内置算法,如AES / DES ...
--xjar.keysize密钥长度128根据不同的算法选取不同的密钥长度。
--xjar.ivsize向量长度128根据不同的算法选取不同的向量长度。
--xjar.keyfile密钥文件./xjar.key密钥文件相对或绝对路径。

密钥文件

密钥文件采用properties的书写格式:

password: 123456
algorithm: AES
keysize: 128
ivsize: 128
hold: HOLD

密钥文件是1次性的,在使用完程序会删除掉 key文件

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐