Java Class 加密工具 ClassFinal
Jar包加密工具 ClassFinal
- 介绍
- 环境依赖
- 使用说明
- 下载
- 加密
- 命令行
- 示例
- maven插件方式
- 无密码模式
- 机器绑定
- 启动加密后的jar
- 启动参数给密码
- 不加密码参数直接启动
- 1. 密码文件获取
- 2. 交互输入
- 参考资料
介绍
- ClassFinal 是一款 java class 文件安全加密工具,支持直接加密
jar
包或war
包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译。 - 加密后,原始的
class
文件中方法体被清空,当class
被classloader
加载时,真正的方法体会被解密注入。
为兼容spring
,swagger
等扫描注解的框架,故而保留了方法参数
、注解
等信息;反编译者只能看到方法名和注解; - 注意:为了保证项目在运行时的安全,启动jvm时请加参数:
-XX:+DisableAttachMechanism
。
此参数的含义是禁用JVM的附加机制。在JVM中,有一个附加机制可以让外部进程通过Java Debug Wire Protocol(JDWP)协议附加到正在运行的Java进程上,从而获得进程的调试信息。这个机制在调试和诊断Java应用程序时非常有用。
然而,在某些情况下,禁用这个机制可以提高Java应用程序的安全性。例如,如果您希望限制外部进程对正在运行的Java进程的访问,或者想要确保Java进程不会被未经授权的用户附加和调试,您可以使用这个参数来禁用JVM的附加机制。当使用这个参数时,JVM将不再响应任何附加请求,从而防止外部进程通过JDWP协议附加到正在运行的Java进程上。
例:java -XX:+DisableAttachMechanism -jar MyApp.jar
环境依赖
JDK 1.8 +
使用说明
下载
点此下载
加密
命令行
执行以下命令
java -jar classfinal-fatjar.jar -file jerry.jar -libjars a.jar,b.jar -packages com.jerry1,com.jerry2 -exclude com.jerry.Main -pwd 123456 -Y
参数说明
-file 加密的jar/war完整路径
-packages 加密的包名(可为空,多个用","分割)
-libjars jar/war包lib下要加密jar文件名(可为空,多个用","分割)
-cfgfiles 需要加密的配置文件,一般是classes目录下的yml或properties文件(可为空,多个用","分割)
-exclude 排除的类名(可为空,多个用","分割)
-classpath 外部依赖的jar目录,例如/tomcat/lib(可为空,多个用","分割)
-pwd 加密密码,如果是#号,则使用无密码模式加密
-code 机器码,在绑定的机器生成,加密后只可在此机器上运行
-Y 无需确认,不加此参数会提示确认以上信息
结果: 生成加密后的jar文件 jerry-encrypted.jar
。执行时需带 javaagent
参数。
注: 也可以直接执行 java -jar classfinal-fatjar.jar 以交互式操作。
示例
我的jar包:jerry.jar
,密码123456
java -jar classfinal-fatjar-1.2.1.jar -file jerry.jar -packages com.jerry -pwd 123456 -Y
=========================================================
= =
= Java Class Encryption Tool v1.2.1 by Mr.K =
= =
=========================================================
加密信息如下:
-------------------------
1. jar/war路径: jerry.jar
2. lib下的jar:
3. 包名前缀: com.jerry
4. 排除的类名:
5. 加密配置文件:
6. ClassPath:
7. 密码: 123456
8. 机器码:
-------------------------处理中...
加密完成,请牢记密码!
==>jerry-encrypted.jar
maven插件方式
在要加密的项目pom.xml中加入以下插件配置,目前最新版本是:1.2.1。
<build><finalName>${project.artifactId}</finalName><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>jerry</password><!-- 需要加密的包。多个以逗号,分割 --><packages>com.classfinal</packages><!-- 需要加密的配置文件。多个以逗号,分割 --><cfgfiles>bootstrap.yml,application.yml</cfgfiles><!-- 不想要加密的jar包。多个以逗号,分割 --><excludes>org.spring</excludes><!-- 加密依赖的第三方jar包。多个以逗号,分割 --><libjars>jerry-common-core-0.0.1.jar,jerry-common-redis-0.0.1.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 插件的参数名称与直接运行的参数相同,请参考上节的参数说明。
无密码模式
- 加密时
-pwd
参数设为#
,启动时可不用输入密码;(linux 下面#
需要转义-pwd \#
) - 如果是war包,启动时指定参数
-nopwd
,跳过输密码过程。
机器绑定
机器绑定只允许加密的项目在特定的机器上运行;
加密时用 -code
指定机器码。机器绑定可同时支持机器码
+密码
的方式加密。
在需要绑定的机器上执行以下命令,生成机器码
java -jar classfinal-fatjar.jar -C
启动加密后的jar
加密后的项目需要设置 javaagent
来启动,项目在启动过程中解密class,完全内存解密,不留下任何解密后的文件。
解密功能已经自动加入到 yourpaoject-encrypted.jar
中,所以启动时 -javaagent
与 -jar
相同,不需要额外的jar包。
密码读取顺序:
参数获取
>> 环境变量获取
>> 密码文件获取
>> 控制台输入
>> GUI输入
>> 退出
启动参数给密码
启动jar项目执行以下命令:注意:如果是win系统 "-pwd 0000000"
这里要用双引号。
java -javaagent:jerry-encrypted.jar="-pwd 0000000" -jar jerry-encrypted.jar//参数说明
// -pwd 加密项目的密码
// -pwdname 环境变量中密码的名字
不加密码参数直接启动
1. 密码文件获取
java -javaagent:yourpaoject-encrypted.jar -jar yourpaoject-encrypted.jar
不加 pwd
参数直接启动,优先从密码文件
读取。
在同级目录下的classfinal.txt
或jerry-encrypted.classfinal.txt
中写入密码。
直接给密码:classfinal.txt
123456
参数化配置启动后删除:classfinal.txt
--pwd 123456 --del yes
这里的del
只要不给false
或no
都会删除。
项目读取到密码后会清空此文件。
2. 交互输入
没有找到 密码文件
就会进入交互输入模式:先控制台输入
还是没给密码就会进入 GUI输入
模式,都不给密码,就报错退出了。
- 控制台输入
- GUI输入
参考资料
Gitee: https://gitee.com/roseboy/classfinal
Java Class 加密工具 ClassFinal相关推荐
- Java MD5加密工具
1.基本原理 MD5加密算法,其全称是Message-Digest Algorithm 5,通常被称为信息摘要算法,所谓的信息摘要就是把明文内容按一定规则生成一段哈希(hash)值,即得到这段明文内容 ...
- Java之加密工具类java.security.MessageDigest或org.apache.commons.codec.digest.DigestUtils
Java之加密(信息摘要)工具类(依赖:java.security.MessageDigest或org.apache.commons.codec.digest.DigestUtils) 1. java ...
- java 在线rsa解密_通用的Java RSA加密工具类,可在线验证通过
/** * RSA加密工具类 * 使用PKCS1_PADDING填充,密钥长度1024 * 加解密结果在这里测试通过:http://tool.chacuo.net/cryptrsaprikey * 注 ...
- 【Jasypt】Java 轻量级加密工具实现代码数据库账号密码加密
前言 对很多人来说,项目中习惯会把数据库的账号密码直接用明文写在配置文件中,其实这样并不是特别好,虽然是方便查看,但是也不太安全.所以这篇文章主要是一款轻量级加密工具的使用介绍. 参考资料 Jasyp ...
- java des 加密工具的使用,Java中DES加密解密工具类的实现实例
这篇文章主要介绍了Java实现的DES加密解密工具类,结合具体实例形式分析了Java实现的DES加密解密工具类定义与使用方法,需要的朋友可以参考下 本文实例讲述了Java实现的DES加密解密工具类.分 ...
- Java AES加密工具类
import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import jav ...
- java md5 加密工具类_JavaMD5加密工具类
package com.iyuba.mytablayout.utils; import java.io.UnsupportedEncodingException; import java.securi ...
- ClassFinal 加密 Java class文件工具
ClassFinal是一款Java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework,可避免源码泄漏或字节码被反编译 模块说明 c ...
- 加密工具类 - CryptoUtils.java
加密工具类,包含MD5,BASE64,SHA,CRC32的加密与解密方法. 源码如下:(点击下载 - CryptoUtils.java.commons-io-2.4.jar.commons-code ...
最新文章
- AI in 美团:吃喝玩乐背后的黑科技
- 清华学长免费分享Java基础核心知识大总结(1)
- 用户界面线程AfxBeginThread的使用
- 关于string的成员函数substr
- Eclipse搭建Android5.0应用开发环境 “ndk-build”:launchingfailed问题解决
- (chap6 Http首部) 请求首部字段 Max-ForwardsProxy-Authorization Range
- Java进阶:ReentrantLock和Condition基本使用
- P2324 骑士精神
- app测试之耗电量测试
- 没有网也可以安装 Conda 环境
- Web安全笔记-Fidder与浏览器找关键Cookie(Cookie劫持前的准备)
- Atitit 纯java项目的提升进度大法---通用json dsl接口
- [Python]一步步安装numpy,matplotlib
- sql语句查询优化总结,建议及写法技巧(汇总)
- 端到端矢量化高清地图学习框架VectorMapNet
- 计算机机考试卷分析,考试试卷分析与反思
- dll中封装MFC(VC2012)资源--自定义一个复用的登录界面
- 企业信息化建设的总体规划
- java md5在线解密免费_Java MD5如何解密?
- How to learn Japanese ?