保护WinForms应用程序建议

时间:2009-12-13 12:21:30

标签: c# licensing key protection software-protection

我一直在为用户寻找一个简单的密钥/许可证系统。其部分原因是为了阻止盗版(避免用户共享应用程序),另一半用于跟踪我们拥有的“许可用户”数量。我已经阅读了一些关于SO的好建议,但我很好奇人们如何实施30天的评估标准。

您是否生成了一个将日期存储在某处并在每次进行比较的密钥,或者它是否更复杂一些 - 删除文件/删除注册表不应该停用。

那里有任何示例实现可以让我先行一步吗?具有讽刺意味的是,我们的PM不希望许可第三方系统为我们做这件事。

这适用于Windows窗体应用程序。

5 个答案:

答案 0 :(得分:1)

您是否按Rhino-Licensing检查了Ayende Rahien项目。你还可以看到他关于licensing a commercial product的博客文章,这使他开发了这个解决方案。

答案 1 :(得分:0)

我不确定您是否可以实际保护.NET - 可能有商业解决方案可以解决问题。原因是.NET代码可以通过 Lutz Roeder 看到( 感谢Jasonh的抬头 )Red Gate的反射器(它是以前由上面的那个人)。处理它的最好方法是寻找代码混淆,这使得反映更加棘手,我可以指向一个我知道的地方免费提供 - Phoenix - NtCore.Com。

更深奥的解决方案是在C ++中创建.NET托管环境,加载二进制映像(可以加密)和托管环境而不是在内存中解密它 - 听说过这个理论但不确定如何在实践中完成。请不要使用自己的保护计划,因为可能存在缺陷。

有人曾经说过 - “通过默默无闻的安全”......

希望这有帮助, 最好的祝福, 汤姆。

答案 2 :(得分:0)

有两个独立的挑战:i。如何防止复制的应用程序运行。 II。如何防止用户撕掉/绕过您的预防方案。第一个通常是通过难以复制用户系统的签名(例如硬盘驱动器ID +处理器ID + RAM等)并将其用作种子/密钥并通过调用“home”在线激活它来完成。

第二个问题在.Net中更难做,因为源代码可以在某种程度上被提取和重新编译以排除您的保护系统。这里的关键是使购买许可证比在用户端删除保护更便宜。您可能会发现,对于大多数产品,建议使用自定义引擎来加密您的产品库,这些产品库也包含您的复制保护并在初始运行时对其进行解密,这可能就足够了。

答案 3 :(得分:0)

我参与了一个项目,通过在我们运行的外部服务器上放置一些关键功能(例如数据存储,报告或付款)来处理此问题,并要求用户登录此服务器以获取功能。 / p>

客户可以在本地进行备份,共享或运行应用程序,但要访问此关键功能,他们必须在我们的应用程序中键入密码并连接到我们的服务器。客户知道密码允许更改其数据,因此他们不希望与其他人共享密码。

这很方便,因为我们不关心应用程序中有多少应用程序,我们只跟踪服务器连接。我们在连接数据中包含了机器识别数据,如MAC地址,因此我们可以跟踪哪些机器正在连接。

答案 4 :(得分:0)

我不只是这样说,因为我的公司销售OffByZero Cobalt software licensing solution for .NET:你的PM应该知道软件许可很难做到,如果你自己推销,你会支持它可预见的未来。

查看文章Developing for Software Protection and Licensing;它解释了如何选择解决方案,为什么要对应用程序进行模糊处理,并提供一些结构化代码的技巧,以便更难破解。

特别是它指出绝大多数公司都应该外包其软件许可,因为将开发人员的时间花在构建和维护不是您的核心业务的复杂系统上是没有意义的。

对您的公司来说更重要的是:为您的产品添加一项重要的新功能,或者在破坏您的许可系统的古老版Windows上追踪一种特殊的权限行为?