java jar包加密 jar-protect

介绍

java 本身是开放性极强的语言,代码也容易被反编译,没有语言层面的一些常规保护机制,jar包很容易被反编译和破解。 受classfinal(已停止维护)设计启发,针对springboot日常项目开发,重新编写安全可靠的jar包加壳加密技术,用于保护软件版权。

使用说明

  1. 使用jdk8编译,支持jdk8+版本
  2. 目前支持springboot打包的jar文件(其他未测)
  3. 目前支持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

java 复制代码
#过期时间,为空则不限制过期时间(默认到9999-01-01)
expireTime=2023-07-01
#加密密码,为空则随机生成动态密码
password=
#加密解密文件地址(加密java代码源码),为空则使用自带des加密
myEncryptCodeFile=加密.java
#加密方写入的版权信息声明,为空则无
myVersionInfo=请正规渠道获得版本授权文件,严禁进行反编译修改或破解,一经发现会追溯法律责任!

加密.java模板

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);
        }
    }
}

解密设计

解密命令

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=

未来扩展

  1. 增加远程授权管理端
相关推荐
TechWJ18 分钟前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
qq_124987075324 分钟前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_30 分钟前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.31 分钟前
Day06——权限认证-项目集成
java
瑶山33 分钟前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard
abluckyboy40 分钟前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
lly20240641 分钟前
C++ 文件和流
开发语言
2301_8187320642 分钟前
前端调用控制层接口,进不去,报错415,类型不匹配
java·spring boot·spring·tomcat·intellij-idea
m0_706653231 小时前
分布式系统安全通信
开发语言·c++·算法
2501_941982051 小时前
深度对比:Java、Go、Python 实现企微外部群推送,哪个效率更高?
java·golang·企业微信