開源地址:https://gitee.com/chejiangyi/jar-protect 介紹 java 本身是開放性極強的語言,代碼也容易被反編譯,沒有語言層面的一些常規保護機制,jar包很容易被反編譯和破解。 受classfinal(已停止維護)設計啟發,針對springboot日常項目開發, ...
開源地址:https://gitee.com/chejiangyi/jar-protect
介紹
java 本身是開放性極強的語言,代碼也容易被反編譯,沒有語言層面的一些常規保護機制,jar包很容易被反編譯和破解。 受classfinal(已停止維護)設計啟發,針對springboot日常項目開發,重新編寫安全可靠的jar包加殼加密技術,用於保護軟體版權。
使用說明
- 使用jdk8編譯,支持jdk8+版本
- 目前支持springboot打包的jar文件(其他未測)
- 目前僅支持class文件加密
加密設計
加密命令
jdk17 需要加--add-opens java.base/java.lang=ALL-UNNAMED
#fromJar 待加密的jar包的地址,支持相對路徑 #excludeClass 排除(不加密)類文件,支持前後*進行模糊匹配 #includeJar 包含(需要加密)jar包,支持前後*進行模糊匹配 java -jar jar-project.jar --fromJar "c:\\tool\\a.jar" --excludeClass "*EurekaApplication*" --includeJar "lmc-*"
加密配置
文件名: 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 { @Override public byte[] e(byte[] d) { try { //Context.Default.getPassword() /*加密邏輯代碼*/ }catch (Exception e){ throw new BsfException(e); } } @Override public 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:encrypt-lmc-demo-provider-1.0-SNAPSHOT.jar -jar encrypt-lmc-demo-provider-1.0-SNAPSHOT.jar
解密配置
一般為加密jar包後自動生成,文件名為{jar包名}.security.properties,解密jar需要配套此解密配置文件
#加密密碼 password= #解密秘鑰代碼 myDecryptCode=
未來擴展
- 增加配置文件等資源加密
- 增加遠程授權管理端
by 車江毅
技術vp
2023-7-3
開源是一種態度,分享是一種精神,學習仍需堅持,進步仍需努力,.net生態圈因你我更加美好。