windows - 注册码 : single computer, 多次安装

标签 windows algorithm security licensing software-distribution

<分区>

我正在开发一个我打算卖给客户的应用程序。客户打算在一台或多台计算机上多次安装同一应用程序。无论他们使用多少台计算机,我都会为每个单独的安装向他们收费。我的问题是我想为每个安装设置一个唯一的注册 key ,这样他们就无法在没有获得另一个许可证的情况下将程序从一个文件夹复制到另一个文件夹。

到目前为止,我唯一的想法是创建程序的物理路径和计算机的 MAC 地址的散列。使用重新计算的哈希检查存储的哈希会告诉我程序是否已被移动或复制。一个大问题是,如果程序存储在文件服务器上并且每个用户都从不同的计算机访问它,则 exe 的路径可能在所有情况下都不相同。这是一个不错的解决方案还是有更好的解决方案?

请尽量保持您的回答语言中立,因为我正在用汇编而不是 .NET 编写我的应用程序。

最佳答案

如果您相信您的客户他们不会对您的软件保护进行逆向工程,那么一个好的解决方案如下:

1)你向你的客户询问你提到的必要信息,MAC和路径

2) 您可以连接这 2 个信息 + 一个您只会知道的足够长的 secret 种子(为了避免让它们很容易生成有效的哈希值,这些哈希值将用作下面阅读的解密 key ..)并生成来自所有这些信息的有效散列。

3) 在您的应用程序中编写一个在启动时调用的函数,并使用该哈希作为 key 来解密程序的其余部分。

4) 在发送购买的新许可证的申请之前,使用新 key 加密代码(当然除了解密功能使用的必要部分)。

因此,每次他们都必须要求您提供应用程序的新副本,以便将其放入另一个文件夹和/或计算机。 将由应用程序的每个副本的解密函数读取的解密 key 可以存储在注册表中的不同注册 key 或文件中。

我知道它看起来很复杂,但这确实可行。但是,不要忘记,这也是可以破解的,但如果他们不打算这样做,那么你就会得到你想要的结果。

希望对您有所帮助...

关于windows - 注册码 : single computer, 多次安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4747819/

相关文章:

javascript - 在 Node.js 中高效计算 n 选择 k

php - 保护我的源代码不被最终用户使用

html - 浏览器 Canvas CORS 支持跨域加载图像操作

windows - 显示来自 Windows 批处理文件的弹出窗口/消息框

windows - PE文件如何映射到内存中?

arrays - 在常量内存空间中应用排列的算法

sql-server - 如何在 SQL 中检查特定登录名下是否存在某个用户?

c# - 在 Graphics 对象上绘制图像时出现 gdi+ 一般错误

c# - 如何为动态加载的 native dll 调整 %PATH%?

algorithm - 从 a^b 的右边找到第 k 个数字的最有效算法是什么,即 a 的幂 b