自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開(kāi)發(fā) 項(xiàng)目管理
啟動(dòng)包加密之后,方法體被清空,保留方法參數(shù)、注解等信息.主要兼容swagger文檔注解掃描。反編譯只能看到方法名和注解,看不到方法體的具體內(nèi)容。

場(chǎng)景

最近項(xiàng)目要求部署到其他公司的服務(wù)器上,但是又不想將源碼泄露出去。要求對(duì)正式環(huán)境的啟動(dòng)包進(jìn)行安全性處理,防止客戶直接通過(guò)反編譯工具將代碼反編譯出來(lái)。

方案

第一種方案使用代碼混淆

采用proguard-maven-plugin插件。

在單模塊中此方案還算簡(jiǎn)單,但是現(xiàn)在項(xiàng)目一般都是多模塊,一個(gè)模塊依賴多個(gè)公共模塊。那么使用此方案就比較麻煩,配置復(fù)雜,文檔難懂,各模塊之間的調(diào)用在是否混淆時(shí)極其容易出錯(cuò)。

第二種方案使用代碼加密

采用classfinal-maven-plugin插件

此方案比對(duì)上面的方案來(lái)說(shuō),就簡(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)目源碼地址:https://gitee.com/roseboy/classfinal

項(xiàng)目操作

只需要在啟動(dòng)類的pom.xml文件中加如下插件即可,需要注意的是,改插件時(shí)要放到spring-boot-maven-plugin插件后面,否則不起作用。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <!--
                    1. 加密后,方法體被清空,保留方法參數(shù)、注解等信息.主要兼容swagger文檔注解掃描
                    2. 方法體被清空后,反編譯只能看到方法名和注解,看不到方法體的具體內(nèi)容
                    3. 加密后的項(xiàng)目需要設(shè)置javaagent來(lái)啟動(dòng),啟動(dòng)過(guò)程中解密class,完全內(nèi)存解密,不留下任何解密后的文件
                    4. 啟動(dòng)加密后的jar,生成xxx-encrypted.jar,這個(gè)就是加密后的jar文件,加密后不可直接執(zhí)行
                    5. 無(wú)密碼啟動(dòng)方式,java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar
                    6. 有密碼啟動(dòng)方式,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><!-- #表示啟動(dòng)時(shí)不需要密碼,事實(shí)上對(duì)于代碼混淆來(lái)說(shuō),這個(gè)密碼沒(méi)什么用,它只是一個(gè)啟動(dòng)密碼 -->
                <excludes>org.spring</excludes>
                <packages>${groupId}</packages><!-- 加密的包名,多個(gè)包用逗號(hào)分開(kāi) -->
                <cfgfiles>application.yml,application-dev.yml</cfgfiles><!-- 加密的配置文件,多個(gè)包用逗號(hào)分開(kāi) -->
                <libjars>hutool-all.jar</libjars> <!-- jar包lib下面要加密的jar依賴文件,多個(gè)包用逗號(hào)分開(kāi) -->
                <code>xxxx</code> <!-- 指定機(jī)器啟動(dòng),機(jī)器碼 -->
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>classFinal</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

</build>

啟動(dòng)方式

無(wú)密碼啟動(dòng)

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

有密碼啟動(dòng)

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

反編譯效果

啟動(dòng)包加密之后,方法體被清空,保留方法參數(shù)、注解等信息.主要兼容swagger文檔注解掃描。

反編譯只能看到方法名和注解,看不到方法體的具體內(nèi)容。

啟動(dòng)過(guò)程中解密class,完全內(nèi)存解密,不留下任何解密后的文件。

圖片圖片

yml配置文件留下空白。

圖片

綁定機(jī)器啟動(dòng)

下載到classfinal-fatjar-1.2.1.jar依賴,在當(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)目。

責(zé)任編輯:武曉燕 來(lái)源: JAVA日知錄
相關(guān)推薦

2024-09-14 07:00:28

SpringBoot代碼反編譯

2025-02-06 16:58:30

2021-12-17 14:27:52

jar反編譯Java

2015-01-15 11:01:43

2025-04-02 07:42:49

2010-09-25 10:32:52

Java字節(jié)碼

2023-09-01 08:26:06

SpringBootjar包war包

2021-12-10 10:05:27

Java反編譯jar

2015-07-20 16:37:11

2011-05-31 14:52:13

Android 反編譯 方法

2015-08-20 10:13:34

2021-03-07 16:31:35

Java編譯反編譯

2017-02-20 13:54:14

Java代碼編譯

2015-01-15 10:15:16

Android反編譯-smail語(yǔ)法

2022-02-13 20:31:26

SpringBootjarmanifests

2011-05-31 14:38:04

Android 反編譯

2011-05-31 14:18:17

2011-04-20 10:32:44

java反編譯

2009-06-11 14:11:33

代碼混淆Java反編譯

2015-07-13 15:52:18

反編譯Android APK
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)