软件许可证和授权的实现方法
一般许可证授权是和机器进行绑定关系的,当前运行的机器没有授权的话可以进行一些处理,来防止盗版软件和非法传播。
大多数软件有激活码或者注册码的概念,来进行激活等操作。这种大多数是离线激活。
在线激活可以通过服务器通信来确认当前机器是否授权,授权后才可以正常运行。
这里将使用在线动态授权,来达到严格控制授权机器,和具备较高的实时性的目的。
授权流程:进程获取机器信息->信息发到服务器->服务器确认授权->进程收到授权结果进行处理。
step1:机器的信息可以主板编号,CPUID,内存大小等机器特征信息组合出来数据,在这里可以再加上机器IP,如果是对公IP的话,那么服务器是可以进行校验的,达到无法伪装的目的。在这里还可以加入UTC时间。
step2:通过网络吧机器信息传输到服务器。众所周知网络是不安全的,明文传输的话可以被伪造,为了加大破解难度,可以进行非对称传输。进程经过公钥把需要上传的信息进行加密处理,一个app或者一个产品,可以有一对公钥私钥。
step3:服务端可以根据机器特征来进行当前机器是否有被授权,并且吧正确的信息非对称加密返还给客户端。
上面的介绍方法实现了授权逻辑关系,和具备一定的网络安全。
但是由于进程本身是在客户端运行的,容易被攻破。因此这里需要进行一些加密保护技术来保护进程的功能正常运作。
常见的技术名词有进程加壳,内存和代码混淆,虚拟化。
对于虚拟化的目的是为了让进程本身的运行机制不被轻易识别和攻破。简单方案是可以内嵌lua或者python虚拟机来进行一些OP code改造,运作代码用lua或者python书写,达到加大破解难度的目的。
复杂一点的就是自己实现一个虚拟机。