Appearance
Jar 加密部署
在第三方服务器部署程序,防止程序被窃取,反编译做的jar绑定机器码、jar包加密、代码混淆、时间授权限制
机器码
机器码工具 下载
机器码生成
- 下载jar包到并拷贝到服务器
- 同级目录打开cmd
- 执行
bash
java -jar classfinal-fatjar-1.2.1.jar -C
- classfinal-code.txt 文件内即机器码
jar包加密、绑定机器码
启动项 pom.xml配置
xml
<build>
<plugins>
<plugin>
<!--
1. 加密后,方法体被清空,保留方法参数、注解等信息.主要兼容swagger文档注解扫描
2. 方法体被清空后,反编译只能看到方法名和注解,看不到方法体的具体内容
3. 加密后的项目需要设置javaagent来启动,启动过程中解密class,完全内存解密,不留下任何解密后的文件
4. 启动加密后的jar,生成xxx-encrypted.jar,这个就是加密后的jar文件,加密后不可直接执行
5. 无密码启动方式,java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar
6. 有密码启动方式,java -javaagent:xxx-encrypted.jar='-pwd= 密码' -jar xxx-encrypted.jar
-->
<groupId>net.roseboy</groupId>
<artifactId>classfinal-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<!-- #表示启动时不需要密码,事实上对于代码混淆来说,这个密码没什么用,它只是一个启动密码 -->
<password>#</password>
<excludes>org.spring</excludes>
<!-- 加密的包名,多个包用逗号分开,旧zonetop.gisboot,新的ztgis -->
<packages>zonetop.gisboot,ztgis</packages>
<!-- application.yml 作环境文件加载 加密的配置文件,多个包用逗号分开,文件会被清空 -->
<cfgfiles>application.yml,application-dev.yml,...</cfgfiles>
<!-- jar包lib下面要加密的jar依赖文件,多个包用逗号分开,框架、业务的需要添加,方法体会被清空 -->
<libjars>gis-boot-base-1.0.0.jar,gis-boot-core-1.0.0.jar,.....</libjars>
<!-- 指定机器启动,机器码步骤生成的code,多个环境 建议存储到application-xxx.yml -->
<code>xxxx</code>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>classFinal</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
- libjars 内配置的jar,方法体为空,sql不加密
启动项 application配置
classFinal 加密环境文件,也不允许 application环境配置文件 直接存储在服务器上
需通过application.yml切换打包的环境文件
yml
spring:
#环境 dev|test|pro|preview,可自定义后缀
profiles:
active: house
打包结果
部署,环境文件配置
启用classFinal cfgfiles 会加密环境文件
基于生产环境与测试环境的配置差异,生产环境文件的配置操作如下:
- 使用原包先部署配置
- 生产环境调试好application-xxx.yml后拷贝回项目
- 再重新打包并使用加密的包部署
项目启动
2个包启动有差异,需要修改winsw.xml文件
原包winsw.xml文件
xml
<service>
<!--启动参数-->
<arguments>-Dfile.encoding=utf-8 -jar api.jar --server.port=端口号</arguments>
</service>
加密winsw.xml文件
xml
<service>
<!--使用加密,启动参数-->
<arguments> -Dfile.encoding=utf-8 -javaagent:api.jar -jar api.jar --server.port=端口号</arguments>
</service>
效果
- 机器码不正确
- 未配置: -javaagent:xxx.jar
代码混淆
暂无
计划使用:proguard-maven-plugin
时间限制
有效期:敏感,查看代码规则生成
在程序启动时、接口调用时,做时间授权校验,过期,程序将停止运行
gis-boot
yml
gis-boot:
expiration: 加密后的时间
ztgis-boot
yml
ztgis:
expiration: 加密后的时间
执行效果: