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加載時,真正的方法體會被解密注入。