Java源码混淆,jar包加密,禁止反编译jar包

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 本文中介绍使用 XJar 对jar包进行加密。

🍀对jar包加密

使用 XJar 对jar包进行加密。GitHub: https://github.com/core-lib/xjar

Spring Boot JAR 安全加密运行工具, 同时支持的原生JAR

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

功能特性

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

🍀使用步骤

☘️maven加载依赖包xjar

需要先设置jitpack.io的仓库地址,不然可能下载不了依赖包

在 pom.xml 合适位置加入以下代码

    <!-- 设置 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>4.0.2</version>
            <!-- 如果使用 JUnit 测试类来运行加密可以将 XJar 依赖的 scope 设置为 test. -->
            <!-- <scope>test</scope> -->
        </dependency>
    </dependencies>

☘️加密Demo

import io.xjar.XCryptos;

/**
 * @author ber
 * @version 1.0
 * @date 22/3/11 20:39
 */
public class Encrypt {
    public static void main(String[] args) throws Exception {
        XCryptos.encryption()
                .from("/path/to/read/plaintext.jar")
                .use("password")
                .include("/io/xjar/**/*.class")
                .include("/mapper/**/*Mapper.xml")
                .exclude("/static/**/*")
                .exclude("/conf/*")
                .to("/path/to/save/encrypted.jar");
    }
}

其中/path/to/read/ 待加密jar包路径, password加密密码, /path/to/save/加密后jar包输出路径。
include()方法将需要加密的class文件通过正则匹配的方式加入。

加密后会产生encrypted.jarxjar.goxjar_agentable.go三个文件。
其中encrypted.jar是加密后的jar包。xjar.go是Go启动器源码文件,后面编译时需要用到。

具体方法详细介绍

方法名称 参数列表 是否必选 方法说明
from (String jar) 二选一 指定待加密JAR包路径
from (File jar) 指定待加密JAR包文件
use (String password) 二选一 指定加密密码
use (String algorithm, int keysize, int ivsize, String password) 指定加密算法及加密密码
include (String ant) 可多次调用 指定要加密的资源相对于classpath的ANT路径表达式
include (Pattern regex) 可多次调用 指定要加密的资源相对于classpath的正则路径表达式
exclude (String ant) 可多次调用 指定不加密的资源相对于classpath的ANT路径表达式
exclude (Pattern regex) 可多次调用 指定不加密的资源相对于classpath的正则路径表达式
to (String xJar) 二选一 指定加密后JAR包输出路径, 并执行加密.
to (File xJar) 指定加密后JAR包输出文件, 并执行加密.
  • 指定加密算法的时候密钥长度以及向量长度必须在算法可支持范围内, 具体加密算法的密钥及向量长度请自行百度或谷歌
  • include 和 exclude 同时使用时即加密在include的范围内且排除了exclude的资源

☘️编译运行脚本

编译环境下需要安装GoLang环境,而在运行环境下不需要安装。
在不同平台下编译会得到不同平台的启动器。Windows下编译的启动器不能在linux下使用

go build xjar.go
  • xjar.go前面有说过,是Go启动器源码文件.
  • 将 xjar.go 在不同的平台进行编译即可得到不同平台的启动器可执行文件, 其中Windows下文件名为 xjar.exe 而Linux下为 xjar(再次说)
  • 由于启动器自带JAR包防篡改校验, 故启动器无法通用, 即便密码相同也不行(强调)

☘️启动加密的jar包

/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]
  • 在 Java 启动命令前加上编译好的Go启动器可执行文件名(xjar)即可启动运行加密后的JAR包.
  • 若使用 nohup 方式启动则 nohup 要放在Go启动器可执行文件名(xjar)之前.
  • 若Go启动器可执行文件名(xjar)不在当前命令行所在目录则要通过绝对路径或相对路径指定.
  • 仅支持通过 -jar 方式启动, 不支持-cp或-classpath的方式.
  • -jar 后面必须紧跟着启动的加密jar文件路径
  • 例子: 如果当前命令行就在 xjar 所在目录, java 环境变量也设置好了 ./xjar java -Xms256m -Xmx1024m -jar /path/to/encrypted.jar

☘️加密后反编译jar包效果

在这里插入图片描述

待补充插件方式生成加密jar包, Github:xjar-maven-plugin

目录
相关文章
|
4月前
|
Java 中间件 测试技术
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
|
1月前
|
数据采集 分布式计算 Java
Kettle的Java开发环境需要什么jar包?
【10月更文挑战第24天】Kettle的Java开发环境需要什么jar包?
121 2
|
2月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
213 2
|
2月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
210 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
3月前
|
安全 Java 数据安全/隐私保护
- 代码加密混淆工具-Java 编程安全性
在Java编程领域,保护代码安全与知识产权至关重要。本文探讨了代码加密混淆工具的重要性,并介绍了五款流行工具:ProGuard、DexGuard、Jscrambler、DashO 和 Ipa Guard。这些工具通过压缩、优化、混淆和加密等手段,提升代码安全性,保护知识产权。ProGuard 是开源工具,用于压缩和混淆Java代码;DexGuard 专为Android应用程序设计,提供强大加密功能;Jscrambler 基于云,保护Web和移动应用的JavaScript及HTML5代码;DashO 支持多种Java平台和
261 1
|
4月前
|
安全 Java 应用服务中间件
网络安全的护城河:漏洞防御与加密技术深入浅出Java并发编程
【8月更文挑战第31天】在数字世界的棋盘上,每一次点击都可能是一步棋。网络安全的战场无声却激烈,漏洞如同裂缝中的风,悄无声息地侵袭着数据的堡垒。本文将揭示网络漏洞的隐蔽角落,探讨如何通过加密技术筑起防线,同时提升个人和组织的安全意识,共同守护我们的数字家园。
|
4月前
|
Java Maven C++
【Azure Developer】记录一次使用Java Azure Key Vault Secret示例代码生成的Jar包,单独运行出现 no main manifest attribute, in target/demo-1.0-SNAPSHOT.jar 错误消息
【Azure Developer】记录一次使用Java Azure Key Vault Secret示例代码生成的Jar包,单独运行出现 no main manifest attribute, in target/demo-1.0-SNAPSHOT.jar 错误消息
|
4月前
|
Java Spring
【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)
【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)
|
4月前
|
前端开发 JavaScript Java
【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
|
4月前
|
Java 测试技术 Maven
java依赖冲突解决问题之多个版本的jar包中都没有找到缺失的方法如何解决
java依赖冲突解决问题之多个版本的jar包中都没有找到缺失的方法如何解决