赞
踩
本机环境:Windows10系统
Windows系统下使用Xjar对jar包进行加密:
- <!-- 设置 jitpack.io 仓库 -->
- <repositories>
- <repository>
- <id>jitpack.io</id>
- <url>https://jitpack.io</url>
- </repository>
- </repositories>
-
-
-
- <dependencies>
- <!--导入xjar 对jar包进行加密 -->
- <dependency>
- <groupId>com.github.core-lib</groupId>
- <artifactId>xjar</artifactId>
- <version>4.0.1</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-compress</artifactId>
- <version>1.19</version>
- </dependency>
-
- <dependency>
- <groupId>com.github.core-lib</groupId>
- <artifactId>loadkit</artifactId>
- <version>v1.0.1</version>
- </dependency>
- </dependencies>
由于加密转换代码需要使用go环境,需要部署一下,当然这只是为了对jar包进行加密转换,服务器上无需安装go环境。
下载go安装包:Go下载 - Go语言中文网 - Gong中文社区
安装,一路next直到安装完成
环境部署:
配置环境变量 GOROOT 安装目录:
go version
- package com.example.demo.utils;
-
- import io.xjar.XCryptos;
-
- public class XjarPackage {
- /**
- *jar包加密
- */
- public static void main(String[] args) {
- try {
- XCryptos.encryption()
- .from("D:\\xjar\\加密前\\webdemo-0.0.1-SNAPSHOT.jar")
- // 加密的密码
- .use("123")
- // 要加密的资源
- .include("/**/*.class")
- .include("/**/*.xml")
- .include("/**/*.yml")
- // 加密后的jar,此时:通过jd-gui反编译失败
- .to("D:\\xjar\\加密后\\webdemo-0.0.1-SNAPSHOT.jar");
- System.out.println("加密完成");
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- }
-
-
运行代码后绘制你设置的加密后的文件路径下加密后的文件,此时该jar包内的.class文件双击打开后,不显示内容并且使用反编译工具无法反编译。而且加密后的jar包也无法使用正常的java -jar 命令运行
在加密后的文件夹中进入cmd命令窗口,使用 go build xjar.go 命令创建xjar.exe运行文件
go build xjar.go
使用 xjar java -jar xx.jar 命令即可正常运行jar包了
xjar java -jar xx.jar
将xjar.exe文件和加密后的jar包统一都上传到windows系统的服务器中的同一个路径下,使用该命令即可以正常运行。
正常情况下,我们使用的都是Windows版本,而服务器是Linux版本,而Linux系统无法运行Windows系统生成的.exe文件,因此需要在Linux系统中安装Go环境。再执行加密脚本。
Linux安装Go环境:
1:根据我上面所给的网站下载对应的Linux的版本2:下载完后通过远程工具使用 rz 命令上传到Linux系统中指定路径下
3:在Linux命令行中 cd 到自己选定的目录,执行tar命令进行解压:
tar -C /home/admin/Go -zxvf go1.17.2.linux-amd64.tar.gz
4:添加GO环境(GO的解压路径)到系统变量中:// 这里需要使用root权限,vim进入环境变量中
vim /etc/profile
//输入i进入编辑模式, 在最后一行添加
- export GOROOT=/usr/local/go
- export PATH=$PATH:$GOROOT/bin
//添加完后按esc退出编辑模式,按shift+:再输入wq按回车退出该文件
5:保存后输入source /etc/profile 刷新一下6:执行 go version,即可验证是否安装成功。
将加密后的jar包和.go文件使用rz命令一起上传到指定文件夹下:
1.生成xjar文件go build xjar.go
2:使用以下命令即可成功运行加密后的jar包
./xjar java -jar webdemo-0.0.1-SNAPSHOT.jar
xjar加密,我们追根溯源,查明源码会发现,无法使用java -jar直接运行加密后的jar包的原因是你在加密时候设置了密码,jar包在运行时候就会让你输入正确的密码,输入正确的话也是可以直接运行成功的。
这里的返回值是 AES/CBC/PKCS5Padding 128 128 设置的密码
正确输入这四个参数,也可以正确运行jar包项目(我这边设置的密码是123)
Windows系统启动成功:
Linux系统启动成功:
由此想到平常的压缩包其实也是可以设置密码的,点击查看和解压都需要输入密码才可以,那么这两者有何区别?我能否将jar包也设置成这样添加一个密码,当打开查看和运行时候让输入密码,其实也是可以达成我们想要加密jar包不外泄的目的的。
使用winsw将spring boot项目部署成服务器系统级服务运行开机自启
虽然我们可以将服务在后台不挂断运行,但是难保项目现场会出现断电情况,因此需要设置服务开机自启动。
服务器是Windows系统:
到github上下载 https://github.com/winsw/winsw/releases
xml文件是给的示例使用文件,.exe则根据自己电脑的型号选择对应下载
部署服务:
我将配置文件修改了一下,并且都改名为winsw
- <service>
- <id>webDemo</id>
- <name>webDemo</name>
- <description>一个用来测试的springboot项目</description>
- <executable>java</executable>
- <arguments>-jar D:\xjar\加密后\webdemo-0.0.1-SNAPSHOT.jar</arguments>
- <workingdirectory>D:\xjar\加密后</workingdirectory>
- <log mode="roll"></log>
- </service>
在该目录下启动cmd窗口,输入 winsw install 即可将spring boot服务改为系统级别服务,可以在任务管理器中查看,并启停。或者使用命令行: net start/stop webDemo
删除服务:
在该目录下进入cmd执行命令 winsw uninstall
服务器是Linux系统:
设为系统级服务:
编写启动脚本 vi startup.sh
- //这边使用nohup和后面的>log.log 2>&1& 我在上篇文章有解释,不清楚的同学可以去看一下
- nohup /home/admin/Demo/./xjar java -jar /home/admin/Demo/webdemo-0.0.1-SNAPSHOT.jar >/home/admin/Demo/log.log 2>&1&
执行chmod命令,给startup.sh权限,使该脚本可运行
chmod +777 /home/admin/Demo/startup.sh
编辑/etc/rc.local文件,在末尾加上该脚本路径
/home/admin/Demo/startup.sh
添加完后重启服务器,使用命令查看java服务是否开机自启
ps -ef | grep java
用postman测试服务内的接口发现可以调用
关闭服务:
查看并找到服务的PID:
ps -aux
关闭服务:
kill -9 服务的PID
至此,Windows和Linux两个版本部署java的jar包服务时都可以使用xjar进行加密,再将服务部署成系统级服务,开机自启。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。