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

#过期时间,为空则不限制过期时间(默认到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/90124802icon-default.png?t=O83Ahttps://download.csdn.net/download/qq827245563/90124802

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/62892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:Git

Git常见指令: git help xx_command git xx_command --help git --version 查看git版本git config --global user.name "xxx_name" 全局级别的签名设置,全局的放在本用 git config --global user.ema…

【WiFi】WiFi中RSSI、SNR、NF之间关系及说明

RSSI(接收信号强度指示) 定义: RSSI 是一个相对值,用于表示接收到的无线信号的强度。它通常由无线设备的硬件(如无线网卡或无线芯片)直接提供。 计算: RSSI 的计算通常是由设备的无线芯片完成的…

[ZMQ] -- ZMQ通信Protobuf数据结构 1

1、前言背景 工作需要域间实现zmq通信,刚开始需要比较简单的数据结构,比如两个bool,后面可能就需要传输比较大的数据,所以记录下实现流程,至于为啥选择proto数据结构去做大数据传输,可能是地平线也用这个&…

顺序表的使用,对数据的增删改查

主函数: 3.c #include "3.h"//头文件调用 SqlListptr sql_cerate()//创建顺序表函数 {SqlListptr ptr(SqlListptr)malloc(sizeof(SqlList));//在堆区申请连续的空间if(NULLptr){printf("创建失败\n");return NULL;//如果没有申请成功&#xff…

5G中的随机接入过程可以不用收RAR?

有朋友提到了一种不用接收RAR的RA过程,问这个是怎么回事。其实在刚刚写过的LTM cell switch篇章中就有提到,这里把所有相关的内容整理如下。 在RACH-less LTM场景,在进行LTM cell switch之前就要先知道target cell的TA信息,进而才…

git 导出某段时间修改的文件 windows

第一步:列出两次commitID之间的文件变动 git diff oldid newid --name-only// 例如 git diff 4a886c57a8b5611a2abcfcd120461c2e92f7029a HEAD --name-only 4a886c57a8b5611a2abcfcd120461c2e92f7029a 代表之前 HEAD 代表最新或者换成某次commitID 例如&#xf…

Qt 联合Halcon配置

文章目录 配置代码窗口绑定 配置 选择添加库 选择外部库 LIBS -LC:/Program Files/MVTec/HALCON-17.12-Progress/lib/x64-win64/ LIBS -lhalconcpp\-lhdevenginecpp\-lhalconINCLUDEPATH C:/Program Files/MVTec/HALCON-17.12-Progress/include DEPENDPATH C:/Program Fil…

new URL(`../assets/images/${name}`, import.meta.url).href

背景: 文章讲述了Vite框架中关于资源文件(如图片)在默认配置下,如何正确处理开发环境和打包后的不同引用方式。重点介绍了使用import.meta.url和new URL() 来动态获取并处理静态资源URL的方法,以及注意事项&#xff0…

Tiptap,: 富文本编辑器入门与案例分析

Tiptap 是一个现代的富文本编辑器,基于 ProseMirror 打造,旨在提供一个灵活且功能强大的文本编辑解决方案。它具有开箱即用的能力,同时也允许开发者根据业务需求进行高度定制化扩展。与传统的富文本编辑器相比,Tiptap 提供了更精细…

Java基础学习:java常用启动命令

一、java -jar 1、系统属性传递 使用形式:java -DpathD:\jacoco -jar 获取方式:System.getProperties() 2、系统参数传递 使用形式:java -jar application.jar --jacocoPathD:\tomcat 获取方式:通过启动方法入口main的参数arg…

负载均衡oj项目:介绍

目录 项目介绍 项目演示 项目介绍 负载均衡oj是一个基于bs模式的项目。 用户使用浏览器向oj模块提交代码,oj模块会在所有在线的后端主机中选择一个负载情况最低的主机,将用户的代码提交给该主机,该主机进行编译运行,将结果返回…

gateway 微服务的入口-笔记

本文属于b站图灵课堂springcloud笔记系列。讲的好还不要钱,值得推荐。 为什么需要API网关? 客户端多次请求不同的微服务,会增加客户端代码和配置的复杂性,维护成本比价高认证复杂,每个微服务可能存在不同的认证方式&…

vue2+element-ui实现多行行内表格编辑

效果图展示 当在表格中点击编辑按钮时:点击的行变成文本框且数据回显可以点击确定按钮修改数据或者取消修改回退数据: 具体实现步骤 1. 行数据定义编辑标记 行数据定义编辑标记 当在组件中获取到用于表格展示数据的方法中,针对每一行数据添加一个编辑标记 this.list.f…

安卓主板_MTK联发科android主板方案

在当前智能设备的发展中,安卓主板的配置灵活性和性能优化显得尤为重要。安卓主板的联发科方案,在芯片上,搭载联发科MTK6761、MT8766、MT6765、MT6762、MT8768、MT8390、MTK8370以及MT8788等型号,均基于64位的四核或八核架构设计。…

如何破解“不会写作”的烦恼

在人生的诸多烦恼中,有一种烦恼或许不那么显眼,却常常如影随形,让人倍感困扰——那就是不会写作的烦恼。这不仅仅是对那些以写作为生的人而言,对于每一个需要在学习、工作或生活中以文字表达思想、情感的人来说,不会写…

虚幻5描边轮廓材质

很多游戏内都有这种描边效果,挺实用也挺好看的,简单复刻一下 效果演示: Linethickness可以控制轮廓线条的粗细 这样连完,然后放到网格体细节的覆层材质上即可 可以自己更改粗细大小和颜色

【JavaEE】网络(2)

一、网络编程套接字 1.1 基础概念 【网络编程】指网络上的主机,通过不同的进程,以编程的方式实现网络通信;当然,我们只要满足进程不同就行,所以即便是同一个主机,只要是不同进程,基于网络来传…

RANS(Reynolds-Averaged Navier-Stokes) 湍流模型类型

RANS(Reynolds-Averaged Navier-Stokes) 湍流模型有多种不同的类型,除了标准的 kkk-ω 湍流模型,还有其他一些常用的湍流模型。RANS 模型的核心思想是对 Navier-Stokes 方程进行 雷诺平均,通过将流动场的瞬时变量分解为…

vue绕过rules自定义编写动态校验

今天犯了个低级错误,虽然走了很多弯路,但这个过程还是值得记录一下 例子如下,有两个输入框: 第一个是套餐选择下拉框,可以下拉选择三个内容 第二个要根据上面的套餐选择三个选项来决定怎么显示,使用v-if&…

数字化招聘系统如何帮助企业实现招聘效率翻倍提升?

众所周知,传统的招聘方式已经难以满足现代企业对人才的需求,而数字化招聘系统的出现,为企业提供了全新的解决方案。通过数字化招聘系统,企业可以自动化处理繁琐的招聘流程,快速筛选合适的候选人,从而大幅提…