文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JavaClass加密工具ClassFinal详解

2023-03-20 11:12

关注

Jar包加密工具 ClassFinal

介绍

此参数的含义是禁用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 插件的参数名称与直接运行的参数相同,请参考上节的参数说明。

无密码模式

机器绑定

机器绑定只允许加密的项目在特定的机器上运行;
加密时用 -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.txtjerry-encrypted.classfinal.txt中写入密码。

直接给密码:classfinal.txt

123456

参数化配置启动后删除:classfinal.txt

--pwd 123456 --del yes

这里的del只要不给falseno都会删除。

项目读取到密码后会清空此文件。

2. 交互输入

没有找到 密码文件 就会进入交互输入模式:先控制台输入还是没给密码就会进入 GUI输入模式,都不给密码,就报错退出了。

控制台输入

在这里插入图片描述

GUI输入

在这里插入图片描述

参考资料

Gitee: https://gitee.com/roseboy/classfinal

到此这篇关于Java Class 加密工具 ClassFinal的文章就介绍到这了,更多相关java加密class内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯