Java加密License认证Proguard代码混淆防反编译防逆向工程

请加qq索取源码(* ̄︶ ̄): 1139162887

一、背景介绍

使用Java语言开发的软件产品(2B产品,客户环境本地安装),进行市场推广时,需要对客户的安装环境进行License授权:

  • 绑定服务器MAC地址,防止软件被复制滥用
  • 限制用户数量,保护商业版本
  • 规定软件使用期限,实现商业可持续
  • 重申软件知识归属权
  • 禁止反编译、篡改或逆向工程等侵犯版权的行为
  • 等等

因此编证书注入工具,下面简称本工具。

本工具的功能特性:

  • 支持生成授权证书的功能
  • 支持零侵入式注入【证书校验】逻辑功能
  • 支持lib目录下依赖的子模块jar包内的class,合并到SpringBoot far jar主包中
  • 支持proguard代码混淆功能(可关闭),保护核心代码逻辑和证书校验逻辑
  • 支持xjar字节码加密功能(可关闭),实现防反编译、逆向工程等侵权行为

说明:零侵入式注入【证书校验】逻辑注入功能,无需改源码、无需改配置、无需使用maven插件等,只需要提供jar包即可,可以是SpringBoot fat jar,也可以是普通工具jar。

校验证书信息

二、本工具使用步骤

1、安装JDK,并配置环境变量

本工具开发时,使用的版本:JDK 17

注:配置环境变量后,可能需要重启IDE

2、安装proguard,并配置环境变量

本工具开发时,使用的版本:proguard 7.4.2

注:配置环境变量后,可能需要重启IDE

3、安装Golang并配置环境变量

本工具开发时,使用的版本:go1.21.6

注:配置环境变量后,可能需要重启IDE

4、编译构建打包license-core

必须构建,后续使用license-tool对目标产品jar包进行字节码注入时,会将本模块的class、依赖lib,自动拷贝到目标产品的jar包中。

cd license-inject/license-core/
 mvn clean package -DskipTests=true

5、编译打包springboot2-demo

用于演示license-tool模块中的测试用例,如果不需要可以不构建

cd license-inject/springboot2-demo/
 mvn clean package -DskipTests=true

6、对springboot2.jar注入字节码、代码混淆、生成xjar

参考license-tool模块中的测试用例,结合产品的自身情况进行修改:

  • 修改要进行字节码注入的类、方法信息
  • 修改lib目录下依赖包要合并到主包的信息(proguard只能混淆主包中的class,lib目录下的子模块jar包暂无法修改)
  • 修改proguard.cfg配置文件的地址
  • 修改xjar字节码的加密密码
  • 等等

执行测试用例后,生成的内容说明:

./springboot2.jar 原软件产品jar
./inject/springboot2.jar  字节码注入、proguard代码混淆后的jar
./inject/xjar/springboot2.jar 字节码注入、proguard代码混淆、xjar字节码加密后的jar
./inject/xjar/xjar.go Go启动器源码文件 
./inject/xjar/xjar_agentable.go Go启动器源码文件 

编译生成的xjar启动器, linux(x86/arm) 、windows请分别编译:

go build xjar.go

7、生成许可证密钥

使用JDK自带的 keytool生成密钥对

# 进入JDK的bin目录
cd ${JAVA_HOME}\bin

#1 、生成密钥对,包含私钥和公钥。
keytool -genkey -keysize 1024 -keyalg DSA -validity 3650 -alias "myPrivateAlias" -keystore "myPrivateKeys.keystore" -storepass "abc123" -keypass "prv123" -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN"
# 查看
keytool -list -v -keystore myPrivateKeys.keystore -storepass "abc123"


# 导出公钥证书
keytool -exportcert -alias "myPrivateAlias" -keystore "myPrivateKeys.keystore" -storepass "abc123" -file "myCertfile.cer"
# 导入公钥(这一个命令在客户端执行)
keytool -import -alias "myPublicAlias" -file "myCertfile.cer" -keystore "myPublicCerts.keystore" -storepass "abc123"
# 查看公钥
keytool -list -v -keystore myPublicCerts.keystore -storepass "abc123"


# 删除私钥
keytool -delete -alias myPrivateAlias -k
众所周知,java开发语言提供了很方便的开发平台,而且开发出来的程序很容易在不同的平台上面进行移植,现在越来越多的人使用它开发软件。 Java有了它方便的一个方面,但是他同时也带给了开发者一个烦恼,这就是保护的办法不多,而且大多数不是很好用,这样自己辛苦开发出来的程序很容易被人反编译过来而据为己有,一般情况下,大多数的人都是用混编器(java obfuscator)来把开发出来的程序进行打乱以达到没有办法来反编译观看源代码,但是这种办法在网上很容易找到相关的软件来重新整理,那么这个混编只能控制一些本来也没有办法动您的软件的人,而对于一些掌握工具的人几乎是透明的,还有就是利用硬件加密锁,但大多数公司提供的硬件加密锁只是提供了一些dll的连接或简单的api调用,只要反编译他们,就很容易把一些api调用去掉,这样硬件加密锁也就不起作用了,但是现在到底有没有好的办法呢? 市场上现有的几款止反编译工具其实都是改进了加载过程。但是加载到JAVA虚拟机后一样可以得到CLASS字节码的。 只要懂JAVA原理的人其实很用意破解的. JAVACOMPILE 这款工具就不一样了,javacompile 它是修改了虚拟机内核, 用户目录里没有需要的JAVA字节码,而是当JAVA需要调用函数的时候才通过网络下载相对应的已经二次编译的字节码,就算用户通过 CLASS.getClass 也得不到可以用来反编译字节码。 真正意义上保护了JAVA知识产权。 个人版限制编译30个CLASS文件,文件打包方式下载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值