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 ...
随机推荐
- 对vue双向绑定的思考
对于数组 直接更改数组里面的项的值是不会有view响应的,如: <ul> <li v-for="item in test"> {{ item }} < ...
- 化学元素周期表的英文全称 Periodic Table of the Elements
化学元素周期表的英文全称 Periodic Table of the Elements 缩写 PTE 拉丁文 英文 1 H 氢 Hydrogenium Hydrogen 2 He 氦 Helium ...
- [Python基础]002.语法(1)
语法(1) 变量 基本数据类型 空值 布尔值 数字 字符串 列表 元组 字典 结构嵌套 变量 定义变量 i = 10 这样就定义了一个名为 i 的变量,它的值是 10 . 变量名必须是大小写英文.数字 ...
- [工具-001]C++更换EXE的ICON图标
我们都知道每个可执行文件EXE都会有自己的图标,它可以在项目生成的时候进行指认,但是有时候我们会遇到两种情况:1.没有源代码,2.我们的项目很多,一个个进行更换很耗时.本人就是因为接到这么一个需求,要 ...
- 分布式项目开发-springmvc.xmll基础配置
基础步骤: 1 包扫描 2 驱动开发 3 视图解析器 4 文件上传解析器 5 拦截器 6 静态资源 <beans xmlns="http://www.springframework.o ...
- STM32与匿名上位机通信——使用串口DMA实现
背景:匿名上位机功能强大,这里想要采用匿名上位机输出一些调试信息,以波形的形式显示,方便观察和调试. 平台: 硬件:STM32F405RGT6 通信:2.4G zigbee无线串口收发模块 CC253 ...
- Java分层经验
在学习和使用Java的过程中,我们时常要用到各种工具与技术,它们在某些时候可以大幅度地简化编程,利用好它们,可以让代码更强壮.下面的表格是我总结的关于java开发可能会用到的工具与它们在项目中扮演的角 ...
- Rocket - tilelink - ErrorEvaluator
https://mp.weixin.qq.com/s/NkbW465NAmhDsETksd2M0g 介绍ErrorEvaluator的实现. 1. 基本介绍 ErrorEvalu ...
- JavaScript (二) js的基本语法 - - 运算符、流程控制
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.运算符 1.一元运算符 ++ -- 都是运算符 ++ 和 -- 可以分为:前+ 和后+ and 前- ...
- Java实现 LeetCode 704 二分查找(二分法)
704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1 ...