java17、javafx項(xiàng)目混淆和加密方式
java17、javafx項(xiàng)目混淆和加密
采用proguard進(jìn)行混淆;xjar進(jìn)行加密
混淆流程
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中,才會(huì)生效;jdk17需使用7.2.2以上的依賴版本,軟件使用的版本為7.4.2
<configuration>: 這個(gè)標(biāo)簽包含了 proguard 插件的配置選項(xiàng)。<proguardVersion>: 指定 ProGuard 的版本。<obfuscate>: 是否啟用混淆。<attach>: 是否將生成的 artifacts(構(gòu)建產(chǎn)物)附加到項(xiàng)目的 artifact。<appendClassifier>: 是否在生成的 artifact 上添加一個(gè)分類器。分類器是 Maven 用來(lái)區(qū)分同一個(gè) groupId 和 artifactId,但不同版本或變體的機(jī)制。<addMavenDescriptor>: 是否添加 Maven 描述符到輸出的 jar。<injar>: 指定輸入 jar 的名稱。<outjar>: 指定輸出混淆后的 jar 的名稱。這里和輸入 jar 使用了相同的名稱,實(shí)際使用中可能希望使用不同的名稱以保留原始 jar 文件。<injarNotExistsSkip>: 如果輸入的 jar 文件不存在,則是否跳過(guò) ProGuard 處理。<libs>: 指定 Java 類庫(kù)的位置。ProGuard 需要這些類庫(kù)來(lái)處理混淆中的類依賴問題。<lib>: 實(shí)際類庫(kù)的路徑。這里指定了 Java 的jmods目錄,通常包含 Java 模塊化系統(tǒng)的模塊。
2.定義混淆規(guī)則
<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 的具體配置選項(xiàng),以 <option> 標(biāo)簽形式提供。
<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方法的入口類,這對(duì)于確保應(yīng)用程序點(diǎn)可執(zhí)行性至關(guān)重要。
3.執(zhí)行混淆
通過(guò)maven package進(jìn)行打包,ProGuard會(huì)在項(xiàng)目構(gòu)建的過(guò)程中進(jìn)行混淆操作。
4.檢查混淆結(jié)果
混淆后的 class 文件將被包含在 jar 文件中,可以用任何Java反編譯工具打開jar文件,查看混淆后的代碼。確認(rèn)沒有遺漏混淆的類文件或方法。
5.測(cè)試混淆后的軟件
混淆后進(jìn)行全面測(cè)試,來(lái)確保軟件各功能均正確運(yùn)行。
加密流程
1. 添加依賴
<project>
<!-- 設(shè)置 jitpack.io 倉(cāng)庫(kù) -->
<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倉(cāng)庫(kù).
- 如果使用 JUnit 測(cè)試類來(lái)運(yùn)行加密可以將 XJar 依賴的 scope 設(shè)置為 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");
| 方法名稱 | 參數(shù)列表 | 是否必選 | 方法說(shuō)明 |
|---|---|---|---|
| from | (String jar) | 二選一 | 指定待加密JAR包路徑 |
| from | (File jar) | 指定待加密JAR包文件 | |
| use | (String password) | 二選一 | 指定加密密碼 |
| use | (String algorithm, int keysize, int ivsize, String password) | 指定加密算法及加密密碼 | |
| include | (String ant) | 可多次調(diào)用 | 指定要加密的資源相對(duì)于classpath的ANT路徑表達(dá)式 |
| include | (Pattern regex) | 可多次調(diào)用 | 指定要加密的資源相對(duì)于classpath的正則路徑表達(dá)式 |
| exclude | (String ant) | 可多次調(diào)用 | 指定不加密的資源相對(duì)于classpath的ANT路徑表達(dá)式 |
| exclude | (Pattern regex) | 可多次調(diào)用 | 指定不加密的資源相對(duì)于classpath的正則路徑表達(dá)式 |
| to | (String xJar) | 二選一 | 指定加密后JAR包輸出路徑, 并執(zhí)行加密. |
| to | (File xJar) | 指定加密后JAR包輸出文件, 并執(zhí)行加密. |
- 指定加密算法的時(shí)候密鑰長(zhǎng)度以及向量長(zhǎng)度必須在算法可支持范圍內(nèi), 具體加密算法的密鑰及向量長(zhǎng)度請(qǐng)自行百度或谷歌.
- include 和 exclude 同時(shí)使用時(shí)即加密在include的范圍內(nèi)且排除了exclude的資源.
3. 編譯腳本
go build xjar.go
- 通過(guò)步驟2加密成功后XJar會(huì)在輸出的JAR包同目錄下生成一個(gè)名為 xjar.go 的的Go啟動(dòng)器源碼文件.
- 將 xjar.go 在不同的平臺(tái)進(jìn)行編譯即可得到不同平臺(tái)的啟動(dòng)器可執(zhí)行文件, 其中Windows下文件名為 xjar.exe 而Linux下為 xjar.
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java使用JaCoCo進(jìn)行代碼覆蓋率分析的操作指南
JaCoCo是一個(gè)開源的 Java 代碼覆蓋率工具,廣泛應(yīng)用于測(cè)試過(guò)程中,它可以幫助開發(fā)者分析測(cè)試代碼的覆蓋情況,在本文中,我們將介紹 JaCoCo 的基本功能、如何集成到 Maven 項(xiàng)目中,以及通過(guò)具體案例展示如何生成覆蓋率報(bào)告,需要的朋友可以參考下2025-02-02
Java使用Jedis操作Redis服務(wù)器的實(shí)例代碼
本篇文章主要介紹了Java使用Jedis操作Redis服務(wù)器的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
SpringBoot接收與響應(yīng)xml報(bào)文請(qǐng)求的實(shí)現(xiàn)
我們?cè)谶M(jìn)行接口對(duì)接時(shí),會(huì)出現(xiàn)報(bào)文形式的信息傳遞,這篇文章主要給大家介紹了關(guān)于SpringBoot接收與響應(yīng)xml報(bào)文請(qǐng)求的相關(guān)資料,需要的朋友可以參考下2023-06-06
解析Java編程之Synchronized鎖住的對(duì)象
這篇文章主要介紹了解析Java編程之Synchronized鎖住的對(duì)象,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10
Java Socket編程(五) 簡(jiǎn)單的WEB服務(wù)器
Spring Boot 3.x 全新的熱部署配置方式詳解(IntelliJ ID
Java實(shí)現(xiàn)簡(jiǎn)易五子棋小游戲

