利用classfinal-maven-plugin對jar進行加密,防止反編譯

信铁寒胜發表於2024-10-31

背景:將jar包部署到其他伺服器,如何保證自己的jar不會被反編譯解密

一、如何打包成加密的jar

1、在pom檔案中,新增這兩項

A、

<dependency>
            <groupId>net.roseboy</groupId>
            <artifactId>classfinal-maven-plugin</artifactId>
            <version>1.2.1</version>
        </dependency>

B、

<plugin>
                <!--
                    【1】加密後,方法體被清空,保留方法引數、註解等資訊;是為了相容spring、swagger等掃描註解的框架
                    【2】方法體被清空後,反編譯者只看到方法名和註解,看不到方法的具體內容
                    【3】加密後的專案需要設定javaagent來啟動,啟動過程中解密class,完全記憶體解密,不留下任何解密後的檔案
                    【啟動加密的Jar】: 生成 xxx-encrypted.jar,這個就是加密後的jar檔案:加密後的檔案不可執行
                           無密碼:需要java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar
                           有密碼:java -javaagent:xxx -encrypted.jar = '-pwd 000000' -jar xxx-encrypted.jar
                -->
                <groupId>net.roseboy</groupId>
                <artifactId>classfinal-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <password>#</password> <!--加密密碼,如果是#號,則使用無密碼模式加密-->
                    <packages>com.bk</packages> <!--加密的包名(可為空,多個用“,”分割)-->
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>classFinal</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

  這樣打包出來的jar,反編譯看到class檔案,不能看到方法體裡面的內容,只能看到方法名稱

二、如何執行加密的jar

java -javaagent:D:\custom-server\test-server-1.0.0.jar -jar D:\custom-server\test-server-1.0.0.jar

  

相關文章