java代码混淆工具ProGuard混淆插件

news2024/12/23 17:06:00

java代码混淆工具ProGuard混淆插件

介绍

ProGuard是一个纯java编写的混淆工具,有客户端跟jar包两种使用方式。可以将程序打包为jar,然后用工具进行混淆,也可以在maven中导入ProGuard的插件,对代码进行混淆。

大家都知道
java代码可以反编译,因此有时候要保护自己的知识产权还真得费点心思,一般来说有三个思路:

  • 1、将class文件加密,这个是最安全的,但也费事儿,因为要重写classloader来解密class文件;
  • 2、使用花指令,使得class文件不能反编译(利用反编译工具漏洞);安全性一般,还是有花指令破解器;
  • 3、代码混淆,提高代码阅读成本;简单易操作,一般采用这种或者与其它方式结合;

maven项目引入插件

pom.xml

<plugins>
<!-- ProGuard混淆插件-->
			<plugin>
				<groupId>com.github.wvengen</groupId>
				<artifactId>proguard-maven-plugin</artifactId>
				<version>2.0.14</version>
				<executions>
					<execution>
						<!-- 混淆时刻,这里是打包的时候混淆-->
						<phase>package</phase>
						<goals>
							<!-- 使用插件的什么功能,当然是混淆-->
							<goal>proguard</goal>
						</goals>
					</execution>
				</executions>
				<configuration>
					<!-- 是否将生成的PG文件安装部署-->
					<attach>true</attach>
					<!-- 是否混淆-->
					<obfuscate>true</obfuscate>
					<!-- 指定生成文件分类 -->
					<attachArtifactClassifier>pg</attachArtifactClassifier>
					<options>
						<!-- JDK目标版本1.8-->
						<option>-target 1.8</option>
						<!-- 不做收缩(删除注释、未被引用代码)-->
						<option>-dontshrink</option>
						<!-- 不做优化(变更代码实现逻辑)-->
						<option>-dontoptimize</option>
						<!-- 不路过非公用类文件及成员-->
						<option>-dontskipnonpubliclibraryclasses</option>
						<option>-dontskipnonpubliclibraryclassmembers</option>
						<!--不用大小写混合类名机制-->
						<option>-dontusemixedcaseclassnames</option>

						<!-- 优化时允许访问并修改有修饰符的类和类的成员 -->
						<option>-allowaccessmodification</option>
						<!-- 确定统一的混淆类的成员名称来增加混淆-->
						<option>-useuniqueclassmembernames</option>
						<!-- 不混淆所有包名-->
						<option>-keeppackagenames</option>
						<option>-keepdirectories</option>

						<!-- 需要保持的属性:异常,注解等-->
						<option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod</option>
						<option>-keep class javax.annotation.**</option>
						<option>-dontwarn javax.crypto.**</option>
						<option>-keep class javax.crypto.**</option>
					</options>

					<outjar>${project.build.finalName}-pg.jar</outjar>
					<libs>
						<lib>${java.home}/lib/rt.jar</lib>
					</libs>
					<!-- 对什么东西进行加载,这里仅有classes成功,毕竟你也不可能对配置文件及JSP混淆吧-->
					<injar>classes</injar>
					<!-- 输出目录-->
					<outputDirectory>${project.build.directory}</outputDirectory>
				</configuration>
			</plugin>
</plugins>

打包生成混淆jar包

mvn clean install -Dmaven.test.skip=true

在这里插入图片描述

在target目录会生成classes-pg.jar就是混淆后的jar包

部署

可以把jar包名修改为和spring包命名类似, 或者直接在spring源代码里加限制代码,然后打包

参考链接:
https://blog.csdn.net/sinat_35100573/article/details/51833294
https://www.cnblogs.com/nevermorewang/p/8041548.html
https://blog.csdn.net/sqzhao/article/details/50627920
https://blog.csdn.net/wltj920/article/details/48970869
https://blog.csdn.net/qysh123/article/details/17786163

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

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

相关文章

【SQL】SQL常见面试题总结(1)

目录 1、检索数据1.1、从 Customers 表中检索所有的 ID1.2、检索并列出已订购产品的清单1.2、检索所有列 2、排序检索数据2.1、检索顾客名称并且排序2.2、对顾客 ID 和日期排序2.3、按照数量和价格排序2.4、检查 SQL 语句 3、过滤数据3.1、返回固定价格的产品3.2、返回产品并且…

基于Vue和uni-app的增强型单选ccRadioView组件开发

标题&#xff1a;基于Vue和uni-app的增强单选组件ccRadioView的设计与实现 摘要&#xff1a;本文将详细介绍如何使用Vue和uni-app构建一个简单、好用且通用的单选框组件ccRadioView。该组件提供了单选列表的功能&#xff0c;并支持反向传值&#xff0c;方便开发者快速实现单选…

新人学习笔记值(初始JavaScript)

一、Java Script是什么 1.Java Script是世界上最流行的语言之一&#xff0c;是一种运行在客户端的脚本语言&#xff08;script是脚本的意思&#xff09; 2.脚本语言&#xff1a;不需要编译&#xff0c;运行过程中由js解释器&#xff08;js引擎&#xff09;进行解释并运行 3.现在…

如何同步管理1000个设备的VLAN数据?

什么是VLAN&#xff1f; VLAN&#xff0c;也就是虚拟局域网&#xff0c;是通过为子网提供数据链路连接来抽象出局域网的概念。在企业网中&#xff0c;一个企业级交换机一般是24口或者是48口&#xff0c;连接这些接口的终端在物理上形成一个广播域。广播域过大&#xff0c;就会导…

docker镜像中搭建FastDfs

docker镜像中搭建FastDfs 一、搭建过程二、docker端口映射三、映射的方法三、配置Tracker 和 Storage 环境&#xff1a;腾讯云服务器上 ubuntu20.04镜像 一、搭建过程 正常直接在云服务器上搭建过程参考博客&#xff1a; https://blog.csdn.net/qq_38531706/article/details/…

基于51单片机的AD/DA转换的串口通信proteus仿真(附源码)

文章目录 一、前言二、PCF85911.介绍2.原理图3.引脚介绍 三、仿真图1.未仿真时2.仿真时 四、仿真程序main.cIIC.c 五、总结 一、前言 AT89C52是一款经典的8051系列单片机&#xff0c;它通常不包含内置的模数转换器&#xff08;ADC&#xff09;或数字模拟转换器&#xff08;DAC…

模版方法详解

模板方法模式 1 概述 在面向对象程序设计过程中&#xff0c;程序员常常会遇到这种情况&#xff1a;设计一个系统时知道了算法所需的关键步骤&#xff0c;而且确定了这些步骤的执行顺序&#xff0c;但某些步骤的具体实现还未知&#xff0c;或者说某些步骤的实现与具体的环境相…

DS高阶:跳表

一、skiplist 1.1 skiplist的概念 skiplist本质上也是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树和哈希表的价值是一样的&#xff0c;可以作为key或者key/value的查找模型。skiplist是由William Pugh发明的&#xff0c;最早出现于他在1990年发…

SOLIDWORKS科研版的优势

随着科技的不断进步&#xff0c;科研领域对于快捷、准确和可视化的需求也在不断增长。在这个背景下&#xff0c;SOLIDWORKS科研版应运而生&#xff0c;为科研人员提供了一款强大的工具&#xff0c;帮助他们解决复杂的问题&#xff0c;提高研究效率。 首先&#xff0c;SOLIDWOR…

贷款借钱平台 贷款源码 小额贷款系统 卡卡贷源码 小额贷款源码 贷款平台

贷款平台源码/卡卡贷源码/小贷源码/完美版 &#xff0c; 数据库替换application/database.php 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89268533 更多资源下载&#xff1a;关注我。

镜像抑制和镜像衰减有什么不同

在很多无线产品接收机手册中&#xff0c;我们会看到两个参数&#xff0c;一个是镜像抑制&#xff08;Image Rejection&#xff09;&#xff0c;另一个是镜像衰减&#xff08;Image Attention&#xff09;&#xff0c;但这两者究竟有什么不同&#xff0c;一直比较疑惑&#xff0…

Microsoft 安全Copilot:适时而生的得力工具

随着数字化转型的加速&#xff0c;网络安全威胁日益增多&#xff0c;Microsoft Copilot for Security的出现恰逢其时&#xff0c;它将帮助我们更好地应对这些挑战&#xff0c;保护我们的数据和系统免受攻击。 ✦什么是Microsoft 安全Copilot✦ 概述 Microsoft 安全 Copilot 是…

Docker 的 RHEL 操作系统镜像

CentOS 和 Fedora 都是和 RHEL 同源衍生版本的 Linux&#xff0c;因为 CentOS 不需要向 RHEL 支付企业级的版权和费用&#xff0c;但是又具有和 RHEL 相同的稳定性和资源库。 所以 CentOS 在服务器上被广泛的部署和使用&#xff0c;但是 CentOS 目前已经停止技术支持和结束了生…

Nerf基础学习记录

笔记 什么是nerf一些值得注意的理论点 什么是nerf Nerf 是可以理解成是一种隐式的3D表达方式。 隐式表达可以理解成是用一个条件或者方程来表示一个3D几何&#xff0c;没有实实在在的几何形状。相反&#xff0c;显式表达就诸如mesh, 点云&#xff0c;体素这类的&#xff0c;能…

【if条件、for循环、数据框连接、表达矩阵画箱线图】

编程能力&#xff0c;就是解决问题的能力&#xff0c;也是变优秀的能力 From 生物技能树 R语言基础第七节 文章目录 1.长脚本管理方式if(F){....}分成多个脚本&#xff0c;每个脚本最后保存Rdata&#xff0c;下一个脚本开头清空再加载 2.实战项目的组织方式方法&#xff08;一&…

CTFshow misc

第一题1 打开图片直接就是flag 第二题0 放入010发现文件头有png 更换后缀 获得flag 第三题1 下载之后发现是bpg后缀 用在线工具转换为png获得flag 第四题 0 把六个文件后缀都改为png即可获得flag

springboot005学生心理咨询评估系统

springboot005学生心理咨询评估系统 亲测完美运行带论文&#xff1a;获取源码&#xff0c;私信评论或者v:niliuapp 运行视频 包含的文件列表&#xff08;含论文&#xff09; 数据库脚本&#xff1a;db.sql其他文件&#xff1a;ppt.ppt论文&#xff1a;开题.doc论文&#xf…

二.使用PgAdmin连接Postgresql

二.使用PgAdmin连接Postgresql PostgreSQL是一种开源的对象关系型数据库管理系统(ORDBMS),它支持大部分SQL标准并提供了许多高级功能,例如事务、外键、视图、触发器等。PostgreSQL由PostgreSQL全球开发组维护和开发,它是一种高度可扩展的数据库系统,可以在各种操作系统…

Java | Leetcode Java题解之第91题解码方法

题目&#xff1a; 题解&#xff1a; class Solution {public int numDecodings(String s) {int n s.length();// a f[i-2], b f[i-1], cf[i]int a 0, b 1, c 0;for (int i 1; i < n; i) {c 0;if (s.charAt(i - 1) ! 0) {c b;}if (i > 1 && s.charAt(i …

49-Qt控件详解:ltemViewsltemWidgets

1.List View:清单视图 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QListView> //字符串列表模型 #include <QStringListModel> #include <QMessageBox> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEcl…