1 場(chǎng)景
最近項(xiàng)目要求部署到其他公司的服務(wù)器上,但是又不想將源碼泄露出去。要求對(duì)正式環(huán)境的啟動(dòng)包進(jìn)行安全性處理,防止客戶直接通過反編譯工具將代碼反編譯出來。
2 方案
第一種方案使用代碼混淆
采用proguard-maven-plugin插件
在單模塊中此方案還算簡(jiǎn)單,但是現(xiàn)在項(xiàng)目一般都是多模塊,一個(gè)模塊依賴多個(gè)公共模塊。那么使用此方案就比較麻煩,配置復(fù)雜,文檔難懂,各模塊之間的調(diào)用在是否混淆時(shí)極其容易出錯(cuò)。
第二種方案使用代碼加密
采用classfinal-maven-plugin插件
此方案比對(duì)上面的方案來說,就簡(jiǎn)單了許多。直接配置一個(gè)插件就可以實(shí)現(xiàn)源碼的安全性保護(hù)。并且可以對(duì)yml、properties配置文件以及l(fā)ib目錄下的maven依賴進(jìn)行加密處理。若想指定機(jī)器啟動(dòng),支持綁定機(jī)器,項(xiàng)目加密后只能在特定機(jī)器運(yùn)行。
ClassFinal項(xiàng)目源碼地址 [1]
3 項(xiàng)目操作
只需要在啟動(dòng)類的pom.xml文件中加如下插件即可,需要注意的是,改插件時(shí)要放到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 啟動(dòng)方式
無密碼啟動(dòng)
java-javaagent:xxx-encrypted.jar-jarxxx-encrypted.jar
有密碼啟動(dòng)
java-javaagent:xxx-encrypted.jar='-pwd=密碼'-jarxxx-encrypted.jar
5 反編譯效果
啟動(dòng)包加密之后,方法體被清空,保留方法參數(shù)、注解等信息.主要兼容swagger文檔注解掃描
反編譯只能看到方法名和注解,看不到方法體的具體內(nèi)容
啟動(dòng)過程中解密class,完全內(nèi)存解密,不留下任何解密后的文件
yml配置文件留下空白
6 綁定機(jī)器啟動(dòng)
下載到classfinal-fatjar-1.2.1.jar [2]依賴,在當(dāng)前依賴下cmd執(zhí)行java -jar classfinal-fatjar-1.2.1.jar -C命令,會(huì)自動(dòng)生成一串機(jī)器碼
將此生成好的機(jī)器碼,放到maven插件中的code里面即可。這樣,打包好的項(xiàng)目只能在生成機(jī)器碼的機(jī)器運(yùn)行,其他機(jī)器則啟動(dòng)不了項(xiàng)目。
-
源碼
+關(guān)注
關(guān)注
8文章
632瀏覽量
29110 -
代碼
+關(guān)注
關(guān)注
30文章
4722瀏覽量
68229 -
插件
+關(guān)注
關(guān)注
0文章
320瀏覽量
22396 -
SpringBoot
+關(guān)注
關(guān)注
0文章
173瀏覽量
161
原文標(biāo)題:SpringBoot 項(xiàng)目 Jar 包加密,防止反編譯
文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論