【问题标题】:Protecting a high value C# application with only one user保护只有一个用户的高价值 C# 应用程序
【发布时间】:2010-12-23 20:21:24
【问题描述】:

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

我知道没有完美的保护方案,并且我已经查看了许多关于 SO 的类似问题,但我的问题有点不同,因为我只有一个客户端,我可以完全访问他们的硬件,但我没有不介意每次安装花费几个小时来显着提高安全性。

【问题讨论】:

  • 它是桌面还是 ASP.NET 应用程序?
  • 您能否提供有关您想要防止的“攻击”级别的上下文,例如如果一切都很糟糕,您是否希望他们积极尝试破解您的保护计划,或者这是否更能防止随意的“不要将副本分发给其他人”的滥用?
  • 另外,提及您期望攻击者(以及他们招募的任何人)的技术复杂程度也会有所帮助。您是否试图阻止有人对您的应用运行反射器之类的工具,剥离保护并重建它?
  • 我很好奇:如果你的合同允许的话,你有什么样的应用程序那么好?
  • 响应cmets:它是一个桌面应用程序。如果一切都很糟糕,我希望他们会积极尝试破解我的保护计划。我希望我的攻击者是技术复杂的“雇佣枪”。该应用程序包含数十年来获得的专业领域知识。

标签: c# protection


【解决方案1】:

对于 10K/月,您可以负担得起在您管理的硬件上而不是在他们的硬件上运行它。您可以将您的硬件放在他们无法物理访问的数据中心。


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

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

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

【讨论】:

  • 硬件必须在客户现场的硬件上运行。
  • 我编辑了我的答案以引用各种现有的许可软件。
【解决方案2】:

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

锁定应用程序

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

混淆

...所以逆向工程和删除您的许可将更加困难。 CIL 非常容易进行逆向工程,因此无论您做什么,这都应该是您的应用程序(如所述)的重点。这可能需要很长时间才能正确处理,尤其是在您依赖序列化的情况下。如果可能,将所有程序集包装到一个 EXE 文件中,该文件已加密并具有非托管引导程序。

发出心跳

…到异地服务器,带有硬件或站点特定数据。如果该软件被复制并在另一台计算机上启动,您可能会得到提示。如果应用程序脱机,这也有可能提醒您。此外,您可以将应用程序配置为要求您的服务器提供基本的加密响应或关闭。

最后一点:不要太过分。据推测,由于您的应用程序在可能的替代方案(无论是什么)方面的经验,您将获得 10,000 美元的报酬。当您添加保护措施时,您会增加可能的(非常烦人的)错误的数量,增加维护成本,并让您的客户感到头疼。具有严重破坏性的许可方案可能会让您的客户产生不同的想法。

【讨论】:

    【解决方案3】:

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

    1. 在您控制的服务器上运行应用程序,更新应用程序使其仅在该系统上运行,并授予他们远程桌面访问权限
    2. 使程序与您控制的远程订阅和授权系统联系(尽管这可以通过逆向代码来规避)

    旁注:该死,我需要找到一个每月支付 1 万美元购买软件包的客户!哈哈。

    【讨论】:

    • 应用程序有一个高性能的 GUI 组件,需要在本地运行。
    【解决方案4】:

    安全是一个过程。

    我质疑为什么有人会为申请每月支付 10k。复制此应用程序的功能可能不会花费那么高的成本。那么如果使用它的实体向另一个程序员描述它,他们可以复制它吗?大概吧。

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

    【讨论】:

    • 如果应用程序的工作月薪超过 10k,这是一个完全合理的提议。
    • @Mathias - 我同意,但这似乎好得令人难以置信。即使每月节省 10k,什么样的商人会每月支付 10k 而不是一次性付款,尤其是软件方面。需要那么多维护吗?对他们谈判这笔交易的 OP 有好处。会持续多久?
    【解决方案5】:

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

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

    This link 可能是您检查此内容的良好开端。

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

        这听起来像是硬件加密狗可能适合的情况。花钱请人创建一个硬件加密狗(听起来你买得起!)并将一个发送给客户。构建您的软件,使用户必须输入密码才能解锁软件需要运行的加密狗上的加密内容。

        认证一般至少基于用户情况的两个方面:

        1. 你是什么(生物识别技术)
        2. 拥有的东西(加密狗)
        3. 知道的事情(密码)

        如果您想同时使用这三个功能,请将硬件加密狗与指纹读取器结合使用。

        【讨论】:

        • 这并没有解决 OP 在许可证到期时想要禁用该软件的问题。
        • 在这种情况下,在加密狗上嵌入一个到期日期(可能是一个将软件置于干扰软件模式的“软”日期,以及一个完全关闭它的“硬”日期),然后发送用户每个月或其他什么时候换一个新的加密狗。如果这还不够,请将以上所有内容与“电话回家”功能结合起来。
        • @ChrisW:可以,一些加密狗(如 Aladdin HASP 密钥)确实支持过期计时器,可以由供应商远程更新。
        • 加密狗不是和phone-home有完全相同的问题,即如果许可证检查不成功,黑客可以删除异常终止应用程序的代码吗?为了应对这种威胁,当操作系统由用户控制时,我能想到的唯一解决方案就是混淆......或者,也许,在所谓的更防黑客的加密狗上运行应用程序的某些关键部分本身。
        • @ChrisW:确切地说,我听说过一些应用程序在加密狗内部的 FPGA 中实现了一些关键计算(这使得它非常快)。该应用程序的“破解”副本甚至没有执行正确计算的代码,因此如果加密狗丢失,原始作者会替换一个不准确的算法版本,这看起来有效,但实际上并没有。跨度>
        【解决方案8】:

        过去,我在应用程序启动时使用了“电话回家”身份验证,以确保它只有在您的服务器给予身份验证时才能运行。

        当然,这要求您可以在您的身份验证服务器上提供非常高的可用性,并且具有良好的混淆代码库,但它工作得非常好。

        【讨论】:

          【解决方案9】:

          看文章Developing for Software Protection and Licensing;它解释了如何选择一个解决方案,为什么你应该混淆你的应用程序,并给出了一些让你的代码更难破解的技巧。

          本文的要点是,您应该从开发一开始就考虑这些事情,但解决它们永远不会太晚。

          要记住的是,一旦您的应用程序在另一台机器上运行,就没有 100% 保证阻止执行的方法。如果你小心的话,你能做的就是把门槛提高到足够高,这样购买你的软件比破解它更容易。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-03-01
            • 1970-01-01
            • 2012-05-17
            • 2013-01-11
            • 1970-01-01
            • 2016-05-09
            • 2013-04-23
            • 2020-03-03
            相关资源
            最近更新 更多