1 場景
最近項目要求部署到其他公司的服務器上,但是又不想將源碼泄露出去。要求對正式環境的啟動包進行安全性處理,防止客戶直接通過反編譯工具將代碼反編譯出來。
2 方案
第一種方案使用代碼混淆
采用proguard-maven-plugin插件
在單模塊中此方案還算簡單,但是現在項目一般都是多模塊,一個模塊依賴多個公共模塊。那么使用此方案就比較麻煩,配置復雜,文檔難懂,各模塊之間的調用在是否混淆時極其容易出錯。
第二種方案使用代碼加密
采用classfinal-maven-plugin插件
此方案比對上面的方案來說,就簡單了許多。直接配置一個插件就可以實現源碼的安全性保護。并且可以對yml、properties配置文件以及lib目錄下的maven依賴進行加密處理。若想指定機器啟動,支持綁定機器,項目加密后只能在特定機器運行。
ClassFinal項目源碼地址 [1]
3 項目操作
只需要在啟動類的pom.xml文件中加如下插件即可,需要注意的是,改插件時要放到spring-boot-maven-plugin插件后面,否則不起作用。
org.springframework.boot spring-boot-maven-plugin net.roseboy classfinal-maven-plugin 1.2.1 # org.spring ${groupId} application.yml,application-dev.yml hutool-all.jar xxxx
package classFinal
4 啟動方式
無密碼啟動
java-javaagent:xxx-encrypted.jar-jarxxx-encrypted.jar
有密碼啟動
java-javaagent:xxx-encrypted.jar='-pwd=密碼'-jarxxx-encrypted.jar
5 反編譯效果
啟動包加密之后,方法體被清空,保留方法參數、注解等信息.主要兼容swagger文檔注解掃描
反編譯只能看到方法名和注解,看不到方法體的具體內容
啟動過程中解密class,完全內存解密,不留下任何解密后的文件
yml配置文件留下空白
6 綁定機器啟動
下載到classfinal-fatjar-1.2.1.jar [2]依賴,在當前依賴下cmd執行java -jar classfinal-fatjar-1.2.1.jar -C命令,會自動生成一串機器碼
將此生成好的機器碼,放到maven插件中的code里面即可。這樣,打包好的項目只能在生成機器碼的機器運行,其他機器則啟動不了項目。
-
源碼
+關注
關注
8文章
647瀏覽量
29281 -
代碼
+關注
關注
30文章
4802瀏覽量
68740 -
插件
+關注
關注
0文章
331瀏覽量
22451 -
SpringBoot
+關注
關注
0文章
173瀏覽量
184
原文標題:SpringBoot 項目 Jar 包加密,防止反編譯
文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論