目前,每次客户端打开我的应用程序时,我都会进行数据库检查 - 他们输入登录信息,然后我的应用程序通过数据库运行他们的信息并查看它是否匹配。它的工作完美无缺,但是如果我正在创建不使用Internet的软件,这种方法对我没有任何好处(因此,我不能总是期望用户在按下登录按钮时连接到Internet)。 / p>
要进行初始许可证检查是没有问题的,但是一旦在用户的PC上验证了一次详细信息,我想我需要在本地存储一些内容,以便在下次用户打开我的应用程序时进行检查。
您如何在本地存储许可数据?我一直在阅读它,如果我想避免使用keygens,显然解密许可证数据是一个很大的禁忌。您是使用注册表还是文件?
答案 0 :(得分:8)
将许可证信息存储在文件或注册表中是可以的。但您必须决定是否许可该软件许可它
这决定了您是否必须为所有用户(HKLM
,CommonAppData
)或仅当前用户(HKCU
,AppData
)存储它。
两者都很好。
我建议你不要愚蠢过火。不要将许可证信息绑定到硬件密钥,MAC地址,序列号 - 因为当我更换计算机时,我将无法访问自己的软件。
拥有一个加密的,已签名的base-64编码许可文件,包含其名称和公司,这已经足够了。
答案 1 :(得分:2)
如果要将许可证绑定到硬件(请参阅讨论),则不需要“隐藏”您的许可证信息。但它必须加密,当然。复制许可证信息对您的用户没有帮助,因为它仅在一台计算机上有效。 (这是唯一的,如果您的用户不能简单地“登录”并自动激活新计算机。但如果是这样的话,您的许可证有什么意义?)绑定到硬件包括HD的串行和/或MAC。您可以将此信息存储在文件或注册表中,请参阅Ian的答案。绑定到硬件包括某种“手动”激活或限制计算机的数量,每个许可证是合法的激活,或者它将是无意义的。
答案 2 :(得分:1)
如果您的应用使用数据库或其他持久性数据存储,请将许可信息放在那里,也放在注册表中。如果其中任何一个被消灭,那么从另一个中复活。
答案 3 :(得分:1)
我个人不喜欢许可信息的想法。
我完全理解它的必要性,请注意,但它仍然没有让我感动:)
Joel Spolsky在这个话题上有很好的文章,但最重要的是:破解者不会破解软件以节省资金(大部分时间)而不是证明他们可以。 因此,即使是最复杂,最复杂,最完全鲁莽的许可模式最终也会被一些破解少年或更糟糕的东西炸毁。
唯一真正有效的保护方案是,您拥有一块无法从应用程序中分离出来的硬件,因为它包含要执行的关键代码。 但这需要花钱,很多,可能还有专门的编译器和专用代码。有硬件的所有限制,即你不能有太多的东西或你最终会遇到麻烦:) 你仍然遇到问题,因为一些破解者最终将转储硬件并复制它。总而言之,这也不值得。
但是,这只是我的意见......
安德烈
答案 4 :(得分:1)
如果您将信息存储在注册表/磁盘文件中,任何人都可以非常轻松地找到它并将其复制到另一台计算机(甚至可以通过Internet共享)。如果您不希望将密钥“泄露”到互联网上,则应考虑在单台计算机上使用密钥(硬件专用密钥)。
请参阅此DLL了解Delphi。