TrueLicense使用
参考:
https://blog.csdn.net/qq_43403676/article/details/124578390
https://blog.csdn.net/Genmer/article/details/118574390
原理:
qingfeng这个东西没少写,但有缺陷,合理的逻辑应是:
- license,授权,授权内容应包含授权给谁(服务器、客户等)、授权使用时限(无限期或特定时间)、授权的功能(trunk license的版本,授权可用的系统功能、模块)、授权的并发用户数(高级内容,可限制用户的并发用户量)、授权的客户端(高级内容,对于global部署的系统可限制用户的公司分部)
- 用户服务器(license的client端)获取服务器IP、MAC等作为被授权服务器的标识。qingfeng的示例代码是在server端。。。。
- 应对IP、MAC这些信息进行编码,计算哈希值等,应避免被授权用户知晓服务器的标识,以免被授权用户篡改,例如知晓标识为IP地址,则修改了某未授权服务器A的IP地址为授权的服务器B的IP地址后就可以非法在A服务器上运行。
当然,应对用户告知服务器的识别信息,例如告知服务器识别信息包含IP,则用户在更换IP时提前申请license避免事故。因此标识信息应尽量使用主板、CPU标识而非IP这些容易更改的。避免合法用户的多余license注册和非法用户的盗用license需要平衡。
服务器主机识别适用于单机软件,对于集群服务难以识别主机,应使用被授权的系统标识、数据库标识等。 - 当用户获取到服务器标识,一般称为install key,安装码,发给授权方进行授权。
- 授权方将安装码(识别授权给谁)和使用权限等信息编制license授权书
- 为了保密,防止被授权方篡改、复制授权信息,例如篡改使用期限,对license加密,可使用对称或非对称加密
- qingfeng示例使用非对称加密,因此先用jdk工具创建密钥对,然后私钥加密,将加密后的license发给用户
- 系统在运行时,使用公钥(部署在系统的特定位置)解密license(内存),并使用license,使被授权方无法篡改license
- 系统运行时可对license中的信息校验,例如校验时限不对,则停止服务
- 系统运行后,可对服务进行拦截,并校验,例如校验并发数、校验功能授权等,校验不通过则服务不可用
- 授权方如需要破解,1是通过注册机模式(kegen)生成license,因为对license校验时是从内存中加载解密的license,因此及时用户自行解密获取license也无法提供给程序
- 2是使用破解模式(crack),找到验证license的地方或生成license的地方,去掉license的验证或伪造license,验证的地方一般多,生成license的地方少。
- 应对办法:1.生成license的地方通过动态编译、代理等方式实现,破解方难以找到。
- 2.调用验证的地方,破解方通过反编译可修改调用,因此使用代码混淆(丑化)使破解方无法理解代码。
生成公私密钥
- 使用管理员允许cmd,避免创建密钥库失败
- 进入jdk目录
cd C:\Program Files\Java\jdk1.8.0_321\bin - 生成秘钥对
keytool是jdk带的“密钥和证书管理工具”
命令:
-certreq 生成证书请求
-changealias 更改条目的别名
-delete 删除条目
-exportcert 导出证书
-genkeypair 生成密钥对
-genseckey 生成密钥
-gencert 根据证书请求生成证书
-importcert 导入证书或证书链
-importpass 导入口令
-importkeystore 从其他密钥库导入一个或所有条目
-keypasswd 更改条目的密钥口令
-list 列出密钥库中的条目
-printcert 打印证书内容
-printcertreq 打印证书请求的内容
-printcrl 打印 CRL 文件的内容
-storepasswd 更改密钥库的存储口令
使用genkeypair命令生成密钥对
生成密钥对
选项:
-alias
-keyalg
-keysize
-groupname
-sigalg
-destalias
-dname
-startdate
-ext
-validity
-keypass
-keystore
-storepass
-storetype
-providername
-providerclass
-providerarg
-providerpath
-v 详细输出
-protected 通过受保护的机制的口令
密钥库口令和密钥口令设置为一样即可。
证书有效期设置10年,3650天
生成密钥库
keytool -genkeypair -keysize 1024 -validity 3650 -alias "privateKey" -keystore "privateKeys.keystore" -storepass "AbcD123!" -keypass "AbcD123!" -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN"
在jdk/bin目录下生成privateKeys.keystore文件。
升级密钥库加密算法
keytool -importkeystore -srckeystore privateKeys.keystore -destkeystore privateKeys.keystore -deststoretype pkcs12
从密钥对中导出证书
keytool -exportcert -alias "privateKey" -keystore "privateKeys.keystore" -storepass "AbcD123!" -file "certfile.cer"
导出证书文件certfile.cer到当前目录(bin)
从证书中导出公钥,并导入到当前主机的密钥库中
keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.keystore" -storepass "AbcD123!"
bin目录下生成publicCerts.keystore文件
客户端功能
获取服务器信息(IP、MAC、CPU、主板)
http://localhost:8001/license/getServerInfos
server端功能
对license加密,生成加密后的license文件
http://localhost:8000/license/generateLicense
作者:马洪彪
出处:http://www.cnblogs.com/mahongbiao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)