仅使用一个用户即可保护高价值的C#应用​​程序

时间:2009-12-07 00:15:30

标签: c# protection

我有一个应用程序 - 用C#编写 - 只有一个用户使用。我提供这个软件的月费非常高(> 10,000美元)。我想保护此应用程序不被任何其他用户使用,我希望能够阻止一个用户停止支付许可费用。

我知道没有完善的保护方案,我已经回顾过很多关于SO的类似问题,但我的问题有点不同,因为我只有一个客户端,我可以完全访问他们的硬件,而且我不喜欢每次安装时要花费几个小时才能大幅度提高安全性。

9 个答案:

答案 0 :(得分:12)

对于10K /月,您可以在您管理的硬件上运行它,而不是在硬件上运行它。您可以将硬件放在他们没有物理访问权限的数据中心中。


  

硬件必须在客户现场的硬件上运行。

所以,我猜他们对数据的位置很敏感。

有许多第三方许可解决方案(例如,Infralution,.Net Reactor,Oreans WinLicense,Armadillo,XHEO DeployLX,可能还有更多)。如果您对Microsoft自己的解决方案感兴趣,请参阅InishTech herehere

答案 1 :(得分:9)

最佳解决方案可能是当今使用的流行策略的组合:

将应用程序锁定

...到主机操作系统的MAC地址,硬盘序列号和Windows产品密钥(如果可用)。在网站上收集后,您可以将其硬编码到应用程序中。如果检测到错误的硬件,则将其关闭。此外,在注册表中查找建议存在VMware或Virtual PC集成功能的项目,并在找到时拒绝运行

模糊处理

...因此,逆向工程以及取消许可将更加困难。 CIL非常容易进行逆向工程,因此无论您做什么,这都应该成为您应用程序的重点(如上所述)。这可能需要花费大量时间才能正确,特别是如果您依赖序列化。如果可能,将所有程序集包装到一个加密的EXE文件中,该文件具有非托管引导程序。

发出心跳

...到具有硬件或站点特定数据的离线服务器。如果软件被复制并在另一台计算机上启动,您可能会收到提示。如果应用程序脱机,这也有可能提醒您。此外,您可以将应用程序配置为需要来自服务器的基本加密响应或关闭。

最后一点说明:不要过分。据推测,由于您的应用程序在可能的替代方案(无论是那些)上的经验,您的报酬是10,000美元。当您添加保护措施时,会增加可能(非常烦人)错误的数量,增加维护成本,并为您的客户带来麻烦。严重破坏性的许可方案可能会让您的客户不这么认为。

答案 2 :(得分:8)

真正保护您的代码并确保您可以为其收费的唯一方法是制作基于订阅的Web应用程序。除此之外,有几个选项可能有效:

  1. 在您控制的服务器上运行应用,更新应用以使其仅在该系统上运行,并授予他们远程桌面访问权限
  2. 使程序联系您控制的远程订阅和授权系统(尽管可以通过逆向工程代码来避免这种情况)
  3. 旁注:dang,我需要找一个客户,每个月我需要花10,000美元买一个软件包! LOL。

答案 3 :(得分:3)

安全是一个过程。

我质疑为什么有人会每月支付10k的申请费用。重复使用此应用程序的功能可能不会付出那么大的代价。那么如果使用它的实体将它描述给另一个程序员,他们可以复制它吗?可能。

无论如何,如果您可以访问他们的硬件,您可以控制他们的操作系统用户名/密码,只需让密码每个月过期。

答案 4 :(得分:3)

我将假设一个Windows平台(即不是Mono)。

您可能希望查看在安装了软件的计算机上生成和安装证书。这意味着您的软件可以检查机器是否有权运行您的软件,您也可以使用该证书来加密和解密内容。你可以看看加密你的程序集,然后在动态加载它们之前解密它们,或者你可以对你提供的任何数据使用加密/解密。

This link可能是你开始检查的好开始。

答案 5 :(得分:2)

您可以将应用绑定到该框中。您还可以通过向用户提供登录来限制用户使用。我不知道你可以做些什么来让你的用户与其他人分享他的凭据和盒子。

如果绑定到一个盒子就足够了,那么就有技术可以做到这一点 - 即你可以将它绑定到NIC硬件id。

答案 6 :(得分:2)

这听起来像硬件加密狗可能是合适的情况。付某人来创建一个硬件加密狗(听起来你可以负担得起!)并将一个发送给客户。构建您的软件,以便用户输入密码以解锁在您的软件需要运行的加密狗上加密的内容。

身份验证通常至少基于用户情况的两个方面:

  1. 的东西(生物识别技术)
  2. 拥有的东西(加密狗)
  3. 知道的东西(密码)
  4. 如果你想要全部三个,请将硬件加密狗与指纹识别器结合使用。

答案 7 :(得分:1)

过去,我在应用程序启动时使用了“手机归属”身份验证,确保只有在服务器进行身份验证时才能运行。

当然,这需要您可以在身份验证服务器上提供非常高的可用性,并且具有良好的模糊代码库,但它运行良好。

答案 8 :(得分:0)

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

文章的要点是,你应该从开发开始就考虑这些事情,但是解决它们永远不会迟到。

要记住的是,一旦您的应用程序在另一台计算机上运行,​​就没有100%保证阻止执行的方法。如果你小心的话,你能做的就是提高标准,以便更容易购买你的软件,而不是破解它。

强制性免责声明&插件:我共同创办的公司生产OffByZero Cobalt software licensing solution for .NET