Java class 文件安全加密工具对比与ClassFinal实战

news2024/12/23 9:28:41

文章目录

    • 前言
    • 常见加密方案对比
      • XJar
      • ProGuard
      • ClassFinal
    • ClassFinal实战
      • 纯命令方式
      • maven插件方式
    • 写在最后

前言

相信不少的同学开发的软件都是用户商业化,对于这些商业运营的项目很多都会直接部署在客户方,这样就可能会导致项目源码泄露。当然,作为Java语言的搬砖人打的jar包更是如此,可以直接通过GUI反编译轻而易举拿到源码。那么,有没有对我们class文件加密和代码混淆的实战方案呢?答案当然是有的,今天我们就分享一下常规的加密方案。

常见加密方案对比

XJar

Spring Boot JAR 安全加密运行工具,同时支持的原生JAR。
基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动,动态解密运行的方案,避免源码泄露或反编译

功能特性:
无需侵入代码,只需要把编译好的JAR包通过工具加密即可。
完全内存解密,杜绝源码以及字节码泄露或反编译。
支持所有JDK内置加解密算法。
可选择需要加解密的字节码或其他资源文件,避免计算资源浪费。

运行环境:
新版XJar只支持go启动器模式启动加密后的jar包 , 加密后需要go环境生成go启动器 . 运行时不需要go环境。

加密原理:
对jar的字节码加密 , 启动jar包时调用自定义的类加载器, 重写findClass方法,拿到字节流后,先解密再调Classloader的defineClass方法,初始化成Class对象。

加密结果:
加密后的Class不能反编译。
在这里插入图片描述

ProGuard

ProGuard 是一个免费的 Java 类文件的压缩,优化,混淆器。它删除没有用的类,字段,方法与属性。使字节码最大程度地优化,使用简短且无意义的名字来重命名类、字段和方法 。

功能特性:
1、压缩(shrink) 移除未使用的类、方法、字段等;
2、优化(optimize)优化字节码、简化代码等操作;
3、混淆(obfuscate)使用简短的、无意义的名称重全名类名、方法名、字段等;
4、预校验(preverify)为class添加预校验信息。

运行环境:
jdk,不需要额外运行环境。

加密结果:
混淆后的class反编译后都是一些魔法命名字符,增加阅读难度。
在这里插入图片描述

ClassFinal

ClassFinal 是一款 Java class 文件安全加密工具,支持直接加密 jar 包或 war 包,无需修改任何项目代码,兼容 spring-framework,可避免源码泄漏或字节码被反编译。

项目模块说明:
1、classfinal-core: ClassFinalde 的核心模块,几乎所有加密的代码都在这里;
2、classfinal-fatjar: ClassFinal 打包成独立运行的 jar 包;
3、classfinal-maven-plugin: ClassFinal 加密的 maven 插件;

功能特性:
1、无需修改原项目代码,只要把编译好的 jar/war 包用本工具加密即可。
2、运行加密项目时,无需求修改 tomcat,spring 等源代码。
3、支持普通 jar 包、springboot jar 包以及普通 java web 项目编译的 war 包。
4、支持 spring framework、swagger 等需要在启动过程中扫描注解或生成字节码的框架。
5、支持 maven 插件,添加插件后在打包过程中自动加密。
6、支持加密 WEB-INF/lib 或 BOOT-INF/lib 下的依赖 jar 包。

环境依赖:
JDK 1.8 +

本工具使用 AES 算法加密 class 文件,密码是保证不被破解的关键,请保存好密码,请勿泄漏。
密码一旦忘记,项目不可启动且无法恢复,请牢记密码。
本工具加密后,原始的 class 文件并不会完全被加密,只是方法体被清空,保留方法参数、注解等信息,这是为了兼容 spring,swagger 等扫描注解的框架; 方法体被清空后,反编译者只能看到方法名和注解,看不到方法的具体内容;当 class 被 classloader 加载时,真正的方法体会被解密注入。

加密结果:
配置文件反编译后为空
在这里插入图片描述

class文件反编译后直接隐藏方法体
在这里插入图片描述

ClassFinal实战

由于我们不希望引入其他外部依赖环境,遂选择ClassFinal进行代码混淆,可以达到隐藏配置文件内容和清空方法体的效果,即使外部人员拿到源码也不能仿造系统。

纯命令方式

下载工具

https://repo1.maven.org/maven2/net/roseboy/classfinal-fatjar/1.2.1/classfinal-fatjar-1.2.1.jar

参数说明

-file        加密的jar/war完整路径
-packages    加密的包名(可为空,多个用","分割)
-libjars     jar/war包lib下要加密jar文件名(可为空,多个用","分割)
-cfgfiles    需要加密的配置文件,一般是classes目录下的yml或properties文件(可为空,多个用","分割)
-exclude     排除的类名(可为空,多个用","分割)
-classpath   外部依赖的jar目录,例如/tomcat/lib(可为空,多个用","分割)
-pwd         加密密码,如果是#号,则使用无密码模式加密
-code        机器码,在绑定的机器生成,加密后只可在此机器上运行
-Y          无需确认,不加此参数会提示确认以上信息

执行以下命令

java -jar classfinal-fatjar-1.2.1.jar -file yourpaoject.jar -libjars a.jar,b.jar -packages com.yourpackage,com.yourpackage2 -exclude com.yourpackage.Main -pwd 123456 -Y

结果: 生成 yourpaoject-encrypted.jar,这个就是加密后的jar文件;加密后的文件不可直接执行,需要配置javaagent。
在这里插入图片描述

执行jar

java -javaagent:yourpaoject-encrypted.jar='-pwd 123456' -jar yourpaoject-encrypted.jar

maven插件方式

引入ClassFinal插件后直接package即可生成加密包

pom引入插件

<plugin>
    <groupId>net.roseboy</groupId>
    <artifactId>classfinal-maven-plugin</artifactId>
    <version>1.2.1</version>
    <configuration>
        <password>#</password>
        <packages>yourpackage</packages>
        <excludes>org.spring</excludes>
        <cfgfiles>yourconfig</cfgfiles>
        <libjars>yourjar</libjars>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>classFinal</goal>
            </goals>
        </execution>
    </executions>
</plugin>

mvn打包

mvn package -Dmaven.test.skip=true

在这里插入图片描述

反编译jar

配置文件全部清空
在这里插入图片描述

class文件方法体全部清空
在这里插入图片描述

依赖的lib包方法体全部清空
在这里插入图片描述

写在最后

非常重要的项目推荐使用XJar可以完全隐藏Class文件内容,但是需要额外的go环境支持,也可以保守选择ClassFinal直接无侵入达到隐藏方法体和配置文件内容的目的。当然任何的加密和代码混淆的方案都只是增加反编译破解难度,在实际的生产中还需要增加远程鉴权、机器码植入验证、远程依赖加载等等方式保证软件的控制权。

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

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

相关文章

每日一题~中序后序遍历构造二叉树

题目描述&#xff1a; 思路分析&#xff1a; 后序遍历分析图 中序遍历分析图 不难看出后序遍历的结果中的最后一个元素就是根节点&#xff0c;倒数第二个元素则是根节点的右子树的根节点&#xff0c;而倒数第三个元素是右子树的新右子树的根节点&#xff0c;依次类推。我们可…

部署ik分词器

部署ik分词器 案例版本&#xff1a;elasticsearch-analysis-ik-8.6.2 ​ ES默认自带的分词器对中文处理不够友好&#xff0c;创建倒排索引时可能达不到我们想要的结果&#xff0c;然而IK分词器能够很好的支持中文分词 ​ 因为是集群部署&#xff0c;所以每台服务器中的ES都需…

springboot redisTemplate.opsForValue().setIfAbsent返回null原理

一、版本 springboot版本&#xff1a;spring-boot-starter-data-redis 2.1.6 redisson版本&#xff1a;redisson-spring-boot-starter 3.11.5 二、场景 Boolean res redisTemplate.opsForValue().setIfAbsent("key","value");以上代码同一时间多次执行…

【校招VIP】常用产品分析之数值分析能力

考点介绍&#xff1a; 产品的生命周期各个阶段都伴随着产品数据的变化&#xff0c;产品经理根据这些数据来判断产品所在阶段并对后期的产品演进进行合理的规划&#xff1b;在产品需求分析阶段&#xff0c;通过数据分析来鉴别用户需求的真伪&#xff1b;在产品上线后&#xff0c…

向量范数及其Python代码

【向量范数】 向量由于既有大小又有方向&#xff0c;所以不能直接比较大小。 向量范数通过将向量转化为实数&#xff0c;然后进行向量的大小比较。 所以&#xff0c;向量范数是用于度量“向量大小”的量。 设向量 &#xff0c;则有&#xff1a; ● 向量的 范数&#xff1a; ●…

IO和进程day06(线程续、同步线程互斥)

今日任务&#xff1a; 1.代码 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <pthread.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #include <u…

10分钟带你深入理解JavaScript的执行上下文和闭包机制

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 &#x1f4da; 前言 &#x1f4d8; 一. JavaScript中的闭包 &#x1f4d8; 二. 执行上下文与闭包 &#x1f4d…

03-Redis主从架构

上一篇&#xff1a;02-Redis持久化 1.主从架构搭建 配置从节点步骤&#xff1a; 1、复制一份redis.conf文件 2、将相关配置修改为如下值&#xff1a; port 6380 pidfile /var/run/redis_6380.pid # 把pid进程号写入pidfile配置的文件 logfile "6380.log" dir …

使用亚马逊云科技Amazon SageMaker,为营销活动制作广告素材

广告公司可以使用生成式人工智能和文字转图像根基模型&#xff0c;制作创新的广告素材和内容。在本篇文案中&#xff0c;将演示如何使用亚马逊云科技Amazon SageMaker从现有的基本图像生成新图像&#xff0c;这是一项完全托管式服务&#xff0c;用于大规模构建、训练和部署机器…

PPPoE适用于Linux操作系统的指南

欢迎来到本文&#xff0c;亲爱的Linux用户&#xff01;今天&#xff0c;我将为你提供一个完整的指南&#xff0c;教你如何在Linux操作系统上设置和配置PPPoE连接。无需担心复杂性&#xff0c;跟着我一步一步来&#xff0c;你将轻松掌握这一技能&#xff01; 第一步&#xff0c…

工厂除静电除尘设备--离子风枪

静电无处不在&#xff0c;区别在于静电的多少而已。特别是工业生产过程中&#xff0c;大量的静电会有很多危害。 静电的危害有几点&#xff1a;1.引起电子设备的故障或误动作&#xff0c;造成电磁干扰。2.击穿集成电路和精密的电子元件&#xff0c;或使元件老化&#xff0c;拉…

酷开科技打造更好体验服务用户

智能电视以其海量资源、智慧大屏、高清画质等特点在国内快速普及。然而&#xff0c;随着用户量的增加、用户群体的需求多元化&#xff0c;导致消费者对智能电视的应用要求越来越高&#xff0c;不仅希望智能电视内容丰富&#xff0c;最好还能拥有“多合一”的功能。 好在&#…

气传导蓝牙耳机什么牌子好?精选5款值得推荐的气传导耳机分享

​无论是运动爱好者、户外探险家还是上班族&#xff0c;气传导耳机都能带给您全新的聆听体验。但选择一款好的耳机&#xff0c;也不是一件容易的事&#xff0c;市面气传导耳机质量也参差不齐&#xff0c;有很多使用起来不好用。所以小篇从网上精选5款最值得推荐的气传导耳机&am…

个人云存储:使用Cpolar和极简主义文件管理器构建的公网访问平台

文章目录 1. 前言2.Tiny File Manager网站搭建2.1.Tiny file manager下载和安装2.2 Tiny file manager网页测试2.2 Tiny file manager网页测试3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试总结 1. 前言 文件共享和查阅是现在网络最常见的应用场景&am…

搞懂 Prometheus 这四种指标类型,谁都可能成为监控老司机?

指标是用来衡量性能、消耗、效率和许多其他软件属性随时间的变化趋势。它们允许工程师通过警报和仪表盘来监控一系列测量值的演变&#xff08;如CPU或内存使用量、请求持续时间、延迟等&#xff09;。指标在IT监控领域有着悠久的历史&#xff0c;并被工程师广泛使用&#xff0c…

管理类联考——数学——汇总篇——知识点突破——应用题——至少至多

&#x1f434; ⛲️ 一、考点讲解 至少至多问题也属于动态的最值问题&#xff0c;是考生失分率较高的题型&#xff0c;这类题目思路比较灵活&#xff0c;无固定化的公式和结论&#xff0c;所以考生必须灵活处理。 二、考试解读 这类题目难度较大&#xff0c;属于拉分题目。对…

企业综合信息化,人力资源管理,培训考学管理,电子采购(源码系统)

前言&#xff1a; 随着现代信息技术的不断发展&#xff0c;企业综合信息化已成为一种必然趋势。企业综合信息化是指将信息技术与企业业务流程相结合&#xff0c;实现企业资源的优化配置和高效利用&#xff0c;提升企业的竞争力和生产力。在实现企业综合信息化的过程中&#xff…

页面解析之结构化数据

结构化的数据是最好处理&#xff0c;一般都是类似JSON格式的字符串&#xff0c;直接解析JSON数据&#xff0c;提取JSON的关键字段即可。 1、JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式&#xff1b;适用于进行数据交互的场景&#xff0c;比如网站前台…

汇报一下日常健身和锻炼方面的进展

跑步app最终从“咕咚”和“悦跑圈”二选一&#xff0c;锁定到悦跑圈上了。 七月太热&#xff0c;配速下降&#xff0c;但还能玩出花样 八月中旬气温稍降&#xff0c;配速提升&#xff0c;拟合抛物线 截至发博日,实际连续跑步接近600天了 截至发博日&#xff0c;完成2023跑量96…

测评补单:Temu卖家的市场攻略,轻松吸引更多流量和转化!

拼多多通过广告和低价策略的做法迅速拿下了美国市场。在欧美市场取得初步成果后&#xff0c;Temu又踏步走向了其他海外市场。今年7月&#xff0c;Temu先后进入了日本、韩国两地&#xff0c;进军亚洲市场。8月底&#xff0c;Temu又再一次扩张&#xff0c;这次目的地是东南亚。其…