java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java17、javafx项目混淆和加密

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

作者:筱诗诗

文章介绍了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

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 配置指令。

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>

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包输出文件, 并执行加密.

3. 编译脚本

go build xjar.go

总结

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

您可能感兴趣的文章:
阅读全文