Delphi 我应该在哪里本地存储许可证数据?

Delphi 我应该在哪里本地存储许可证数据?,delphi,licensing,protection,Delphi,Licensing,Protection,目前,每当客户端打开我的应用程序时,我都会进行数据库检查——他们输入登录信息,然后我的应用程序会在数据库中运行他们的信息,看看是否匹配。它可以完美地工作,除了如果我正在创建不使用互联网的软件,这种方法对我没有任何好处(因此,我不能总是期望用户在按下登录按钮时连接到互联网) 进行初始许可证检查没有问题,但是,一旦在用户的PC上验证了详细信息,我想我需要在本地存储一些内容,以便用户下次打开我的应用程序时进行检查 如何在本地存储许可数据?我一直在读关于它的书,显然,如果我想避免使用密钥,解密许可证数据

目前,每当客户端打开我的应用程序时,我都会进行数据库检查——他们输入登录信息,然后我的应用程序会在数据库中运行他们的信息,看看是否匹配。它可以完美地工作,除了如果我正在创建不使用互联网的软件,这种方法对我没有任何好处(因此,我不能总是期望用户在按下登录按钮时连接到互联网)

进行初始许可证检查没有问题,但是,一旦在用户的PC上验证了详细信息,我想我需要在本地存储一些内容,以便用户下次打开我的应用程序时进行检查


如何在本地存储许可数据?我一直在读关于它的书,显然,如果我想避免使用密钥,解密许可证数据是一个大问题。您使用注册表还是文件?

将许可证信息存储在文件或注册表中是可以的。但是你必须决定软件的许可是否允许它使用

  • 电脑上的每个人
  • 就是那个用户
这决定了您是否必须为所有用户(
HKLM
CommonAppData
)或仅为当前用户(
HKCU
AppData
)存储它

两者都很好


我建议你别傻了,走极端。不要将许可证信息与硬件密钥、MAC地址、序列号联系在一起,因为这样我在更换计算机时就无法访问自己的软件


有一个加密的、签名的、base-64编码的许可证文件就足够了,其中包含他们的姓名和公司。

如果你的应用程序使用数据库或其他持久数据存储,请将许可证信息放在那里,也放在注册表中。如果其中一个被清除,则从另一个恢复。

我个人不喜欢许可证信息的想法

请注意,我完全理解它的必要性,但它仍然不能让我兴奋:)

乔尔·斯波尔斯基(Joel Spolsky)在这个主题上有很多很好的文章,但底线是:破解软件并不是为了省钱(大多数情况下),而是为了证明它们可以。 因此,即使是最复杂、最复杂、最鲁莽的许可证模式,最终也会被某个十几岁甚至更糟的年轻人搞砸

唯一有效的真正保护方案是,您拥有一块无法从应用程序中删除的硬件,因为它包含要执行的关键代码。 但这需要花费很多钱,可能还需要一个专用的编译器和专用代码。硬件有各种限制,即不能有太多的硬件,否则会有麻烦:) 你仍然有一个问题,因为一些黑客最终会转储硬件并复制它。总之,这也不值得努力

但是,这只是我的观点


Andrea

如果要将许可证绑定到硬件(请参阅讨论),则无需“隐藏”许可证信息。当然,它必须被加密。复制许可证信息对用户没有帮助,因为它仅在一台计算机上有效。(只有当用户不能简单地“登录”并自动激活新计算机时,这才是正确的。但如果是这样,您的许可证有什么意义?)绑定到硬件包括HD和/或MAC的序列号。您可以将此信息存储在文件或注册表中,请参阅Ian的答案。对硬件的绑定包括某种“手动”激活或对计算机数量的限制,每个许可证持有人都可以合法激活,否则将失去意义。


如果您将信息存储在注册表/磁盘文件中,任何人都可以非常轻松地找到它并将其复制到另一台计算机上(甚至通过internet共享)。如果你不想让你的密钥“泄露”在互联网上,你应该考虑把你的密钥工作在一台计算机(硬件特定的密钥)。
德尔福见此。

这真的是你的问题吗?注册表还是文件?不是关于如何让普通用户难以非法使用你的应用程序?@Lars-我可以拥有有史以来最好的授权算法,但是如果我没有好的地方来存储数据,那又有什么好处呢?不过,这很可能是我的下一个问题即使是“临时”用户,使用虚拟机也很常见,到处都有免费的虚拟机。因此,在虚拟机中安装和验证许可证并根据需要随时复制虚拟机以及有效许可证是没有问题的。因此,如果您花费大量精力来保护您的本地许可证信息,用户可能会复制整个VM来复制您的应用程序。所以在我的建议中,不要花太多时间隐藏许可证信息。@Andreas-我会在许可证文件中存储一些硬件信息和IP内容。然而,如果我的软件是自切片面包以来最棒的东西,“临时”用户只会遇到使用虚拟机的麻烦PI预见到Zugzhang的情况,因为双方都不会透露他们目前认为“好”的细节。(这也包括蜜罐位置)如果应用程序打印发票或报告,您可能希望在打印中包含许可证信息。用户可能不喜欢打印的照片上有其他公司的名称。@Ian-True,但这也会阻止您在internet上发布许可证内容,因此其他人都可以使用它。:)@杰夫-我过去常常将我的应用程序绑定到硬件上(HD、MAC系列),过了一段时间,我的销售量下降了一点,而不是上升了。每次我的客户更换电脑时,我都要打扰他们。我也有很多工作要做。当然,这取决于应用程序的“价值”,但我不会将许可证绑定到硬件。对我来说,最好是在信息屏幕和打印输出中“公开”许可证信息(如Lars所写),这会激励严肃的用户购买合法副本。@Andreas-我的应用程序实际上不提供打印输出或任何公开信息。@Andreas,因为Jeff的目标是他的用户不必“总是”在线登录,所以我同意