java項目jar包加密,防止反編譯代碼
java項目jar包加密,防止反編譯代碼
目錄
- 1 場景
- 2 方案
- 3 項目操作
- 4 啟動方式
- 5 反編譯效果
- 6 綁定機器啟動
文章來源:https://juejin.n/post/7291846601651273769
1 場景
最近項目要求部署到其他公司的服務器上,但是又不想將源碼泄露出去。要求對正式環境的啟動包進行安全性處理,防止客戶直接通過反編譯工具將代碼反編譯出來。
2 方案
第一種方案使用代碼混淆
采用proguard-maven-plugin插件
- 在單模塊中此方案還算簡單,但是現在項目一般都是多模塊,一個模塊依賴多個公共模塊。那么使用此方案就比較麻煩,配置復雜,文檔難懂,各模塊之間的調用在是否混淆時極其容易出錯。
第二種方案使用代碼加密
采用classfinal-maven-plugin插件
- 此方案比對上面的方案來說,就簡單了許多。直接配置一個插件就可以實現源碼的安全性保護。并且可以對yml、properties配置文件以及lib目錄下的maven依賴進行加密處理。若想指定機器啟動,支持綁定機器,項目加密后只能在特定機器運行。
ClassFinal項目源碼地址 :https://gitee.com/roseboy/classfinal
3 項目操作
只需要在啟動類的pom.xml文件中加如下插件即可,需要注意的是,改插件時要放到spring-boot-maven-plugin插件后面,否則不起作用。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<!--
1. 加密后,方法體被清空,保留方法參數、注解等信息.主要兼容swagger文檔注解掃描
2. 方法體被清空后,反編譯只能看到方法名和注解,看不到方法體的具體內容
3. 加密后的項目需要設置javaagent來啟動,啟動過程中解密class,完全內存解密,不留下任何解密后的文件
4. 啟動加密后的jar,生成xxx-encrypted.jar,這個就是加密后的jar文件,加密后不可直接執行
5. 無密碼啟動方式,java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar
6. 有密碼啟動方式,java -javaagent:xxx-encrypted.jar='-pwd= 密碼' -jar xxx-encrypted.jar
-->
<groupId>net.roseboy</groupId>
<artifactId>classfinal-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<password>#</password><!-- #表示啟動時不需要密碼,事實上對于代碼混淆來說,這個密碼沒什么用,它只是一個啟動密碼 -->
<excludes>org.spring</excludes>
<packages>${groupId}</packages><!-- 加密的包名,多個包用逗號分開 -->
<cfgfiles>application.yml,application-dev.yml</cfgfiles><!-- 加密的配置文件,多個包用逗號分開 -->
<libjars>hutool-all.jar</libjars> <!-- jar包lib下面要加密的jar依賴文件,多個包用逗號分開 -->
<code>xxxx</code> <!-- 指定機器啟動,機器碼 -->
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>classFinal</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
4 啟動方式
無密碼啟動
java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar
有密碼啟動
java -javaagent:xxx-encrypted.jar='-pwd=密碼' -jar xxx-encrypted.jar
5 反編譯效果
- 啟動包加密之后,方法體被清空,保留方法參數、注解等信息.主要兼容swagger文檔注解掃描
- 反編譯只能看到方法名和注解,看不到方法體的具體內容
- 啟動過程中解密class,完全內存解密,不留下任何解密后的文件

yml配置文件留下空白

6 綁定機器啟動
下載到classfinal-fatjar-1.2.1.jar 依賴,在當前依賴下cmd執行java -jar classfinal-fatjar-1.2.1.jar -C命令,會自動生成一串機器碼

將此生成好的機器碼,放到maven插件中的code里面即可。這樣,打包好的項目只能在生成機器碼的機器運行,其他機器則啟動不了項目。
為人:謙遜、激情、博學、審問、慎思、明辨、 篤行
學問:紙上得來終覺淺,絕知此事要躬行
為事:工欲善其事,必先利其器。
態度:道阻且長,行則將至;行而不輟,未來可期
.....................................................................
------- 桃之夭夭,灼灼其華。之子于歸,宜其室家。 ---------------
------- 桃之夭夭,有蕡其實。之子于歸,宜其家室。 ---------------
------- 桃之夭夭,其葉蓁蓁。之子于歸,宜其家人。 ---------------
=====================================================================
* 博客文章部分截圖及內容來自于學習的書本及相應培訓課程以及網絡其他博客,僅做學習討論之用,不做商業用途。
* 如有侵權,馬上聯系我,我立馬刪除對應鏈接。 * @author Alan -liu * @Email no008@foxmail.com
轉載請標注出處! ?*?一品堂.技術學習筆記?*?. ---> http://www.rzrgm.cn/ios9/
學問:紙上得來終覺淺,絕知此事要躬行
為事:工欲善其事,必先利其器。
態度:道阻且長,行則將至;行而不輟,未來可期
.....................................................................
------- 桃之夭夭,灼灼其華。之子于歸,宜其室家。 ---------------
------- 桃之夭夭,有蕡其實。之子于歸,宜其家室。 ---------------
------- 桃之夭夭,其葉蓁蓁。之子于歸,宜其家人。 ---------------
=====================================================================
* 博客文章部分截圖及內容來自于學習的書本及相應培訓課程以及網絡其他博客,僅做學習討論之用,不做商業用途。
* 如有侵權,馬上聯系我,我立馬刪除對應鏈接。 * @author Alan -liu * @Email no008@foxmail.com
轉載請標注出處! ?*?一品堂.技術學習筆記?*?. ---> http://www.rzrgm.cn/ios9/

浙公網安備 33010602011771號