Win端离线授权方案探讨

引言

常用SDK最终交付对象可能为内网用户,由于其不能够连通公网服务器,因此SDK需要具备离线(脱机)激活与授权的能力。

1. 需求

1. C端用户在脱机条件下能够正常激活

2. SDK在一定有效期内使用,或者限制次数

3. 限制用户设备及数量等

4. 避免虚拟机攻击,撰改系统时间等攻击

2. 拟定方案

2.1 纯离线模式

思路

  1. 开发者提供授权文件(授权文件包含有效期,License等信息),将之交付给C端用户

  2. C端用户获取授权文件后,将之放置在指定目录

  3. 程序运行时对授权文件进行校验,判断License是否有效及对比当前时间与授权文件初始时间,用以判断是否过期,最终返回是否激活成功

弊端

  1. 纯离线模式下我们无从得知C端用户的电脑信息(机器指纹),理论上授权文件提供给任何机器都能够正常使用

  2. 用户可以通过修改系统时间,使电脑始终处于有效期内,如果授权码为永久有效尚可,但如果是存在有效期,则该有效期形同虚设

  3. 其实造成上述问题的主要原因是,在纯离线模式下,我们无法区分不同C端用户的电脑信息,无法唯一标识之。

2.2 离线模式

思路

  1. C端用户电脑运行程序生成机器指纹(含CPU、硬盘、MAC地址等一种或者几种信息的加密数据),同时获取当前系统时间等,统一加密编码为一定位数的License(由于可能C端用户无法联网,因此可能需要通过摘抄等方式,这就要求License不能太长)

  2. C端用户将License发送给S端服务器,S端服务器对License进行解密及分析,得到C端机器码及系统时间等

  3. S端服务器根据C端用户信息,生成授权证书(包含C端限定SDK使用期限),并进行加密,并将之交付给C端用户

  4. C端将授权证书放置在指定目录,SDK运行前对授权证书进行解密,得到第1步提交的机器码及SDK有效期

  5. C端校验当前主机的机器码与证书中的机器码是否一致,同时判断当前系统时间是否超过证书中的有效期,最终返回激活是否成功

弊端

  1. C端用户主机更新硬盘,CPU,网卡,刷BIOS等会使机器码发生变化,SDK运行校验时造成失败

  2. 无法应对虚拟机及修改时间等攻击

2.3 在线模式

对于在线系统通常的做法是设计与部署一个认证服务,软件链接登陆服务获得认证信息(License)实现,当然也可以一旦通过验证,将License本地存储使用。

弊端

  1. 需要要求用户能够连通公网

  2. 需要额外的服务器开销

3. 总结

综合考虑三种方式,我们选用离线模式加密授权方式将较为合适,其中并非真的需要有服务器支持,由开发者代替服务器职能亦可。

4. 参考

百度语音离线合成授权破解_peihp_的博客-CSDN博客

https://patents.google.com/patent/CN103780600A/zh

简单的认识dll授权加密 - 掘金

根据磁盘或网卡创建软件License约束(c++)_py_free的博客-CSDN博客_c++ license

给自己的软件制作注册码-阿里云开发者社区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值