java代碼混淆工具ProGuard混淆插件
介紹
ProGuard是一個純java編寫的混淆工具,有客戶端跟jar包兩種使用方式。可以將程序打包為jar,然后用工具進行混淆,也可以在maven中導入ProGuard的插件,對代碼進行混淆。
大家都知道
java代碼可以反編譯,因此有時候要保護自己的知識產權還真得費點心思,一般來說有三個思路:
- 1、將class文件加密,這個是最安全的,但也費事兒,因為要重寫classloader來解密class文件;
- 2、使用花指令,使得class文件不能反編譯(利用反編譯工具漏洞);安全性一般,還是有花指令破解器;
- 3、代碼混淆,提高代碼閱讀成本;簡單易操作,一般采用這種或者與其它方式結合;
maven項目引入插件
pom.xml
<plugins>
<!-- ProGuard混淆插件--><plugin><groupId>com.github.wvengen</groupId><artifactId>proguard-maven-plugin</artifactId><version>2.0.14</version><executions><execution><!-- 混淆時刻,這里是打包的時候混淆--><phase>package</phase><goals><!-- 使用插件的什么功能,當然是混淆--><goal>proguard</goal></goals></execution></executions><configuration><!-- 是否將生成的PG文件安裝部署--><attach>true</attach><!-- 是否混淆--><obfuscate>true</obfuscate><!-- 指定生成文件分類 --><attachArtifactClassifier>pg</attachArtifactClassifier><options><!-- JDK目標版本1.8--><option>-target 1.8</option><!-- 不做收縮(刪除注釋、未被引用代碼)--><option>-dontshrink</option><!-- 不做優化(變更代碼實現邏輯)--><option>-dontoptimize</option><!-- 不路過非公用類文件及成員--><option>-dontskipnonpubliclibraryclasses</option><option>-dontskipnonpubliclibraryclassmembers</option><!--不用大小寫混合類名機制--><option>-dontusemixedcaseclassnames</option><!-- 優化時允許訪問并修改有修飾符的類和類的成員 --><option>-allowaccessmodification</option><!-- 確定統一的混淆類的成員名稱來增加混淆--><option>-useuniqueclassmembernames</option><!-- 不混淆所有包名--><option>-keeppackagenames</option><option>-keepdirectories</option><!-- 需要保持的屬性:異常,注解等--><option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod</option><option>-keep class javax.annotation.**</option><option>-dontwarn javax.crypto.**</option><option>-keep class javax.crypto.**</option></options><outjar>${project.build.finalName}-pg.jar</outjar><libs><lib>${java.home}/lib/rt.jar</lib></libs><!-- 對什么東西進行加載,這里僅有classes成功,畢竟你也不可能對配置文件及JSP混淆吧--><injar>classes</injar><!-- 輸出目錄--><outputDirectory>${project.build.directory}</outputDirectory></configuration></plugin>
</plugins>
打包生成混淆jar包
mvn clean install -Dmaven.test.skip=true
在target目錄會生成classes-pg.jar就是混淆后的jar包
部署
可以把jar包名修改為和spring包命名類似, 或者直接在spring源代碼里加限制代碼,然后打包
參考鏈接:
https://blog.csdn.net/sinat_35100573/article/details/51833294
https://www.cnblogs.com/nevermorewang/p/8041548.html
https://blog.csdn.net/sqzhao/article/details/50627920
https://blog.csdn.net/wltj920/article/details/48970869
https://blog.csdn.net/qysh123/article/details/17786163