ClassFinal - Java字節碼加密工具


ClassFinal 簡介

  ClassFinal是一款java class文件安全加密工具,支持直接加密jar包或war包,無需修改任何項目代碼,兼容spring-framework;可避免源碼泄漏或字節碼被反編譯。

功能特性

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

環境依賴

  JDK 1.8 +

使用步驟

1. 加密命令

 java -jar classfinal-fatjar.jar -file yourpaoject.jar -libjars a.jar,b.jar -packages com.yourpackage,com.yourpackage2 -exclude com.yourpackage.Main -pwd 123456 -Y 

2.參數說明

-file       加密的jar/war完整路徑
-packages   加密的包名(可為空,多個用","分割)
-libjars  jar/war包lib下要加密jar文件名(可為空,多個用","分割)
-cfgfiles    需要加密的配置文件,一般是classes目錄下的yml或properties文件(可為空,多個用","分割)
-exclude   排除的類名(可為空,多個用","分割)
-classpath  外部依賴的jar目錄,例如/tomcat/lib(可為空,多個用","分割)
-pwd   加密密碼,如果是#號,則使用無密碼模式加密
-code  機器碼,在綁定的機器生成,加密后只可在此機器上運行
-Y    無需確認,不加此參數會提示確認以上信息

結果: 生成 yourpaoject-encrypted.jar,這個就是加密后的jar文件;加密后的文件不可直接執行,需要配置javaagent。

注: 以上示例是直接用參數執行,也可以直接執行 java -jar classfinal-fatjar.jar按照步驟提示輸入信息完成加密。

3.插件方式

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <!-- https://gitee.com/roseboy/classfinal -->
            <groupId>net.roseboy</groupId>
            <artifactId>classfinal-maven-plugin</artifactId>
            <version>1.2.1</version>
            <configuration>
                <!--加密打包之后pom.xml會被刪除,不用擔心在jar包里找到此密碼-->
                <password>123456</password>
                <packages>com.whty.tec</packages>
                <!-- 需要加密的配置文件多個以 , 分割 -->
                <cfgfiles>application.yml</cfgfiles>
                <libjars>tylicense-spring-boot-starter-0.0.1-SNAPSHOT.jar</libjars>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>classFinal</goal>
                    </goals
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

 

  • 運行mvn package時會在target下自動加密生成yourpaoject-encrypted.jar。
  • maven插件的參數名稱與直接運行的參數相同,請參考上節的參數說明。

4. 啟動加密后的jar

  • 加密后的項目需要設置javaagent來啟動項目,項目在啟動過程中解密class,完全內存解密,不留下任何解密后的文件。
  • 解密功能已經自動加入到 yourpaoject-encrypted.jar中,所以啟動時-javaagent與-jar相同,不需要額外的jar包。
  • 啟動jar項目執行以下命令:java -javaagent:yourpaoject-encrypted.jar -jar yourpaoject-encrypted.jar

5.注意事項

  • 本工具使用AES算法加密class文件,密碼是保證不被破解的關鍵,請保存好密碼,請勿泄漏。
  • 密碼一旦忘記,項目不可啟動且無法恢復,請牢記密碼。
  • 本工具加密后,原始的class文件並不會完全被加密,只是方法體被清空,保留方法參數、注解等信息,這是為了兼容spring,swagger等掃描注解的框架;
  • 方法體被清空后,反編譯者只能看到方法名和注解,看不到方法的具體內容;當class被classloader加載時,真正的方法體會被解密注入。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM