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