13

我为摄影师编写了一个实用程序,我打算在网上以相当便宜的价格(10 美元)出售它。我想让用户在申请许可证之前试用该软件一周左右。由于这是一个个人项目,而且软件不是很贵,我认为购买专业许可提供商的服务不值得,我自己动手。

当前,该应用程序检查包含加密字符串的注册表项,该字符串指定试用期何时到期或它们具有有效许可证。如果密钥不存在,则会创建试用期密钥。

因此,您只需删除注册表项即可免费获得一周的时间。我不认为很多用户会这样做,尤其是当应用程序只有 10 美元时,但我很好奇是否有更好的方法来做到这一点,这对合法用户来说并不麻烦。我正常编写网络应用程序,以前没有处理过这些东西。

该应用程序位于 .NET 2.0 中,如果这很重要的话。

4

10 回答 10

15

编辑:通过将注册表信息存储在本地安全机构 (LSA) 中,您可以使当前的许可方案更难破解。大多数用户将无法从那里删除您的关键信息。在 MSDN 上搜索 LSA 应该会为您提供所需的信息。

对许可方案的看法因人而异,开发人员之间的看法比特定用户群体(例如摄影师)更多。考虑到您的应用程序将解决的业务需求,您应该深呼吸并尝试看看您的目标用户会接受什么。

这是我对这个问题的个人看法。会有不同意的声音个人。

这个问题的答案很大程度上取决于您希望如何使用您的应用程序。如果您希望该应用程序每天被使用多次,那么您将从很长的试用期(几个月)中获益最多,从而造成锁定情况。为此,您必须有一个宽限期,软件会提醒用户很快需要付款。在宽限期之前,如果软件对试用期保持沉默,您将获得更大的成功。

你是否选择相信这个相当大胆的声明当然完全取决于你。但是如果你这样做了,你应该意识到你的应用程序被使用的频率越低,试用期就越短。付款对用户来说非常快速和容易(尽可能少的数据输入和尽可能少的点击)也非常重要。

如果您对应用程序的使用情况非常不确定,您应该选择非常短的试用期。根据我的经验,如果应用程序对在这种情况下处于试用期这一事实保持沉默,您将获得更好的结果。

尽管对许可目的有效,但“Call home”功能被许多人视为隐私威胁。我个人不同意这样的观点,即这对于愿意为他/她正在使用的软件付费的客户来说是一件坏事。因此,我建议实施一种许可方案,让应用程序定期检查许可状态(试用、付费),并在需要时帮助用户为软件付费。但是,对于小型实用程序应用程序来说,这可能有点过头了。

对于非常小的甚至简单的实用程序应用程序,我认为无需试用期的预付款是最有效的。

关于解决方案的安全性,您必须使其与开发工作成正比。在我的工作中,安全是非常关键的,因为有合作伙伴和经销商参与,因为在开发上的投资非常高。对于小型实用程序应用程序,正确定价并依靠诚实的用户为满足其业务需求的软件付费更有意义。

于 2008-09-19T18:43:44.810 回答
11

做复杂的保护方案没有多大意义。基本上会发生以下两种情况之一:

  1. 你的应用程序不够流行,没有人破解它。

  2. 您的应用程序变得流行,有人破解并发布它,然后任何知识为零的人都可以简单地下载该破解程序,如果他们想欺骗您。

在 #1 的情况下,不值得在计划中投入大量精力,因为您可能会让一两个额外的人购买您的应用程序。在#2的情况下,不值得付出很多努力,因为无论如何都会有人破解它,而努力会白费。

基本上我的建议是做一些简单的事情,就像你已经做的那样,这同样有效。不想欺骗/偷窃你的人会付出代价,想欺骗你的人无论如何都会这样做。

于 2008-09-19T18:31:48.253 回答
4

如果您将主页托管在您控制的服务器上,您可以让软件的可下载试用版每晚自动编译为新的二进制文件。此编译将在软件到期时替换程序中的硬编码日期时间值。这样,“作弊”的唯一方法就是更改计算机上的日期,而大多数人不会这样做,因为会产生问题。

于 2008-09-19T18:31:57.800 回答
3

试试共享软件入门工具包。它是我的 Microsoft 开发的,可能具有您想要的其他一些功能。

http://msdn.microsoft.com/en-us/vs2005/aa718342.aspx

于 2008-09-19T18:39:48.313 回答
2

如果你打算继续开发你的软件,你可以考虑勒索模型:

http://en.wikipedia.org/wiki/Street_Performer_Protocol

本质上,您开发了对软件的改进,然后在发布它们之前要求一定数量的捐款(没有任何 DRM)。

于 2008-09-19T18:34:57.920 回答
2

一种对用户来说很容易但对您来说并不容易的方法是硬编码到期日期并不时制作新版本的安装程序...... :)

如果我是你,我不会让它比你已经在做的更先进。就像你说的只有 10 美元,如果有人真的想破解你的系统,不管你做得多么复杂,他们都会这样做。

您可以通过要求网络连接并让服务器生成试用密钥来对您的方案进行稍微高级的版本。如果您按照 sign(hash(unique_computer_id+when_to_expire)) 的方式执行某些操作,并让应用程序使用公钥检查您的服务器已签署过期日期,则它应该需要“真正的”破解才能绕过。

这样,您可以存储唯一 ID 的服务器端并拒绝生成超过一次或两次的到期日期。不确定使用什么作为唯一 ID,但应该有一些方法可以从 Windows 中获得有用的东西。

于 2008-09-19T18:39:24.680 回答
2

我以非常低的价格出售的应用程序也面临同样的问题。

除了混淆应用程序之外,我还想出了一个系统,它使用注册表中的两个密钥,其中一个用于确定安装时间,另一个是实际的许可证密钥。密钥的命名不明确,缺少密钥表示安装被篡改。

当然,删除这两个密钥并重新安装应用程序将再次开始评估时间。

我认为无论如何都没有关系,因为想要破解应用程序的人会成功地这样做,或者找到成功的人破解。

所以最终我只是实现了让破解应用程序变得不太容易的目标,我猜这将阻止 80-90% 的客户这样做。毕竟:由于该应用程序以非常低的价格出售,我没有理由在这个问题上投入比我已经拥有的更多的时间。

于 2008-09-19T18:43:19.177 回答
2

对许可证保持冷静。预先解释这是你的激情和你的劳动成果。让人们有机会做正确的事。如果有人想盗版它,它最终会发生。我仍然记得看到我在 bittorrent 上的书时的绝望,但这是你必须处理的事情。不要屈服于随意的盗版(你现在正在做的事情听起来很棒),但不要削弱除此之外的东西。我仍然相信,有足够多的诚实的人来进行以营利为目的的编码工作。

于 2008-09-19T18:48:43.033 回答
2

不要根据“安装后的天数”进行评估,而是根据使用天数、运行次数或类似情况进行评估。人们倾向于下载共享软件,运行一次或两次,然后在几周内忘记它,直到他们再次需要它。到那时,试用版可能已经过期,因此即使他们已经安装了一段时间,他们也只尝试过几次就迷上了使用您的应用程序。相反,激活/天数让他们养成使用您的应用程序执行任务的习惯,并且还可以提高销售量(即您已使用此应用程序 30 次......)。

更好的是,限制功能比超时更好。例如,也许您的摄影应用程序可以将用户限制为 1 兆像素的图像,但让他们可以随心所欲地使用它。

此外,考虑将您的应用定价为 20 美元(或 19.95 美元)。除非已经有小额支付设置(如 iPhone 商店或 XBoxLive 之类的),否则人们往往会厌恶在某个价格点以下(大约 20 美元,具体取决于应用程序的类型)在线购买东西,并且人们会下意识地假设如果东西不贵,一定不是很好。您实际上可以以更高的价格提高转化率(当然可以达到一定程度)。

于 2008-09-19T19:02:19.523 回答
1

在这种情况下,我真的认为你做什么并不重要。如果您有某种保护,它将阻止 90% 的用户。剩下的 10%——如果他们不想为您的软件付费,无论您做什么,他们几乎都会找到绕过保护的方法。

如果你想要一些不太明显的东西,你可以在 System32 中放置一个听起来像系统文件的文件,应用程序会在启动时检查它的存在。这可能有点难以追踪。

于 2008-09-19T18:31:26.210 回答