如何为我的申请进行为期30天的试用?我需要允许用户仅在30天内使用应用程序。这些天怎么算?
我将第一个和最后一个日期保留在注册表中。但是如果要改变系统时间 - 没有保护。我需要计算这30天。
答案 0 :(得分:7)
您可能想出一个需要互联网连接的系统,但如果没有用户可以篡改的内容,我就看不到解决方案。
依赖于不受信任的元素(用户控制下的保护元素)的任何解决方案都非常弱。
我能想到的最简单的方法是防止用户移动时钟,这是限制启动的总次数。
但是,尝试限制启动次数需要持久性 - 将数据保存到磁盘,可能会加密并存储激活数据文件的修改版本 -
想象一下,你计算30天中的一天为"用完了#34;一旦应用程序启动,在一个独特的场合,即使重新使用相同的日期。为了避免用完超过1"激活时间"启动时,用户必须允许您的软件在每次运行时重新保存其激活文件。
要阻止这种方法,用户只需要保持明显的日期不变,而且它们必须阻止您将任何内容存储到磁盘;或者他们可以简单地跟踪和记录您的更改并将其撤消,无论是使用监控过程还是使用VMWare快照。关于VMWare快照,您无能为力。虚拟机的磁盘不在您的控制之下。
答案 1 :(得分:4)
您可以通过在注册表中存储上次执行的日期来保护您的应用程序用户设置时钟。
每次启动应用程序时,您都需要执行以下操作:
正如 WarrenP 所说,任何使用VMware快照都可以轻松规避在本地存储信息的技术。
任何人,包括那些通过互联网查看的人,都可以通过汇编级别的黑客攻击跳过。
答案 2 :(得分:4)
以下是Delphi对共享软件试用实施的讨论: Best Shareware lock for Delphi Win32 随着讨论各种第三方解决方案,DIY技术等。
IMO,DIY是可行的,如果你的应用程序生成用户想要保留的数据,那么你可以简单地在数据库中嵌入使用/日计数器的副本,使得他们无法在没有它的情况下擦除它摧毁他们的数据。我也喜欢水印(在报告上打印“试用”等),升级唠叨严重程度,但我不建议或宽恕“堕落”瘫痪直到过期数据。我还想测量“实际使用天数”,而不是使用日历。
注册表操作有效,许多第三方保护程序都使用它。但是你需要隐身,并同时在多个位置备份。
您还应考虑使用单独的试用版和注册版。但也要考虑到海盗会用偷来的卡购买注册版本,并把它放在Rapidshare,BitTorrent等上。
另请注意,精心设计的防御会导致支持头痛。有时PC崩溃,时钟倒退。他们安装了新的硬件。 PC重建,从备份恢复等。如果用户正在运行调试器,他可能是软件开发人员,而不是盗版者。如果您的应用看起来已被修补,则可能是过于激进的防病毒软件。在任何时候,Windows的劣质补丁可能会导致您的程序认为它受到攻击,黑客攻击或反向工程。你被警告了......
答案 3 :(得分:2)
加密日期并将其存储在注册表中最好的方法是安装程序自己存储的日期,如果日期不存在,应用程序应该退出。
答案 4 :(得分:2)
有一个开源项目(以前是商业产品):
TurboPower OnGuard是一个用于创建Borland Delphi& amp;的演示版本的库。 C ++ Builder应用程序。创建具有时间限制,功能受限,仅限于一定数量用途或仅限于某些并发网络用户的演示版本。
我没有检查支持哪些Delphi版本。
答案 5 :(得分:1)
对于这种“保护”和其他一些,我过去使用过MaxComponents的TmxProtector(开源),结果很好。从提供的链接:
TmxProtector是一个软件保护组件。它是专门设计的 用于快速实现应用程序保护功能。您可以 创建计时和密码保护的应用程序。你可以设置 最大执行次数,它可以与注册密钥一起使用 好。
这个组件使用非常简单的加密技术将过期日期存储在注册表中,它提供了一些简单的检测系统日期的篡改。
答案 6 :(得分:1)
听起来你需要存储最后一个注册表项的日期。然后在您的程序中,测试当前日期是否小于上一个注册表项的日期。如果 true 显示试用期已过期并且必须购买该程序的消息。
答案 7 :(得分:1)
以下是关于如何在试用期间处理时钟变化的一些想法:
保存第一个日期和最后一个程序开始日期。如果最后一个程序启动的日期大于当前日期,则用户已将时钟移回。我只是增加一天并将新日期保存为上次开始的日期。您当然可以决定结束试验。
要尝试通过将日期和时间设置为特定值来打败运行应用程序的试用绕过程序(例如RunAsDate),您可以通过常用的Delphi方式(Date,Now)来获取日期,例如,获取NTUSER.DAT的最后修改日期。
将试用数据保存在两个不同的位置,即两个注册表位置,或文件和注册表。这样,即使用户删除其中一个试用数据位置,您仍然可以使用备用数据位置。
答案 8 :(得分:1)
如果您将试用信息保留在注册表中,则用户可以删除注册表。 Evey希望在那里找到注册信息。
有一个地方用户可能不会想到:您自己的应用程序(EXE文件)。将ANSI字符串常量(必须由ansi / ascii或其他1字节字符串,静态数组等)放入程序中,例如&x; xyxyxyxyxyxy'。编译您的应用程序。使用十六进制编辑器打开您的编译应用程序。搜索该字符串。现在,您的程序可以使用该区域将试用信息存储到自身。
将此方法与其他人一起使用:将您的信息也存储在注册表中,磁盘上等等。
无论如何,最好的方法是从您的服务器获取注册信息。 最大的缺点:1。服务器必须始终在线! 2.用户必须连接到互联网(当它使用您的应用程序时)。
还可以使用Delphi license management library来帮助您加密许可信息并生成基于字符串的密钥,您可以在注册时将密钥发送给您的客户。
无论如何,您发送到服务器的任何内容都需要基于该计算机的hardware fingerprint。否则,您的许可证密钥将在某个warez网站上泄露出来,并且每个人都可以使用该密钥。但是,如果密钥是基于硬件的,那么如果它在Internet上泄露就没用了。
请记住:不要过来这样做!没有牢不可破的软件保护。微软无法做到!
答案 9 :(得分:0)