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

目录
相关文章
|
3天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
15 2
|
7天前
|
人工智能 监控 数据可视化
Java智慧工地信息管理平台源码 智慧工地信息化解决方案SaaS源码 支持二次开发
智慧工地系统是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三大体系为基础应用,实现全面高效的工程管理需求,满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效,为监管平台提供数据支撑。
24 3
|
12天前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
42 3
|
18天前
|
数据采集 分布式计算 Java
Kettle的Java开发环境需要什么jar包?
【10月更文挑战第24天】Kettle的Java开发环境需要什么jar包?
62 2
|
18天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
21天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
27天前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
41 2
|
Java 测试技术 Android开发
Java 反编译工具的使用与对比分析(二)
Java 反编译工具的使用与对比分析
1098 0
Java 反编译工具的使用与对比分析(二)
|
Java 测试技术 Maven
Java 反编译工具的使用与对比分析(一)
Java 反编译工具的使用与对比分析
734 0
Java 反编译工具的使用与对比分析(一)
Java 反编译工具的使用与对比分析(三)
Java 反编译工具的使用与对比分析
528 0