我正在开发一个我打算卖给客户的应用程序。客户打算在一台或多台计算机上多次安装同一应用程序。无论他们使用多少台计算机,我都会为每个单独的安装向他们收费。我的问题是我想为每个安装设置一个唯一的注册 key ,这样他们就无法在没有获得另一个许可证的情况下将程序从一个文件夹复制到另一个文件夹。
到目前为止,我唯一的想法是创建程序的物理路径和计算机的 MAC 地址的散列。使用重新计算的哈希检查存储的哈希会告诉我程序是否已被移动或复制。一个大问题是,如果程序存储在文件服务器上并且每个用户都从不同的计算机访问它,则 exe 的路径可能在所有情况下都不相同。这是一个不错的解决方案还是有更好的解决方案?
请尽量保持您的回答语言中立,因为我正在用汇编而不是 .NET 编写我的应用程序。
如果您相信您的客户他们不会对您的软件保护进行逆向工程,那么一个好的解决方案如下:
1)你向你的客户询问你提到的必要信息,MAC和路径
2) 您可以连接这 2 个信息 + 一个您只会知道的足够长的 secret 种子(为了避免让它们很容易生成有效的哈希值,这些哈希值将用作下面阅读的解密 key ..)并生成来自所有这些信息的有效散列。
3) 在您的应用程序中编写一个在启动时调用的函数,并使用该哈希作为 key 来解密程序的其余部分。
4) 在发送购买的新许可证的申请之前,使用新 key 加密代码(当然除了解密功能使用的必要部分)。
因此,每次他们都必须要求您提供应用程序的新副本,以便将其放入另一个文件夹和/或计算机。
将由应用程序的每个副本的解密函数读取的解密 key 可以存储在注册表中的不同注册 key 或文件中。
我知道它看起来很复杂,但这确实可行。但是,不要忘记,这也是可以破解的,但如果他们不打算这样做,那么你就会得到你想要的结果。
希望对您有所帮助...