软件许可证设备绑定与换机
一份许可证设置为单设备后,客户把软件和缓存复制到另一台普通电脑,不能直接继续使用原电脑的授权。
设备绑定和账号登录有什么区别?
账号登录确认“客户是谁、买了什么”,设备绑定确认“这份授权允许在哪台机器使用”。客户登录成功后,软件仍需通过 SDK 校验设备身份、签名和功能权益;把账号登录状态或缓存文件复制到另一台电脑,不能代替那台电脑自己的授权验证。
SDK 怎么知道是哪一台电脑?
每次启动时,SDK 读取操作系统的机器身份,结合产品 ID 计算设备哈希。服务器签名中包含这个哈希,本地检查也会核对它。
Windows 读取 MachineGuid,Linux 读取 machine-id,macOS 读取 IOPlatformUUID。原始机器身份不会上传,只发送计算出的哈希;配置文件中的旧 device_id 不会覆盖实际读取的本机身份。
把机器 A 的文件复制到 B 会怎样?
- A 激活后,拿到的签名绑定 A 的设备哈希。
- B 读取自己的系统身份,得到不同的哈希,因此拒绝 A 的缓存。
- B 必须联网重新激活。如果设备上限为 1,且 A 还没释放,服务器会拒绝增加 B。
客户要换电脑,怎么处理?
让客户在旧电脑上主动解绑,再在新电脑激活。如果旧电脑损坏,你也可以在控制台的“设备激活”页面释放旧绑定。换电脑不会重置许可证的到期时间。
操作系统重装后机器身份可能变化,需要按新设备处理。完整克隆操作系统、伪造系统身份或修改客户端程序属于更强的攻击,单靠这个设备哈希不能保证防住。
允许长期离线时,A 已持有的旧签名无法马上得知它被释放了;它要再次成功联系服务器,才能更新这个状态。离线时间越长,远程限制越难立即生效。
跨语言设备哈希算法
SHA256(UTF8(
"LicenovaDevice/v2\n"
+ lower(product_id) + "\n"
+ lower(trim(OS_machine_identity))
))