成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SpringBoot Jar 包加密防止反編譯實戰

開發
今天給大家分享一個 SpringBoot 程序 Jar 包加密的方式,通過代碼加密可以實現無法反編譯。

今天給大家分享一個 SpringBoot 程序 Jar 包加密的方式,通過代碼加密可以實現無法反編譯。

應用場景就是當需要把公司的產品部署到友方公司或者其他公司時,可以防止客戶直接反編譯出來源碼,大大提升代碼的安全性。

版本

  • springboot 2.6.8
  • jdk8

一、proguard-maven-plugin

第一種方式就是使用代碼混淆的方式,可以參考proguard-maven-plugin插件使用,因為配置復雜,用起來太麻煩,本文不做重點介紹。

https://github.com/wvengen/proguard-maven-plugin

二、classfinal-maven-plugin

第二種方式就是使用代碼加密的方式,classfinal-maven-plugin方式比較簡單,只需要在pom.xml文件中引入一個plugin,然后簡單的修改幾項配置即可使用。

這種方式不僅可以對代碼進行加密,對配置文件application.yml、lib 下的依賴也可以加密。

還可以指定機器運行程序。

https://gitee.com/roseboy/classfinal

三、實戰

下面我們實戰一下,首先創建一個 SpringBoot 程序,在 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>xxxxx</code> <!-- 指定機器啟動,機器碼 -->
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>classFinal</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

上述代碼中的機器碼可以使用如下工具生成,進去之后點擊下載。

https://repo1.maven.org/maven2/net/roseboy/classfinal-fatjar/1.2.1/classfinal-fatjar-1.2.1.jar

然后執行,注意最后參數為大寫的C。

java -jar classfinal-fatjar-1.2.1.jar -C

最后將輸出的機器碼放入到上方的 code 中即可。

執行 Maven 命令打包即可,生成文件如下,其中EncryptDemo-0.0.1-SNAPSHOT-encrypted.jar為生成的加密jar 包。

如需提供給客戶,提供該包即可。

使用反編譯工具,查看 jar 包中配置文件,可以看到配置文件已經為空。

反編譯工具我這里用的是 luyten。

https://github.com/deathmarine/Luyten/releases/tag/v0.5.4_Rebuilt_with_Latest_depenencies

查看代碼文件,可以看到方法體被清空,只保留了方法參數、注解等信息。

原理就是啟動過程中進行解密,全是內存操作,非常安全。

無密碼啟動

例如我的 jar 包名稱為EncryptDemo-0.0.1-SNAPSHOT-encrypted.jar,那么執行命令如下:

java -javaagent:加密jar包的名稱 -jar 加密jar包的名稱
java -javaagent:EncryptDemo-0.0.1-SNAPSHOT-encrypted.jar -jar EncryptDemo-0.0.1-SNAPSHOT-encrypted.jar

有密碼啟動

有密碼啟動與無密碼啟動類似,只是啟動之后會提示輸入密碼,按照提示輸入密碼即可。

如果機器碼不匹配,會提示該項目不可在此機器上運行!

正常啟動截圖如下:

源代碼如下:https://github.com/zuiyu-main/EncryptDemo.git

分支:jar-encry

最后介紹一下  ClassFinal ,ClassFinal 能夠對class文件進行加密,支持直接加密jar包或者war包,無需修改任務代碼,兼容spring framework,可避免源碼泄露或者字節碼被反編譯。

目前看官方介紹支持的功能如下:

  • 支持編譯好的 jar/war 加密。
  • 運行加密項目,無需修改源代碼。
  • 支持普通jar 包。springboot的jar包,tomcat的war包。
  • 支持 spring framework、swagger等在啟動過程中掃描注解或者生成字節碼的框架。
  • 支持maven 插件,添加插件即可自動加密。
  • 支持加密lib文件下的依賴。
  • 支持綁定機器運行。
  • 支持加密 springboot 配置文件。
責任編輯:趙寧寧 來源: 醉魚Java
相關推薦

2024-09-13 08:57:25

SpringJar項目

2025-02-06 16:58:30

2021-12-17 14:27:52

jar反編譯Java

2025-04-02 07:42:49

2025-06-17 09:31:24

2015-01-15 11:01:43

2018-05-11 10:16:41

微信小程序反編譯

2010-09-25 10:32:52

Java字節碼

2023-09-01 08:26:06

SpringBootjar包war包

2018-05-11 10:22:05

小程序源碼分析

2021-12-10 10:05:27

Java反編譯jar

2015-07-20 16:37:11

2011-05-31 14:52:13

Android 反編譯 方法

2025-06-17 07:35:27

Spring程序jadx

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語法

2022-02-13 20:31:26

SpringBootjarmanifests

2011-05-31 14:38:04

Android 反編譯
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 综合久久99 | av一区在线观看 | 欧美日韩专区 | 伊人久久在线观看 | 亚洲精品一区二区三区蜜桃久 | 日韩欧美专区 | 中文字幕第90页 | 一区二区三区四区免费视频 | 韩日一区| 免费观看的av毛片的网站 | 天天射中文 | 日韩精品在线观看免费 | 美女三区 | 久久精品亚洲国产 | 国产九九九九 | 天天草天天操 | 久久国产精品精品国产色婷婷 | 中文字幕免费视频 | 日韩综合网| 国产精品视频网 | 亚洲欧美中文日韩在线v日本 | 久久综合一区 | 精品成人免费视频 | 国产欧美精品在线 | 日韩三级一区 | 久久国产精品免费一区二区三区 | 亚洲av毛片 | 亚洲视频在线免费 | 国产精品福利在线观看 | 免费一区| 999视频在线播放 | 精久久久| 日韩高清成人 | 精品日本中文字幕 | 99精品电影 | www.黄色在线观看 | 亚洲国产成人久久综合一区,久久久国产99 | 99精品福利视频 | 台湾佬成人网 | 日本三级线观看 视频 | 国产激情在线看 |