當前位置: 妍妍網 > 碼農

SpringBoot 計畫 Jar 包加密,防止反編譯

2024-06-20碼農

最近計畫要求部署到其他公司的伺服器上,但是又不想將源碼泄露出去。 要求對正式環境的啟動包進行安全性處理,防止客戶直接透過反編譯工具將程式碼反編譯出來。


2 方案





第一種方案使用程式碼混淆

采用proguard-maven-plugin外掛程式

在單模組中此方案還算簡單,但是現在計畫一般都是多模組,一個模組依賴多個公共模組。那麽使用此方案就比較麻煩,配置復雜,文件難懂,各模組之間的呼叫在是否混淆時極其容易出錯。

第二種方案使用程式碼加密

采用 classfinal-maven-plugin外掛程式

此方案比對上面的方案來說,就簡單了許多。直接配置一個外掛程式就可以實作源碼的安全性保護。並且可以對yml、properties配置檔以及lib目錄下的maven依賴進行加密處理。若想指定機器啟動,支持繫結機器,計畫加密後只能在特定機器執行。

classFinal計畫源碼地址 https:/ /gitee.com/roseboy/ classfinal



計畫操作




只需要在啟動類的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>



啟動方式




無密碼啟動

java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar

有密碼啟動

java -javaagent:xxx-encrypted.jar='-pwd=密碼' -jar xxx-encrypted.jar



反編譯效果




啟動 包加密 之後,方法體被清空,保留方法參數、註解等資訊.主要相容swagger文件註解掃描

反編譯只能看到方法名和註解,看不到方法體的具體內容

啟動過程中解密 class,完全記憶體解密,不留下任何解密後的檔

yml配置檔留下空白



繫結機器啟動




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

將此生成好的機器碼,放到maven外掛程式中的code裏面即可。這樣,打包好的計畫只能在生成機器碼的機器執行,其他機器則啟動不了計畫。

文章來源:https://juejin.cn/post/7291846601651273769

>>

END

精品資料,超贊福利,免費領

微信掃碼/長按辨識 添加【技術交流群

群內每天分享精品學習資料

最近開發整理了一個用於速刷面試題的小程式;其中收錄了上千道常見面試題及答案(包含基礎並行JVMMySQLRedisSpringSpringMVCSpringBootSpringCloud訊息佇列等多個型別),歡迎您的使用。

👇👇

👇點選"閱讀原文",獲取更多資料(持續更新中