我设计了以下机制,以便在不直接连接到服务器的情况下许可软件,看起来很简单,但我没有发现任何严重的缺陷:
我计划使用非对称加密,以便从 1 个服务器(许可证服务器)向 n 个客户端(安装该软件的 n 个计算机)发送消息
-
客户端发送(例如通过邮件)有关计算机的一些信息(MAC 地址、机器名称,等等)
-
在许可证服务器上,这些信息使用安全良好的公共(不太公开)RSA 密钥进行加密,该加密的有效负载就是许可证。
-
加密的许可证发送给客户端
-
当软件启动时,它会检查许可证文件,它能够确保有效负载已使用服务器密钥(使用每个版本的软件附带的相应 RSA 私钥)进行加密。
-
许可证解密后,软件会检查它是否在授予许可证的同一台计算机上运行。
在我看来,如果不访问许可证服务器 RSA 密钥,任何人都无法伪造加密的有效负载。
当然,许可证可能被盗,然后软件在模仿真实客户端机器的虚拟机中启动,或者软件可能被反汇编以拔掉许可证检查。
但这个方案足够好,还是我在这方面太天真了?
Thanks
这是一个不错的计划,尽管您确定想要client拥有私钥和服务器公钥?除非每次安装生成一个密钥对,否则不应该是相反的吗?
方案虽然简单,但是实用吗?如果您的目标是防止应用程序被随意破解,那么有更简单但同样有效的解决方案。如果您的目标是防止破解者运行您的应用程序,那么很可能 (a) 您不会成功,并且 (b) 您的程序不够重要,不值得如此关注。
当简单地对二进制文件进行十六进制编辑以将许可证检查代码更改为 NOP 几乎肯定可以正常工作时,为什么有人会寻求攻击许可证方案的加密部分呢?
如果我是您,我会重新考虑许可策略及其对您的产品及其成功的重要性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)