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 ...
随机推荐
- 【QT】QT资料集锦
欢迎来到我的博客! 以下链接均是日常学习,偶然得之,并加以收集整理,感兴趣的朋友可以多多访问和学习.如果以下内容对你有所帮助,不妨转载和分享.(Update on 30,November,2019) ...
- 几种常见的app推广形式
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 集合概述及Collection接口的常用方法
java集合像是一种容器,可以动态的把多个对象的引用放到容器中 java的集合类可以用于存储数量不等的多个对象,还可以用于保存具有映射关系的关联数组 package com.aff.coll; imp ...
- 一篇文章,全面掌握Git
版本控制 版本控制就是记录项目文件的历史变化.它为我们查阅日志,回退,协作等方面提供了有力的帮助. 版本控制一般分为集中化版本控制和分布式版本控制. 集中化主要的版本数据都保存服务端. 分布式版本数据 ...
- Ubuntu18.04兼容Python2.7、Python3.6、Python3.8以及pip、pip2、pip3问题
Ubuntu18.04兼容Python2.7.Python3.6.Python3.8以及pip.pip2.pip3问题 此为记录我重装Ubuntu后安装Python的过程 安装Python3.8 目前 ...
- 分布式事务解决方案Seata
Seata全称是Simple Extensible Autonomous Transaction Architecture,是由阿里巴巴开源的具有高性能和易用性的分布式事务解决方案. 微服务中的分布式 ...
- PYTHON-函数调用函数名
def fun1(x): print('......................') x() def fun2(): print('**********************') fun1(fu ...
- Username for 'https://github.com': remote: Invalid username or password. fatal: Authentication failed for 'https://github.com/GLSmile/pythontest.git/' 问题
使用$ git push -u origin master 进行同步时,提示输入用户名和密码,但是我输入正确的信息后,仍然 会报Username for 'https://github.com': r ...
- java eclipse tomcat
Port 8080 required by Tomcat v9.0 Server at localhost is already in use. The server may already be r ...
- Java实现 蓝桥杯VIP 算法提高 交换Easy
算法提高 交换Easy 时间限制:1.0s 内存限制:512.0MB 问题描述 给定N个整数组成的序列,每次交换当前第x个与第y个整数,要求输出最终的序列. 输入格式 第一行为序列的大小N(1< ...