亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用springboot防止反編譯proguard+xjar

 更新時間:2024年11月21日 10:13:10   作者:mawei7510  
介紹了三種代碼混淆和加密工具的使用方法:ProGuard、Xjar和ClassFinal,ProGuard用于混淆Java字節(jié)碼,Xjar提供對JAR包內(nèi)資源的加密和動態(tài)解密,而ClassFinal則支持直接加密JAR包或WAR包,通過預(yù)研和實際操作

一、背景

項目組核心代碼模塊部署于用戶服務(wù)器上,直接甩jar包到服務(wù)器的方式,極有可能導(dǎo)致數(shù)據(jù)泄露和代碼泄露,為了防止有技術(shù)能力的用戶反編譯我們的程序,采用了proguard和xjar兩種方式來混淆和加密jar包,注:加密技術(shù)只是提高別人獲取你的代碼的門檻,沒有絕對安全的加密方式,而安全等級越高,程序開發(fā)、運維、部署的成本就越高,所以,合適的加密技術(shù)就是最好的。

二、簡介

1. ProGuard是一個壓縮、優(yōu)化和混淆Java字節(jié)碼文件的免費的工具

它可以刪除無用的類、字段、方法和屬性??梢詣h除沒用的注釋,最大限度地優(yōu)化字節(jié)碼文件。

它還可以使用簡短的無意義的名稱來重命名已經(jīng)存在的類、字段、方法和屬性。常常用于Android開發(fā)用于混淆最終的項目,增加項目被反編譯的難度。

2. Xjar

  • Spring Boot JAR 安全加密運行工具, 同時支持的原生JAR
  • 基于對JAR包內(nèi)資源的加密以及拓展ClassLoader來構(gòu)建的一套程序加密啟動, 動態(tài)解密運行的方案, 避免源碼泄露以及反編譯.

功能特性:

  • 無代碼侵入, 只需要把編譯好的JAR包通過工具加密即可.
  • 完全內(nèi)存解密, 降低源碼以及字節(jié)碼泄露或反編譯的風(fēng)險.
  • 支持所有JDK內(nèi)置加解密算法.
  • 可選擇需要加解密的字節(jié)碼或其他資源文件.
  • 支持Maven插件, 加密更加便捷.
  • 動態(tài)生成Go啟動器, 保護(hù)密碼不泄露.

3.ClassFinal是一款Java class文件安全加密工具

支持直接加密jar包或war包,無需修改任何項目代碼,兼容spring-framework,可避免源碼泄漏或字節(jié)碼被反編譯,

功能特性:

  • 無需修改原項目代碼,只要把編譯好的jar/war包用本工具加密即可。
  • 運行加密項目時,無需求修改tomcat,spring等源代碼。
  • 支持普通jar包、springboot jar包以及普通java web項目編譯的war包。
  • 支持spring framework、swagger等需要在啟動過程中掃描注解或生成字節(jié)碼的框架。
  • 支持maven插件,添加插件后在打包過程中自動加密。
  • 支持加密WEB-INF/lib或BOOT-INF/lib下的依賴jar包。

三、預(yù)研了classfinal

classfinal其實也可以起到代碼加密的效果,功能也很強大,被classfinal加密過后的jar包,反編譯了以后,方法返回值會return null或者0,方法內(nèi)部會自動去掉。

并且用classfinal加密過后的jar包啟動方式需要用javaagnet啟動。

而相比較xjar,反編譯以后,反編譯后,直接顯示Internal Error.

1.module pom文件引入

            <plugin>
                <groupId>net.roseboy</groupId>
                <artifactId>classfinal-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <password>#</password><!-- #表示啟動時不需要密碼,事實上對于代碼混淆來說,這個密碼沒什么用,它只是一個啟動密碼 -->
                    <packages>com.nick.gnss</packages><!-- 加密的包名,多個包用逗號分開-->
                    <excludes>org.spring</excludes>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>classFinal</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

2.啟動方式

1)無密碼啟動

java -jar gnss-server-1.0.0-encrypted.jar

2)有密碼啟動

java -javaagent:gnss-server-1.0.0-encrypted.jar="-pwd 123456" -jar gnss-server-1.0.0-encrypted.jar

3.反編譯后的效果

所有的方法,return 0 或者 null. 方法體內(nèi)部是空的。

四、引入proguard混淆

1.module中增加proguard.cfg文件

#指定Java的版本
-target 1.8
#proguard會對代碼進(jìn)行優(yōu)化壓縮,他會刪除從未使用的類或者類成員變量等
-dontshrink
#是否關(guān)閉字節(jié)碼級別的優(yōu)化,如果不開啟則設(shè)置如下配置
-dontoptimize
#混淆時不生成大小寫混合的類名,默認(rèn)是可以大小寫混合
-dontusemixedcaseclassnames
# 對于類成員的命名的混淆采取唯一策略
-useuniqueclassmembernames
#混淆時不生成大小寫混合的類名,默認(rèn)是可以大小寫混合
-dontusemixedcaseclassnames
#混淆類名之后,對使用Class.forName('className')之類的地方進(jìn)行相應(yīng)替代
-adaptclassstrings

#對異常、注解信息予以保留
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
# 此選項將保存接口中的所有原始名稱(不混淆)-->
-keepnames interface ** { *; }
# 此選項將保存所有軟件包中的所有原始接口文件(不進(jìn)行混淆)
#-keep interface * extends * { *; }
#保留參數(shù)名,因為控制器,或者M(jìn)ybatis等接口的參數(shù)如果混淆會導(dǎo)致無法接受參數(shù),xml文件找不到參數(shù)
-keepparameternames
# 保留枚舉成員及方法
-keepclassmembers enum * { *; }
# 不混淆所有的set/get方法
-keepclassmembers public class * {void set*(***);*** get*();}

# 不混淆所有包含Component等注解的類
-keep @org.springframework.context.annotation.Bean class * {*;}
-keep @org.springframework.context.beans.factory.annotation.Autowired class * {*;}
-keep @org.springframework.context.beans.factory.annotation.Value class * {*;}
-keep @org.springframework.stereotype.Service class * {*;}
-keep @org.springframework.stereotype.Component class * {*;}
-keep @org.springframework.web.bind.annotation.RestController class * {*;}
-keep @org.springframework.context.annotation.Configuration class * {*;}

#忽略warn消息
-ignorewarnings
#忽略note消息
-dontnote
#打印配置信息
-printconfiguration
#啟動類不需要混淆
-keep class com.nick.GnssApplication {
    public static void main(java.lang.String[]);
}

2.module pom文件引入

此處需要注意,proguard plugin需要放在repackage plugin之前,否則混淆沒有效果。原理就是在打包之前將代碼混淆,然后再打包。

            <!--代碼混淆proguard-->
            <plugin>
                <groupId>com.github.wvengen</groupId>
                <artifactId>proguard-maven-plugin</artifactId>
                <version>2.6.0</version>
                <executions>
                    <!-- 以下配置說明執(zhí)行mvn的package命令時候,會執(zhí)行proguard-->
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>proguard</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!-- 就是輸入Jar的名稱,我們要知道,代碼混淆其實是將一個原始的jar,生成一個混淆后的jar,那么就會有輸入輸出。 -->
                    <injar>${project.build.finalName}.jar</injar>
                    <!-- 輸出jar名稱,輸入輸出jar同名的時候就是覆蓋,也是比較常用的配置。 -->
                    <outjar>${project.build.finalName}.jar</outjar>
                    <!-- 是否混淆 默認(rèn)是true -->
                    <obfuscate>true</obfuscate>
                    <!-- 配置一個文件,通常叫做proguard.cfg,該文件主要是配置options選項,也就是說使用proguard.cfg那么options下的所有內(nèi)容都可以移到proguard.cfg中 -->
                    <proguardInclude>${project.basedir}/proguard.cfg</proguardInclude>
                    <!-- 額外的jar包,通常是項目編譯所需要的jar -->
                    <libs>
                        <lib>${java.home}/lib/rt.jar</lib>
                        <lib>${java.home}/lib/jce.jar</lib>
                        <lib>${java.home}/lib/jsse.jar</lib>
                    </libs>
                    <!-- 對輸入jar進(jìn)行過濾比如,如下配置就是對META-INFO文件不處理。 -->
                    <inLibsFilter>!META-INF/**,!META-INF/versions/9/**.class</inLibsFilter>
                    <!-- 這是輸出路徑配置,但是要注意這個路徑必須要包括injar標(biāo)簽填寫的jar -->
                    <outputDirectory>${project.basedir}/target</outputDirectory>
                    <!--這里特別重要,此處主要是配置混淆的一些細(xì)節(jié)選項,比如哪些類不需要混淆,哪些需要混淆-->
                    <options>
                        <!-- 可以在此處寫option標(biāo)簽配置,不過我上面使用了proguardInclude,故而我更喜歡在proguard.cfg中配置 -->
                    </options>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.7.RELEASE</version>
                <configuration>
                    <mainClass>com.nick.GnssApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

3.反編譯看效果

查看xxx.jar是否有混淆的效果,而不是xxx_proguard_base.jar(此jar是沒有混淆的原jar)

效果杠杠滴!?。⌒枰囘\行,并且注意配置proguard,否則會導(dǎo)致程序運行異常,這可能就是proguard的唯一缺點了吧,歡迎拍磚。。。

4.運行查看效果

啟動成功,沒毛病

五、引入xjar

1.parent pom文件引入

重點在最下面的xjar plugin

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.nick</groupId>
    <artifactId>nick-server</artifactId>
    <version>1.0.0</version>
    <name>nick-server</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <modules>
        <module>gnss-server</module>
    </modules>

    <packaging>pom</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <!--代碼加密-->
            <plugin>
                <groupId>com.github.core-lib</groupId>
                <artifactId>xjar-maven-plugin</artifactId>
                <version>v2.0.7</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>build</goal>
                        </goals>
                        <phase>package</phase>
                        <configuration>
                            <password>44889951235894612351265ABD123</password>
                            <mode>1</mode>
                            <sourceDir>${project.build.directory}</sourceDir>
                            <targetJar>${project.build.finalName}_x.jar</targetJar>
                            <includes>
                                <include>com/nick/**</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

</project>

2. module pom文件引入

需要放在module pom文件plugin 最后一個,保證xjar是最后一個執(zhí)行plugin

            <!--代碼加密xjar-->
            <plugin>
                <groupId>com.github.core-lib</groupId>
                <artifactId>xjar-maven-plugin</artifactId>
            </plugin>

3.編譯打包

4.反編譯看效果

效果杠杠滴

5.運行查看效果

六、proguard + xjar

將第四步和第五步融合即可,但是要注意pom文件中的plugin的先后問題,不然要么混淆失敗,要么加密失敗。

1.完整版的parent pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.nick</groupId>
    <artifactId>nick-server</artifactId>
    <version>1.0.0</version>
    <name>nick-server</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <modules>
        <module>gnss-server</module>
    </modules>

    <packaging>pom</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <!--代碼加密-->
            <plugin>
                <groupId>com.github.core-lib</groupId>
                <artifactId>xjar-maven-plugin</artifactId>
                <version>v2.0.7</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>build</goal>
                        </goals>
                        <phase>package</phase>
                        <configuration>
                            <password>44889951235894612351265ABD123</password>
                            <mode>1</mode>
                            <sourceDir>${project.build.directory}</sourceDir>
                            <targetJar>${project.build.finalName}_x.jar</targetJar>
                            <includes>
                                <include>com/nick/**</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

</project>

2.完整版的poguard.cfg

#指定Java的版本
-target 1.8
#proguard會對代碼進(jìn)行優(yōu)化壓縮,他會刪除從未使用的類或者類成員變量等
-dontshrink
#是否關(guān)閉字節(jié)碼級別的優(yōu)化,如果不開啟則設(shè)置如下配置
-dontoptimize
#混淆時不生成大小寫混合的類名,默認(rèn)是可以大小寫混合
-dontusemixedcaseclassnames
# 對于類成員的命名的混淆采取唯一策略
-useuniqueclassmembernames
#混淆時不生成大小寫混合的類名,默認(rèn)是可以大小寫混合
-dontusemixedcaseclassnames
#混淆類名之后,對使用Class.forName('className')之類的地方進(jìn)行相應(yīng)替代
-adaptclassstrings

#對異常、注解信息予以保留
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
# 此選項將保存接口中的所有原始名稱(不混淆)-->
-keepnames interface ** { *; }
# 此選項將保存所有軟件包中的所有原始接口文件(不進(jìn)行混淆)
#-keep interface * extends * { *; }
#保留參數(shù)名,因為控制器,或者M(jìn)ybatis等接口的參數(shù)如果混淆會導(dǎo)致無法接受參數(shù),xml文件找不到參數(shù)
-keepparameternames
# 保留枚舉成員及方法
-keepclassmembers enum * { *; }
# 不混淆所有的set/get方法
-keepclassmembers public class * {void set*(***);*** get*();}

# 不混淆所有包含Component等注解的類
-keep @org.springframework.context.annotation.Bean class * {*;}
-keep @org.springframework.context.beans.factory.annotation.Autowired class * {*;}
-keep @org.springframework.context.beans.factory.annotation.Value class * {*;}
-keep @org.springframework.stereotype.Service class * {*;}
-keep @org.springframework.stereotype.Component class * {*;}
-keep @org.springframework.web.bind.annotation.RestController class * {*;}
-keep @org.springframework.context.annotation.Configuration class * {*;}

#忽略warn消息
-ignorewarnings
#忽略note消息
-dontnote
#打印配置信息
-printconfiguration
#啟動類不需要混淆
-keep class com.nick.GnssApplication {
    public static void main(java.lang.String[]);
}

3.完整版的module pom文件

該pom文件中注意兩點

  • 1)引入parent節(jié)點
  • 2)需要放在最后一個plugin執(zhí)行
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <parent>
        <artifactId>nick-server</artifactId>
        <groupId>com.nick</groupId>
        <version>1.0.0</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.nick</groupId>
    <artifactId>gnss-server</artifactId>
    <version>1.0.0</version>
    <name>gnss-server</name>
    <description>gnss-server</description>


    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
        <!--maven.build.timestamp保存了maven編譯時間戳-->
        <!--在Maven 3.2.2+中, maven.build.timestamp已被重新定義,顯示UTC中的時間,比中國時間慢8個小時-->
        <timestamp>${maven.build.timestamp}</timestamp>
        <!--指定時間格式-->
        <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>

        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <!--1.2.80以下存在安全漏洞-->
            <!--<version>1.2.78</version>-->
            <version>1.2.83</version>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>30.1.1-jre</version>
        </dependency>

        <!--nacos-web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <delimiters>
                        <delimiter>@</delimiter>
                    </delimiters>
                    <useDefaultDelimiters>false</useDefaultDelimiters>
                </configuration>
            </plugin>

            <!--代碼混淆proguard-->
            <plugin>
                <groupId>com.github.wvengen</groupId>
                <artifactId>proguard-maven-plugin</artifactId>
                <version>2.6.0</version>
                <executions>
                    <!-- 以下配置說明執(zhí)行mvn的package命令時候,會執(zhí)行proguard-->
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>proguard</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!-- 就是輸入Jar的名稱,我們要知道,代碼混淆其實是將一個原始的jar,生成一個混淆后的jar,那么就會有輸入輸出。 -->
                    <injar>${project.build.finalName}.jar</injar>
                    <!-- 輸出jar名稱,輸入輸出jar同名的時候就是覆蓋,也是比較常用的配置。 -->
                    <outjar>${project.build.finalName}.jar</outjar>
                    <!-- 是否混淆 默認(rèn)是true -->
                    <obfuscate>true</obfuscate>
                    <!-- 配置一個文件,通常叫做proguard.cfg,該文件主要是配置options選項,也就是說使用proguard.cfg那么options下的所有內(nèi)容都可以移到proguard.cfg中 -->
                    <proguardInclude>${project.basedir}/proguard.cfg</proguardInclude>
                    <!-- 額外的jar包,通常是項目編譯所需要的jar -->
                    <libs>
                        <lib>${java.home}/lib/rt.jar</lib>
                        <lib>${java.home}/lib/jce.jar</lib>
                        <lib>${java.home}/lib/jsse.jar</lib>
                    </libs>
                    <!-- 對輸入jar進(jìn)行過濾比如,如下配置就是對META-INFO文件不處理。 -->
                    <inLibsFilter>!META-INF/**,!META-INF/versions/9/**.class</inLibsFilter>
                    <!-- 這是輸出路徑配置,但是要注意這個路徑必須要包括injar標(biāo)簽填寫的jar -->
                    <outputDirectory>${project.basedir}/target</outputDirectory>
                    <!--這里特別重要,此處主要是配置混淆的一些細(xì)節(jié)選項,比如哪些類不需要混淆,哪些需要混淆-->
                    <options>
                        <!-- 可以在此處寫option標(biāo)簽配置,不過我上面使用了proguardInclude,故而我更喜歡在proguard.cfg中配置 -->
                    </options>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.7.RELEASE</version>
                <configuration>
                    <mainClass>com.nick.GnssApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!--代碼加密xjar-->
            <plugin>
                <groupId>com.github.core-lib</groupId>
                <artifactId>xjar-maven-plugin</artifactId>
            </plugin>

            <!--classfinal加密程序-->
            <!--<plugin>-->
            <!--<groupId>net.roseboy</groupId>-->
            <!--<artifactId>classfinal-maven-plugin</artifactId>-->
            <!--<version>1.2.1</version>-->
            <!--<configuration>-->
            <!--<password>#</password>&lt;!&ndash; #表示啟動時不需要密碼,事實上對于代碼混淆來說,這個密碼沒什么用,它只是一個啟動密碼 &ndash;&gt;-->
            <!--<packages>com.nick.gnss</packages>&lt;!&ndash; 加密的包名,多個包用逗號分開&ndash;&gt;-->
            <!--<excludes>org.spring</excludes>-->
            <!--</configuration>-->
            <!--<executions>-->
            <!--<execution>-->
            <!--<phase>package</phase>-->
            <!--<goals>-->
            <!--<goal>classFinal</goal>-->
            <!--</goals>-->
            <!--</execution>-->
            <!--</executions>-->
            <!--</plugin>-->
        </plugins>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

</project>

4.打包編譯

5.反編譯查看效果

OK, 效果杠杠滴,混淆+加密。

至此,混淆+加密搞定。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Maven Spring jar包啟動報錯問題解決方案

    Maven Spring jar包啟動報錯問題解決方案

    maven 編譯jar包,放在linux服務(wù)器啟動不起來,提示:xxxx-0.0.1-SNAPSHOT.jar中沒有主清單屬性,接下來通過本文給大家分享問題原因及解決方案,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • JAVA提高第九篇 集合體系

    JAVA提高第九篇 集合體系

    這篇文章主要為大家詳細(xì)介紹了JAVA提高第九篇集合體系的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • JAVA?從完整的文件路徑中分別截取文件名和文件路徑的實現(xiàn)

    JAVA?從完整的文件路徑中分別截取文件名和文件路徑的實現(xiàn)

    在Java編程中,經(jīng)常會遇到需要截取文件名的場景,本文主要介紹了JAVA?從完整的文件路徑中分別截取文件名和文件路徑的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • java Mail郵件接收工具類

    java Mail郵件接收工具類

    這篇文章主要介紹了java Mail郵件接收工具類,本文直接給出類實現(xiàn)代碼和使用示例,需要的朋友可以參考下
    2015-02-02
  • Filter中獲取傳遞參數(shù)方式(解決post請求參數(shù)問題)

    Filter中獲取傳遞參數(shù)方式(解決post請求參數(shù)問題)

    這篇文章主要介紹了Filter中獲取傳遞參數(shù)方式(解決post請求參數(shù)問題),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 詳解SpringBoot如何讓指定的Bean先加載

    詳解SpringBoot如何讓指定的Bean先加載

    這篇文章主要給大家介紹了在 SpringBoot 中如何讓自己的某個指定的 Bean 在其他 Bean 前完成被 Spring 加載,文中通過代碼示例給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • java不用循環(huán)語句打印數(shù)組元素的實例

    java不用循環(huán)語句打印數(shù)組元素的實例

    下面小編就為大家?guī)硪黄猨ava不用循環(huán)語句打印數(shù)組元素的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java實現(xiàn)PDF轉(zhuǎn)HTML/Word/Excel/PPT/PNG的示例代碼

    Java實現(xiàn)PDF轉(zhuǎn)HTML/Word/Excel/PPT/PNG的示例代碼

    這篇文章主要為大家介紹了如何利用Java語言是PDF轉(zhuǎn)HTML、Word、Excel、PPT和PNG功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-05-05
  • 通過實例學(xué)習(xí)Spring @Required注釋原理

    通過實例學(xué)習(xí)Spring @Required注釋原理

    這篇文章主要介紹了通過實例學(xué)習(xí)Spring @Required注釋原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • idea中創(chuàng)建jsp項目的詳細(xì)實戰(zhàn)步驟

    idea中創(chuàng)建jsp項目的詳細(xì)實戰(zhàn)步驟

    才學(xué)javaWeb,以防自己忘記創(chuàng)建項目的過程,所以淺淺的記錄一下吧,下面這篇文章主要給大家介紹了關(guān)于idea中創(chuàng)建jsp項目的詳細(xì)步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09

最新評論