【问题标题】:Delphi: 30-day trial德尔福:30 天试用
【发布时间】:2011-10-18 11:05:31
【问题描述】:

如何为我的应用程序进行 30 天试用?我只需要允许用户使用一个应用程序 30 天。这些天怎么算?

我在注册表中保留了第一个和最后一个日期。但是,如果要更改系统时间- 将没有保护。我需要数一数这 30 天。

【问题讨论】:

  • 也许您应该了解一些实际的第 3 方软件是如何做到这一点的。尝试查找有关 ASProtect、Armadillo、WinLicense 等的信息...
  • 我找到了这篇文章,如果它可以帮助其他人edn.embarcadero.com/article/27385

标签: delphi


【解决方案1】:

您可能会想出一个需要互联网连接的系统,但如果没有用户无法篡改的东西,我看不到解决方案。

任何依赖于不受信任元素(受用户控制的保护元素)的解决方案都非常薄弱。

我能想到的防止用户将时钟向后移动的最简单方法是限制启动的总数。

但是,限制启动次数的尝试需要持久性 - 将数据保存到磁盘,也许加密和存储激活数据文件的修改版本 -

想象一下,一旦应用程序启动,在一个独特的场合,您将 30 天中的某一天算作“用完”,即使重复使用相同的日期也是如此。为了避免在启动时用完超过 1 个“激活时间日”,用户必须允许您的软件在每次运行时重新保存其激活文件。

要阻止这种方法,用户只需要防止明显的日期发生变化,而且他们必须要么阻止您将任何内容存储到磁盘;或者他们可以简单地跟踪和记录您的更改并将它们撤消,或者使用监控过程,或者使用 VMWare 快照。关于 VMWare 快照,您无能为力。虚拟机的磁盘不在您的控制之下。

【讨论】:

  • +1;要在本地保护 30 天试用到期,确实需要拥有魔杖或拥有复杂的硬件密钥许可。
【解决方案2】:

您只需在注册表中存储上次执行的日期,即可保护您的应用程序的用户设置时钟。

每次启动应用时,您需要执行以下操作:

  • 根据存储的上次执行日期检查当前日期(由系统时钟报告),如果当前日期早于上次执行日期,则认为试用期已过期(或任何您喜欢的日期)。
  • 如果之前的检查没问题,将当前日期保存在注册表中并继续执行。

正如 WarrenP 所说,使用 VMware 快照可以轻松绕过任何在本地存储信息的技术。

任何人,包括那些通过互联网检查的人,都可以通过汇编程序级别的黑客攻击跳过。

【讨论】:

    【解决方案3】:

    以下是关于使用 Delphi 执行共享软件试用的讨论: Best Shareware lock for Delphi Win32 以及各种 3rd 方解决方案、DIY 技术等的讨论。

    IMO,如果您的应用生成用户想要保留的数据,那么 DIY 是可行的,那么您可以简单地将使用/天数计数器的副本嵌入到数据库中,这样他们就无法擦除它破坏他们的数据。我也喜欢水印(在报告上打印“试用”等),不断升级 nag 严重性,但我不建议或纵容“死机”瘫痪,直到超过过期数据。我也喜欢测量“实际使用天数”,而不是使用日历。

    注册表操作有效,许多第 3 方保护者都在使用它。但是您需要保持隐秘,并同时在多个位置保存备份。

    您还应该考虑使用单独的试用版和注册版。但也要考虑到盗版者会用偷来的卡购买注册版,放到Rapidshare、BitTorrent等上。

    还要注意,精心设计的防御会导致支持性头痛。有时 PC 会崩溃,时钟会倒退。他们安装新的硬件。 PC 被重建、从备份中恢复等等。如果用户正在运行调试器,他可能是软件开发人员,而不是盗版者。如果您的应用看起来已经打过补丁,则它可能是一款过于激进的防病毒软件。在任何时候,一个劣质的 Windows 补丁都可能导致您的程序认为它正在受到攻击、黑客攻击或反向工程。您已被警告...

    【讨论】:

      【解决方案4】:

      加密日期并将其存储在注册表中,最好的方法是由安装程序自己存储该日期,如果该日期不存在,则应用程序应退出。

      【讨论】:

      • 谢谢!我已经这样做了!如果要更改系统时间- 将没有保护!这30天我也要数一数
      【解决方案5】:

      有一个开源项目(之前是商业产品):

      TurboPower OnGuard 是一个库,用于创建 Borland Delphi 和 C++Builder 应用程序的演示版本。创建有时间限制、功能限制、限制使用一定数量或限制一定数量的并发网络用户的演示版本。

      我没有检查支持哪些 Delphi 版本。

      【讨论】:

      • 谢谢!我有 :) 它适用于 Delphi 2010。我有自己的特殊性,我已经写了我的保护。我只需要计算天数。
      • TurboPower OnGuard 中有一个 OgDaysCode 组件。但它不是很好(它错误地计算天数),它使用INI,我使用注册表
      • 击败基于 INI 或注册表的计日系统是微不足道的。
      【解决方案6】:

      对于这种“保护”和其他一些,我过去使用过来自MaxComponents 的TmxProtector(开源),效果很好。从提供的链接:

      TmxProtector 是一个软件保护组件。它被设计 用于快速实施应用保护功能。你可以 创建时间试用和密码保护的应用程序。您可以设置 最大执行次数,它可以与注册密钥一起使用 好吧。

      此组件使用非常简单的加密将过期日期存储在注册表中,并提供一些简单的系统日期篡改检测。

      【讨论】:

      • 谢谢!但它适用于 Delphi 2009。我有 2010 :(
      • {$IFDEF VER200} 'Delphi 2009'{$ENDIF}
      【解决方案7】:

      听起来您需要存储上次写入注册表项的日期。然后在您的程序中,测试当前日期是否小于创建最后一个注册表项的日期。如果 true 显示一条消息,说明试用期已过,必须购买该程序。

      【讨论】:

      • 除了 OP 已经意识到通过玩时钟很容易避免这种情况,再加上恢复对注册表的更改。自己试试。任何你能想到的依赖于本地持久性的东西都可以很容易地被绕过。
      • 我做到了。我安装了 Delphi 2010,然后两天后拨回了时钟。下次我启动 Delphi 时,它说我的试用期已过。并且不会运行。将我的时钟调回今天的日期没有任何效果。如果您尝试使用 Embarcader 的产品之一,我建议您在非生产机器上进行。
      • 因此,Embarcadero 因尽可能做好试验而获得满分。我希望他们使用隐藏的注册表项将试验标记为“伪造”。
      • 但是您是否还原了注册表中的更改?我只是用一个词不同意@Warren:很容易
      • @EMBarbosa - 不。从现在开始,我打算在安装软件之前拍摄注册表的快照,然后在安装后拍摄另一个快照。然后我可以进行文件比较以找出存在哪些差异。沃伦——他们必须这样做。
      【解决方案8】:

      以下是关于如何在试用期间处理时钟变化的一些想法:

      1. 保存第一个日期和最后一个程序启动的日期。如果最后一个节目开始的日期大于当前日期,则用户将时钟向后移动。我只是增加一天并将新日期保存为上次开始的日期。您当然可以决定结束试用。

      2. 要尝试通过将日期和时间设置为特定值来击败运行您的应用程序的试用绕过程序(例如 RunAsDate),您可以代替通过通常的 Delphi 方式(日期,现在)获取日期,例如获取NTUSER.DAT的最后修改日期。

      3. 将您的试验数据保存在两个单独的位置,或者两个注册表位置,或者文件和注册表。这样,即使用户删除了其中一个试用数据位置,您仍然可以使用一个备份位置。

      【讨论】:

        【解决方案9】:

        如果您将试用信息保存在注册表中,则该注册表可能会被用户删除。每个人都希望在那里找到注册信息。

        有一个地方是用户可能不会想到的:您自己的应用程序(EXE 文件)。将 ANSI 字符串常量(必须由 ansi/ascii 或其他 1 字节字符串、静态数组等)放入您的程序中,例如“xyxyxyxyxyxy”。编译您的应用程序。使用十六进制编辑器打开您编译的应用程序。搜索该字符串。现在您的程序可以使用该区域将试用信息存储到自身中。

        将此方法与其他方法一起使用:将您的信息也存储在注册表、磁盘等中。

        无论如何,最好从您的服务器获取注册信息。 最大的缺点: 1. 服务器必须始终在线! 2. 用户必须连接到互联网(当它使用您的应用时)。

        还可以使用Delphi license management library 来帮助您加密许可证信息并生成基于字符串的密钥,您可以在注册时将其发送给您的客户。

        无论如何,您发送到服务器的任何内容都需要基于该计算机的hardware fingerprint。否则,您的许可证密钥将在某些warez 网站上泄露,每个人都可以使用该密钥。但是,如果密钥是基于硬件的,那么如果它在互联网上泄露,那就没有用了。

        请记住:不要过度!没有牢不可破的软件保护。微软做不到!

        【讨论】:

          【解决方案10】:

          正如线程所提到的,我鼓励您查看 WinLicense:http://www.oreans.com

          我使用它已经有一段时间了,它可以很好地处理试用期。它还处理许可、客户列表等。

          汤姆

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-07-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-02
            相关资源
            最近更新 更多