介紹
java 本身是開放性極強的語言,代碼也容易被反編譯,沒有語言層面的一些常規保護機制,jar包很容易被反編譯和破解。 受classfinal(已停止維護)設計啟發,針對springboot日常項目開發,重新編寫安全可靠的jar包加殼加密技術,用于保護軟件版權。
使用說明
- 使用jdk8編譯,支持jdk8+版本
- 目前支持springboot打包的jar文件(其他未測)
- 目前支持class文件加密和yml,properties,xml等配置文件加密
加密設計
加密命令
jdk17 需要加--add-opens java.base/java.lang=ALL-UNNAMED
#fromJar 待加密的jar包的地址,支持相對路徑
#excludeClass 排除(不加密)類文件,支持前后*進行模糊匹配
#includeJar 包含(需要加密)jar包,支持前后*進行模糊匹配
#includeConfig 包含(需要加密)文件,如.xml,.properties,.yml等配置文件,支持前后*進行模糊匹配
java -jar jar-project.jar --fromJar "c:\\tool\\a.jar" --excludeClass "*EurekaApplication*" --includeJar "lmc-*" --includeConfig "*.properties"
加密配置
文件名: jar-project.security.properties
#過期時間,為空則不限制過期時間(默認到9999-01-01)
expireTime=2023-07-01
#加密密碼,為空則隨機生成動態密碼
password=
#加密解密文件地址(加密java代碼源碼),為空則使用自帶des加密
myEncryptCodeFile=加密.java
#加密方寫入的版權信息聲明,為空則無
myVersionInfo=請正規渠道獲得版本授權文件,嚴禁進行反編譯修改或破解,一經發現會追溯法律責任!
加密.java模板
package com.free.bsf.jarprotect.core.encrypt;
import com.free.bsf.jarprotect.core.base.BsfException;
import com.free.bsf.jarprotect.core.base.Context;
import com.free.bsf.jarprotect.core.encrypt.IEncrypt;/*MyEncrypt類名不能更改,注意引用相應的包(僅支持jdk自身的類庫,不能使用第三方類庫)*/
public class MyEncrypt implements IEncrypt {@Overridepublic byte[] e(byte[] d) {try {//Context.Default.getPassword()/*加密邏輯代碼*/}catch (Exception e){throw new BsfException(e);}}@Overridepublic byte[] d(byte[] d) {try {//Context.Default.getPassword()/*解密邏輯代碼*/}catch (Exception e){throw new BsfException(e);}}
}
- 自定義編碼案例Base64+DES
- 自定義編碼案例RSA
- 自定義編碼案例遠程不透明加密
解密設計
解密命令
jdk17 需要加--add-opens java.base/java.lang=ALL-UNNAMED
#【格式】java -javaagent:已加密.jar -jar 已加密.jar
java -javaagent:encrypt-lmc-demo-provider-1.0-SNAPSHOT.jar -jar encrypt-lmc-demo-provider-1.0-SNAPSHOT.jar
解密配置
一般為加密jar包后自動生成,文件名為{jar包名}.security.properties,解密jar需要配套此解密配置文件
#加密密碼
password=
#解密秘鑰代碼
myDecryptCode=
下載地址
https://download.csdn.net/download/qq827245563/90124802https://download.csdn.net/download/qq827245563/90124802