Java Jar 包加密 -- XJar
Java Jar 包加密
一、缘由
Java的 Jar包中的.class文件可以通过反汇编得到源码。这样一款应用的安全性就很难得到保证,别人只要得到你的应用,不需花费什么力气,就可以得到源码。
这时候就需要对jar进行加密处理。
二、技术&工具
XJar
GitHub:https://github.com/core-lib/xjar
码云:https://gitee.com/core-lib/xjar?_from=gitee_search
maven集成 XJar
GitHub:https://github.com/core-lib/xjar-maven-plugin
码云:https://gitee.com/core-lib/xjar-maven-plugin?_from=gitee_search
xjar-agent-hibernate
GitHub:https://github.com/core-lib/xjar-agent-hibernate
码云:https://gitee.com/core-lib/xjar-agent-hibernate?_from=gitee_search
go语言、maven、eclipse
文档可以到github、码云上去了解,这里只描述使用过程,亲测可用!
三、实现过程
这里使用的maven版本是:apache-maven-3.6.3,低版本的没测试过
1、XJar
1-1.在github或码云上下载该项目,导入eclipse,然后新建一个main类,填入参数,直接运行得到一个xjar.go 和 加密后的jar包【xx-encrypted.jar】。
注意:这种直接在项目中跑mian,不提倡,会导致jar包中包含这段代码,导致密码泄露,所以要通过命令行的方式来执行这段代码。


1-2.这时候可以用反编译软件 jb-gui 打开jar看看加密的效果,这时候反编译软件已经看不到.class文件的源码了

1-3.加密后的jar包,不能直接用原来的java 命令来执行,需要用到同时生成的xjar.go文件,执行命令 go build xjar.go
这里要等待一小会,等待编译出目标文件xjar.exe


1-4. 最后执行命令,xjar java -jar /path/to/encrypted.jar,即可运行加密后的jar包
注意:Spring Boot + JPA(Hibernate) 启动会报错
1-5:没有采用 Spring Boot + JPA(Hibernate) 技术的可以略过以下步骤。
a、到码云、GitHub上下载 xjar-agent-hibernate 项目
b、导入eclipse 打包出jar包
c、然后执行命令 xjar java -javaagent:xjar-agent-hibernate-v1.0.0.jar -jar path\wx-encrypted.jar,即可正常运行

2、maven集成 XJar
第二种方式就比较简单了,直接在项目中引入xjar-maven-plugin,然后打包就可以了,其他操作方式和第一种类似
注意:密码最好采用命令行方式
<pluginRepositories>
<pluginRepository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</pluginRepository>
</pluginRepositories>
<plugin>
<groupId>com.github.core-lib</groupId>
<artifactId>xjar-maven-plugin</artifactId>
<version>4.0.</version>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
<phase>install</phase>
<configuration>
<password></password>
<includes>
<!---->
<include>/com/xxx/xxx/**/*.class</include>
</includes>
<!-- 无需加密的资源路径表达式 -->
<excludes>
<exclude>static/**</exclude>
<exclude>META-INF/resources/**</exclude>
</excludes>
<!-- 源jar所在目录 -->
<sourceDir>path\</sourceDir>
<!-- 源jar名称 -->
<sourceJar>xxx.jar</sourceJar>
<!-- 目标jar存放目录 -->
<targetDir>path\test2</targetDir>
<!-- 目标jar名称 -->
<targetJar>xxx-encrypted.jar</targetJar>
</configuration>
</execution>
</executions>
</plugin>
四、后记
其实所有软件,都可以被破解,只是破解过程是简单还是复杂、以及破解成本的高低。
最关键的还是自己软件要更新迭代的快,这样才能把模仿者远远甩在身后。
转发请注明出处!!!
Java Jar 包加密 -- XJar的更多相关文章
- java:编写jar包加密工具,防止反编译
懒人方案 网盘: 链接:https://pan.baidu.com/s/1x4OB1IF2HZGgtLhd1Kr_AQ提取码:glx7 网盘内是已生成可用工具,下载可以直接使用,使用前看一下READ. ...
- java的jar包加密
由于项目要求(虽然我觉得代码没什么机密可言...),写好的jar包需要做一定加密处理 这里提供两种办法,一种奇葩,一种通用 1. 直接修改jar文件: 具体步骤: 在代码中插入一段不会运行的到的代码 ...
- 实用的jar包加密方案
前言 jar包相信大家都很熟悉,是通过打包java工程而获得的产物,但是jar包是有一个致命的缺点的,那就是很容易被反编译,只需要使用jd-gui就可以很容易的获取到java源码. 如果你想要防止别人 ...
- [原创] 如何用Eclispe调试java -jar xxx.jar 方式执行的jar包
有时候,我们经常会需要调试 java -jar xxx.jar方式运行的代码,而不是必须在Eclipse中用Debug或者Run的方式运行.比如我们拿到的SourceCode不完整.Java提供了一种 ...
- java -jar 执行 eclipse export 的 jar 包报错处理
1. 错误1:打 jar 包执行,报错,找不到 类库的 jar 包 F:\>java -jar remoteLogin.jarException in thread "AWT-Even ...
- 设置 java -jar 的进程显示名称
有时候我们会用 nohup java -jar xxx.jar来将一些可执行的java application挂在后台,类似windows服务一样来运行.但是有一个不爽的地方,在linux终端里用jp ...
- java -jar jenkins.war
//设置jenkins主目录,并启动 #! /bin/sh CurrentDir=`dirname $` export JENKINS_HOME=$CurrentDir/jenkins_home ec ...
- Java jar命令 常见用法
一.jar命令作用: 进行打包 -- 把多个文件打包成一个压缩包 -- 这个压缩包和Winzip的压缩格式是一样的. 区别在于jar压缩的文件默认多一个META-INF的文件夹,该文件夹下包含一个Ma ...
- 【JavaService】部署Java jar为Windows后台服务
将Java jar文件部署为Windows后台服务有多种方法:Service Installer.Java service Wrapper.JavaService.exe等等.这里介绍下使用JavaS ...
随机推荐
- idea打印中文乱码
一.问题情况: IntelliJ IDEA 控制台输出中文乱码部分如图所示: 二.解决方法: 1.打开tomcat配置页面,Edit Configurations. 2.选择项目部署的tomcat,在 ...
- Java8中的Lambda表达式
Lambda是什么 Lambda表达式,也可称为闭包,是java8的新特性,作用是取代大部分内部类,优化java代码结构,让代码变得更加简洁紧凑. Lambda的基本语法 (expression)-& ...
- [基础-001]C++字符串转换(char*,const char*,string)
1. string转const char* string str ="abc"; const char* charArr = str.c_str(); 2. const char* ...
- Python 每日一练(2)
引言 我又双叒叕的来啦,新博客的第二篇文章,这次是继之前公众号上每日一练的第二个,这次是专题实对于文件的一些处理的练习 主要有以下几类: 1.实现英文文章字频统计 2.统一剪裁某一指定目录下的所有图片 ...
- 【书签】stacking、blending
读懂stacking:模型融合Stacking详解/Stacking与Blending的区别 https://blog.csdn.net/u014114990/article/details/5081 ...
- 【LINQ标准查询操作符总结】之聚合操符
C# 中的LINQ 提供了两种操作方式,查询表达式和查询操作符,所有的查询表达式都有对应的查操作符类替代,查询表达式有点“类” SQL,在代码中写SQL,总觉得不够“优雅”,使用查询操作符就显得“优 ...
- 【汇总】 为园友写的皮肤制作工具 awescnb
Awescnb, awesome cnblog. 简介 可能许多初来乍到的新手会被博客园经典的风格劝退,或者您是一个老园友,需要为您的博客定制一些功能(例如宣传公众号,文章目录.或者插入几个捐助二维码 ...
- StackOverflow 创始人关于如何高效编程的清单.md
这是 StackOverflow 联合创始人 Jeff Atwood 注释的十戒.程序员普遍有很强的自尊心,都应该看看本文,打印下来时刻提醒自己. "无我编程"发生在开发阶段,表现 ...
- Java实现 LeetCode 面试题62. 圆圈中最后剩下的数字(约瑟夫环)
面试题62. 圆圈中最后剩下的数字 0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 例如,0.1.2.3.4这5个数字组成一个圆 ...
- Java实现洛谷 P1062 数列
P1062 数列 import java.util.ArrayList; import java.util.Scanner; public class Main { public static voi ...