Java之代碼混淆插件ProGuard使用及說明
背景
接之前的文章,用java實現(xiàn)了C++庫函數(shù),并對外提供接口,但是Java可以反編譯看到源碼業(yè)務(wù)邏輯等,所以決定使用代碼混淆功能,雖然混淆之后也能看到業(yè)務(wù)邏輯,但是增加了難度而已。
環(huán)境
- maven項目管理
- Java 1.8
- proguard 2.7.0
pom配置
<!-- ProGuard 混淆插件 -->
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.7.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
<lib>${java.home}/lib/jsse.jar</lib>
</libs>
<obfuscate>true</obfuscate>
<attach>false</attach>
<options>
########################################
# 不做裁剪和優(yōu)化(SDK必須)
########################################
<option>-dontoptimize</option>
<option>-dontshrink</option>
<option>-dontwarn</option>
########################################
# 保留對外 API
########################################
<option>
-keep public class org.test.api.** { *; }
</option>
########################################
# 內(nèi)部實現(xiàn)允許混淆
########################################
<option>
-keep,allowobfuscation class org.test.internal.** { *; }
</option>
########################################
# Java 8 必須保留
########################################
<option>-keepattributes Signature</option>
<option>-keepattributes *Annotation*</option>
<option>-keepattributes Exceptions</option>
<option>-keepattributes InnerClasses</option>
<option>-keepattributes EnclosingMethod</option>
<option>-keepattributes BootstrapMethods</option>
########################################
# 枚舉安全
########################################
<option>
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
</option>
########################################
# 序列化安全
########################################
<option>
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
}
</option>
########################################
# 混淆強度增強
########################################
<option>-allowaccessmodification</option>
<option>-overloadaggressively</option>
<option>-useuniqueclassmembernames</option>
<option>-flattenpackagehierarchy</option>
########################################
# 輸出 mapping, 方便調(diào)試
########################################
<option>-printmapping target/mapping.txt</option>
<option>-keepattributes LineNumberTable</option>
</options>
</configuration>
</plugin>說明
生成的 jar包 和 target/mapping.txt 文件要對應(yīng)起來,防止出問題無法定位到問題點。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java網(wǎng)絡(luò)編程基礎(chǔ)教程之Socket入門實例
這篇文章主要介紹了Java網(wǎng)絡(luò)編程基礎(chǔ)教程之Socket入門實例,本文講解了創(chuàng)建Socket、Socket發(fā)送數(shù)據(jù)、Socket讀取數(shù)據(jù)、關(guān)閉Socket等內(nèi)容,都是最基礎(chǔ)的知識點,需要的朋友可以參考下2014-09-09
通過JDBC連接oracle數(shù)據(jù)庫的十大技巧
通過JDBC連接oracle數(shù)據(jù)庫的十大技巧...2006-12-12
SpringBoot Actuator未授權(quán)訪問漏洞修復(fù)詳解
這篇文章主要介紹了SpringBoot Actuator未授權(quán)訪問漏洞修復(fù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08
IntelliJ IDEA2020.1版本更新pom文件自動導(dǎo)包的方法
這篇文章主要介紹了IntelliJ IDEA2020.1版本更新pom文件自動導(dǎo)包的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06

