0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SpringBoot項(xiàng)目Jar包加密防止反編譯方案

jf_ro2CN3Fa ? 來源:稀土掘金技術(shù)社區(qū) ? 2023-12-12 14:04 ? 次閱讀

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)存解密,不留下任何解密后的文件

d09c1e84-9740-11ee-8b88-92fbcf53809c.jpg

yml配置文件留下空白

d0b29e7a-9740-11ee-8b88-92fbcf53809c.jpg

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ī)器碼

d0c5871a-9740-11ee-8b88-92fbcf53809c.jpg

將此生成好的機(jī)器碼,放到maven插件中的code里面即可。這樣,打包好的項(xiàng)目只能在生成機(jī)器碼的機(jī)器運(yùn)行,其他機(jī)器則啟動(dòng)不了項(xiàng)目。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 源碼
    +關(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)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    怎樣防止編譯后的C語言文件被反編譯?

    單片機(jī)C語言生成什么文件后可以防止反編譯
    發(fā)表于 09-14 15:25

    DEX加密效果分析

    dex加密目的:保護(hù)安卓應(yīng)用的Java源代碼,避免被惡意分析,技術(shù)被竊取準(zhǔn)備工具:1、apktool :反編譯apk,提取smali代碼2、dex2jar :將dex轉(zhuǎn)化為jar文件3
    發(fā)表于 12-12 16:56

    請(qǐng)問如何打jar和運(yùn)行jar?

    如何打jar和運(yùn)行jar 首先,例如c盤根目錄下有類HelloWorld.java: public class HelloWorld{ public static void mai
    發(fā)表于 07-05 01:08

    JAR文件jar命令詳解

    制作可執(zhí)行的JAR文件jar命令詳解常常在網(wǎng)上看到有人詢問:如何把 java 程序編譯成 .exe 文件。通?;卮鹬挥袃煞N,一種是制作一個(gè)可執(zhí)行的
    發(fā)表于 07-12 08:37

    幾種Linux下后臺(tái)啟動(dòng)jar的方法介紹

    ??當(dāng)我們使用SpringBoot的方式開發(fā)好了我們的應(yīng)用,放到我們的Linux服務(wù)器上準(zhǔn)備上線,首先想到的可能就是通過 java -jar xxx.jar 的方式來運(yùn)行我們的jar
    發(fā)表于 07-22 08:02

    8051 MCU反編譯開發(fā)環(huán)境與步驟分別是什么呢

    8051 MCU反編譯開發(fā)方法記錄1、項(xiàng)目背景2、開發(fā)環(huán)境3、開發(fā)步驟3.1 反編譯3.2 找出EEPROM的寫入地址3.3 找出EEPROM讀寫操作的代碼段3.4 找出EEPROM讀寫操作代碼段
    發(fā)表于 01-24 07:06

    反編譯代碼與源代碼的比較算法

    反編譯代碼與源代碼的
    發(fā)表于 02-09 15:19 ?10次下載

    FoxPro編程愛好者的反編譯工具源代碼

    FoxPro編程愛好者的反編譯工具源代碼 UNFOXALL 2.1獻(xiàn)給廣大FoxPro編程愛好者的反編譯工具            關(guān)于
    發(fā)表于 02-26 16:13 ?94次下載

    Android反編譯工具

    Android反編譯工具
    發(fā)表于 12-17 15:59 ?21次下載

    鴻蒙三方庫(kù)移植及開發(fā)項(xiàng)目如何打入Jar

    鴻蒙三方庫(kù)移植及開發(fā)項(xiàng)目中,在JavaLibrary module中會(huì)引用一些其他開源三方庫(kù)如Zxing,Gson等,將JavaLibrary打出jar的時(shí)候,發(fā)現(xiàn)這些第三方庫(kù)根本沒有打到j
    的頭像 發(fā)表于 03-19 14:46 ?2953次閱讀

    java反編譯常用的保護(hù)技術(shù)

    由于Java字節(jié)碼的抽象級(jí)別較高,因此它們較容易被反編譯。本節(jié)介紹了幾種常用的方法,用于保護(hù)Java字節(jié)碼不被反編譯。通常,這些方法不能夠絕對(duì)防止程序被反編譯,而是加大
    發(fā)表于 07-29 16:00 ?686次閱讀

    SpringBoot部署打包成jar和war有什么不同呢?

    我的一個(gè)springboot項(xiàng)目,用mvn install打包成jar,換一臺(tái)有jdk的機(jī)器就直接可以用java -jar 項(xiàng)目名.
    的頭像 發(fā)表于 04-07 11:30 ?828次閱讀

    ida反編譯出來代碼能直接用嗎

    IDA反編譯出來的代碼通常 不能直接使用 ,這主要基于以下幾個(gè)方面的原因: 一、代碼的不完整性 IDA反編譯生成的代碼可能缺少原始源代碼中的某些關(guān)鍵信息。在編譯過程中,編譯器會(huì)優(yōu)化代碼
    的頭像 發(fā)表于 09-02 10:55 ?433次閱讀

    java反編譯的代碼可以修改么

    Java反編譯是一種將編譯后的Java字節(jié)碼(.class文件)轉(zhuǎn)換回源代碼的過程。反編譯后的代碼可以進(jìn)行修改,但是需要注意,反編譯代碼的質(zhì)量和可讀性可能會(huì)受到原始
    的頭像 發(fā)表于 09-02 11:00 ?441次閱讀

    java反編譯能拿到源碼嗎

    Java反編譯是一種將編譯后的Java字節(jié)碼(.class文件)轉(zhuǎn)換回Java源代碼的過程。雖然反編譯可以幫助理解代碼的邏輯和結(jié)構(gòu),但它并不總是能完美地還原原始源代碼。反編譯工具通常會(huì)
    的頭像 發(fā)表于 09-02 11:03 ?606次閱讀