java17、javafx项目混淆和加密方式

 更新时间:2025年09月24日 09:54:29   作者:筱诗诗  
文章介绍了Java17与JavaFX项目使用ProGuard进行混淆及Xjar加密的流程,包括依赖配置、混淆规则定义、构建执行、结果验证与加密参数设置,强调版本兼容性及保留关键类方法的重要性

java17、javafx项目混淆和加密

采用proguard进行混淆;xjar进行加密

混淆流程

1.添加依赖和插件

<plugin>
    <groupId>com.github.wvengen</groupId>
    <artifactId>proguard-maven-plugin</artifactId>
    <version>2.6.0</version>
    <dependencies>
        <dependency>
            <groupId>com.guardsquare</groupId>
            <artifactId>proguard-base</artifactId>
            <version>7.4.2</version>
        </dependency>
        <dependency>
            <groupId>com.guardsquare</groupId>
            <artifactId>proguard-core</artifactId>
            <version>9.1.1</version>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <id>obfuscation-packaging</id>
            <phase>package</phase>
            <goals>
                <goal>proguard</goal>
            </goals>
            <configuration>
                <proguardVersion>7.4.2</proguardVersion>
                <obfuscate>true</obfuscate>
                <attach>true</attach>
                <appendClassifier>false</appendClassifier>
                <addMavenDescriptor>true</addMavenDescriptor>
                <injar>${project.build.finalName}.jar</injar>
                <outjar>${project.build.finalName}.jar</outjar>
                <injarNotExistsSkip>true</injarNotExistsSkip>
                <libs>
                    <lib>${java.home}/jmods</lib>
                </libs>
            </configuration>
        </execution>
    </executions>
</plugin>

注意:dependency依赖需要写在plugin中,才会生效;jdk17需使用7.2.2以上的依赖版本,软件使用的版本为7.4.2

  • <configuration>: 这个标签包含了 proguard 插件的配置选项。
  • <proguardVersion>: 指定 ProGuard 的版本。
  • <obfuscate>: 是否启用混淆。
  • <attach>: 是否将生成的 artifacts(构建产物)附加到项目的 artifact。
  • <appendClassifier>: 是否在生成的 artifact 上添加一个分类器。分类器是 Maven 用来区分同一个 groupId 和 artifactId,但不同版本或变体的机制。
  • <addMavenDescriptor>: 是否添加 Maven 描述符到输出的 jar。
  • <injar>: 指定输入 jar 的名称。
  • <outjar>: 指定输出混淆后的 jar 的名称。这里和输入 jar 使用了相同的名称,实际使用中可能希望使用不同的名称以保留原始 jar 文件。
  • <injarNotExistsSkip>: 如果输入的 jar 文件不存在,则是否跳过 ProGuard 处理。
  • <libs>: 指定 Java 类库的位置。ProGuard 需要这些类库来处理混淆中的类依赖问题。
  • <lib>: 实际类库的路径。这里指定了 Java 的 jmods 目录,通常包含 Java 模块化系统的模块。

2.定义混淆规则

<option>-keepattributes *Annotation*</option>
<option>-keep class com.xxx.xxx.view.** { *; }</option>
<option>-keep class com.xxx.xxx.mapper.** { *; }</option>
<option>-keep class com.xxx.xxx.domain.** { *; }</option>
<option>-keep enum com.xxx.xxx.** { *; }</option>
<option>-keep
	class com.xxx.xxx.Main {public static void main(java.lang.String[]);}
</option>
               

<options>: ProGuard 的具体配置选项,以 <option> 标签形式提供。

<option>

具体的使用的 ProGuard 配置指令。

  • -keepattributes \*Annotation\*: 保留所有注解。
  • -keep class com.xxx.xxx.view.\** { \*; } 和类似的行:指定保留特定包下的类和它们的成员。
  • -keep enum com.xxx.xxx.\** { \*; }: 保留枚举。
  • -keep class com.xxx.xxx.Main {public static void main(java.lang.String[]);}: 保留包含 main 方法的入口类,这对于确保应用程序点可执行性至关重要。

3.执行混淆

通过maven package进行打包,ProGuard会在项目构建的过程中进行混淆操作。

4.检查混淆结果

混淆后的 class 文件将被包含在 jar 文件中,可以用任何Java反编译工具打开jar文件,查看混淆后的代码。确认没有遗漏混淆的类文件或方法。

5.测试混淆后的软件

混淆后进行全面测试,来确保软件各功能均正确运行。

加密流程

1. 添加依赖

<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>4.0.2</version>
            <!-- <scope>test</scope> -->
        </dependency>
    </dependencies>
</project>
  • 必须添加 https://jitpack.io Maven仓库.
  • 如果使用 JUnit 测试类来运行加密可以将 XJar 依赖的 scope 设置为 test.

2. 加密源码

XCryptos.encryption()
        .from("/path/to/read/plaintext.jar")
        .use("io.xjar")
        .include("/io/xjar/**/*.class")
        .include("/mapper/**/*Mapper.xml")
        .exclude("/static/**/*")
        .exclude("/conf/*")
        .to("/path/to/save/encrypted.jar");
方法名称参数列表是否必选方法说明
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的资源.

3. 编译脚本

go build xjar.go
  • 通过步骤2加密成功后XJar会在输出的JAR包同目录下生成一个名为 xjar.go 的的Go启动器源码文件.
  • 将 xjar.go 在不同的平台进行编译即可得到不同平台的启动器可执行文件, 其中Windows下文件名为 xjar.exe 而Linux下为 xjar.

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java实现顺序表的增删查改功能

    Java实现顺序表的增删查改功能

    这篇文章主要介绍了Java实现顺序表的增删查改功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Java使用JaCoCo进行代码覆盖率分析的操作指南

    Java使用JaCoCo进行代码覆盖率分析的操作指南

    JaCoCo是一个开源的 Java 代码覆盖率工具,广泛应用于测试过程中,它可以帮助开发者分析测试代码的覆盖情况,在本文中,我们将介绍 JaCoCo 的基本功能、如何集成到 Maven 项目中,以及通过具体案例展示如何生成覆盖率报告,需要的朋友可以参考下
    2025-02-02
  • 巧用Spring中的@Order进行排序

    巧用Spring中的@Order进行排序

    这篇文章主要介绍了巧用Spring中的@Order进行排序,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Java使用Jedis操作Redis服务器的实例代码

    Java使用Jedis操作Redis服务器的实例代码

    本篇文章主要介绍了Java使用Jedis操作Redis服务器的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • SpringBoot接收与响应xml报文请求的实现

    SpringBoot接收与响应xml报文请求的实现

    我们在进行接口对接时,会出现报文形式的信息传递,这篇文章主要给大家介绍了关于SpringBoot接收与响应xml报文请求的相关资料,需要的朋友可以参考下
    2023-06-06
  • 解析Java编程之Synchronized锁住的对象

    解析Java编程之Synchronized锁住的对象

    这篇文章主要介绍了解析Java编程之Synchronized锁住的对象,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • JAVA算法起步之插入排序实例

    JAVA算法起步之插入排序实例

    这篇文章主要介绍了JAVA算法起步之插入排序实例,需要的朋友可以参考下
    2014-02-02
  • Java Socket编程(五) 简单的WEB服务器

    Java Socket编程(五) 简单的WEB服务器

    Java Socket编程(五) 简单的WEB服务器...
    2006-12-12
  • Spring Boot 3.x 全新的热部署配置方式详解(IntelliJ IDEA 2023.1)

    Spring Boot 3.x 全新的热部署配置方式详解(IntelliJ ID

    这篇文章主要介绍了Spring Boot 3.x 全新的热部署配置方式(IntelliJ IDEA 2023.1),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Java实现简易五子棋小游戏

    Java实现简易五子棋小游戏

    这篇文章主要为大家详细介绍了Java实现简易五子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05

最新评论