试用软件/许可策略
我为摄影师写了一个实用程序,我打算以便宜的价格在网上出售(10美元)。我想允许用户在申请许可证之前试用一周左右的软件。由于这是一个个人项目,而且软件也不是很昂贵,所以我认为购买专业许可提供商的服务并不值得,我也打算自己动手。
当前,应用程序将检查注册表项,该注册表项包含加密的字符串,该字符串指定试用版何时到期或者它们具有有效的许可证。如果密钥不存在,则会创建一个试用期密钥。
因此,免费获得另一个星期所需要做的就是删除注册表项。我不认为有很多用户会这样做,特别是当应用程序仅售10美元时,但是我很好奇是否有更好的方法可以使合法用户不费劲。我通常会编写Web应用程序,并且以前没有处理过这些东西。
如果重要的话,该应用程序位于.NET 2.0中。
解决方案
在这种情况下,我认为工作并不重要。如果我们有某种保护措施,它将阻止90%的用户。另外10%的人如果不想为软件付费,那么无论我们做什么,他们都会找到一种绕过保护的方法。
如果我们需要一些不太明显的东西,可以在System32中放置一个文件,听起来像一个系统文件,应用程序在启动时会检查该文件是否存在。追踪起来可能会有些困难。
进行复杂的保护计划没有多大意义。基本上会发生以下两种情况之一:
- 应用不够流行,没有人破解。
- 应用程序变得流行,有人破解并发布了该应用程序,然后,如果我们想欺骗我们,那么那些零知识的人都可以下载该破解程序。
在第一名的情况下,不值得在该计划上花费很多精力,因为我们可能会让一两个额外的人购买应用程序。在#2的情况下,不值得付出很多努力,因为总有人会破解它,而这种努力将被浪费。
基本上,我的建议是做一些简单的事情,就像我们已经做过的一样,那同样有效。不想欺骗人会付钱,不想欺骗人会付钱。
如果将主页托管在我们控制的服务器上,则可以让软件的可下载试用版每晚自动编译为新的二进制文件。该编译将在软件到期时替换程序中的硬编码日期时间值。这样,"作弊"的唯一方法是更改计算机上的日期,并且大多数人不会这样做,因为这会产生问题。
如果我们打算继续开发软件,则可以考虑使用勒索模型:
http://en.wikipedia.org/wiki/Street_Performer_Protocol
从本质上讲,我们对软件进行了改进,然后在发布捐赠之前要求一定数量的捐赠(没有任何DRM)。
一种使用户容易但对我们而言不容易的方法是,对到期日期进行硬编码,并时不时制作新版本的安装程序...
如果我是你,我不会比你已经做的更高级。就像我们说的那样,它只有10美元,而且如果有人真的想破解系统,那么不管我们制作它多么复杂,他们都将这样做。
我们可以通过要求网络连接并让服务器生成试用密钥来对方案进行稍微高级的版本。如果我们按照符号(hash(unique_computer_id + when_to_expire))的方式进行操作,并让应用使用公共密钥检查服务器已签署了到期日期,则应绕过"真正的" hack。
这样,我们可以存储唯一ID的服务器端,并拒绝多次生成到期日期。不确定使用什么作为唯一ID,但是应该有某种方法可以从Windows获得有用的东西。
尝试共享软件入门套件。它是由Microsoft开发的,可能还需要其他一些功能。
http://msdn.microsoft.com/en-us/vs2005/aa718342.aspx
我以非常低的价格出售的应用程序也面临着同样的问题。
除了混淆应用程序之外,我还想出了一个系统,该系统在注册表中使用两个密钥,其中一个用于确定安装时间,另一个用于确定实际的许可证密钥。这些密钥的名称晦涩难懂,缺少的密钥表明已对安装进行了篡改。
当然,删除两个密钥并重新安装应用程序将再次开始评估时间。
我认为这没关系,因为想要破解该应用程序的人将成功完成此操作,或者成功破解该程序的人会发现一个破解。
因此,最终,我仅实现了使其不太容易破解应用程序的目标,而我猜这将阻止80-90%的客户这样做。毕竟:由于该应用程序以非常低的价格出售,因此我没有理由在此问题上投入比现在更多的时间。
编辑:通过将注册表信息存储在本地安全机构(LSA)中,可以使当前的许可方案更加难以破解。大多数用户将无法从那里删除关键信息。在MSDN上搜索LSA应该会为我们提供所需的信息。
关于许可方案的观点因人而异,在开发人员中比在特定用户组(例如摄影师)中更多。考虑到应用程序需要解决的业务需求,我们应该深呼吸,并尝试查看目标用户会接受什么。
这是我对这个问题的个人看法。会有声音的人不同意。
答案很大程度上取决于我们期望应用程序的使用方式。如果我们希望该应用程序每天使用几次,那么我们将受益于非常长的试用期(数月),从而形成锁定状态。为此,我们必须有一个宽限期,在该宽限期内,该软件会提醒用户即将需要付款。在宽限期之前,如果软件对试用期保持沉默,我们将获得更大的成功。
我们是否选择相信这个相当大胆的声明当然完全取决于我们。但是,如果这样做,我们应该意识到使用应用程序的次数越少,试用期应该越短。同样重要的是,用户必须非常快速,便捷地进行付款(尽可能少的数据输入和尽可能少的点击)。
如果我们不确定该应用程序的使用,则应选择一个非常短的试用期。以我的经验,如果应用程序对此情况保持沉默,那么我们将获得更好的结果。
尽管可以有效地用于许可目的,但"呼入"功能却被许多人视为隐私威胁。我个人不同意这样的观点,即这对于愿意为所用软件付费的客户来说是一种不利的方式。因此,我建议实施许可方案,在该方案中,应用程序会定期检查许可状态(试用,已付费),并帮助用户在需要时为软件付费。但是,对于小型实用程序来说,这可能是过大的选择。
对于极小甚至简单的公用事业应用程序,我认为没有试用期的预付款是最有效的。
关于解决方案的安全性,我们必须使其与开发工作成比例。在我的工作中,安全性至关重要,因为涉及到合作伙伴和经销商,并且开发方面的投资非常高。对于小型公用事业应用程序,更合理的定价是合理的价格,并依靠诚实的用户付费,这些用户将为满足其业务需求的软件付费。
只是对许可证很酷。提前说明这是激情和辛勤劳动。给人们做正确事情的机会。如果有人想盗版,它将最终发生。我仍然记得我绝望地看到了我关于bittorrent的书,但这是我们必须处理的事情。不要因盗版而屈服(我们现在正在做的事情听起来不错),但不要削弱超出这一范围的事情。
我仍然相信,有足够的诚实人在那里进行值得盈利的编码工作。
没有基于"安装以来的天数"的评估,而是使用的天数,运行的次数或者类似的结果。人们倾向于下载共享软件,运行一次或者两次,然后忘记它几个星期,直到他们再次需要它。到那时,该试用版可能已经过期,因此即使他们已经安装了一段时间,他们也只有几次尝试吸引使用应用程序。激活天数/天数使他们养成了使用应用程序执行任务的习惯,并且还增加了销售量(即我们已使用此应用程序30次...)。
更好的是,限制功能比超时更好。例如,摄影应用程序可能会将用户限制为1兆像素的图像,但允许他们使用它们的时间尽可能长。
此外,请考虑将应用定价为20美元(或者19.95美元)。除非已经有小额支付设置(例如iPhone商店或者XBoxLive等),否则人们倾向于在低于某个价格点(取决于应用程序的类型,约为20美元)在线购买东西,人们会潜意识地东西很便宜,但一定不是很好。实际上,我们可以以更高的价格提高转化率(当然可以提高价格)。