【问题标题】:How to prevent decompilation of any C# application [closed]如何防止反编译任何 C# 应用程序 [关闭]
【发布时间】:2010-11-19 13:26:57
【问题描述】:

我们计划使用 C# 和 MySQL 开发客户端服务器应用程序。我们计划像任何其他软件实用程序一样在货架上销售该产品。我们担心我们产品的反编译在可用性和捆绑功能方面确实比我们的竞争对手具有某种优势。

我们如何防止我们的软件被反编译,从而使产品的业务逻辑保持原样?

我们听说过 Reflector 和其他反编译器,它们使我们的代码很容易被复制。

我们的客户群不是企业而是医疗从业者,他们自己可能不会这样做,但我们的竞争对手可能想要复制/禁用许可,甚至复制代码/功能,这样我们的产品在市场上的价值就会下降。

欢迎提出任何防止这种情况的建议。

【问题讨论】:

  • 既然还没有人提到它,我想我会的:没有100% 万无一失的方法来防止软件反编译。如果有人真的想查看您的算法,他们将能够这样做。但是,您可以混淆您的代码,虽然这不会阻止反编译,但它会让人觉得很糟糕。 :)
  • 另外,请看这个问题:stackoverflow.com/questions/59893/…

标签: c# licensing obfuscation decompiling piracy-prevention


【解决方案1】:

如果您将 .NET 程序集部署到客户端计算机,则始终可以使用反射器和类似工具进行某种反编译。

但是,这种情况与您使用本机 C++ 编写应用程序时所遇到的情况并无本质区别。反编译总是有可能的——如果不可能,处理器也无法理解它。

您永远无法击败专家破解者 - 他们会将您的安全视为一个智力难题,仅凭挑战即可解决。

问题围绕着击败您的许可做法和投资回报的难度。

坐下来查看电子表格并查看可能的情况 - 危险可能比您想象的要小。

诸如“易用性”之类的因素在您的软件中都是可见的,任何用户都可以观察到 - 所以您会认为它很容易复制。但是,良好的用户体验很少见(而且很少被很好地复制),因为大多数开发人员(包括我自己)都不像普通用户。

我建议你专注于让饼干的工作变得更难,因为你永远无法让它变得不可能,只是无利可图。

一种尝试的可能性:作为安装过程的一部分,可以将程序集预编译为本机代码。 Paint.NET 出于性能原因这样做。我相信一旦你这样做了,你就可以丢弃原始程序集并使用优化的本机代码版本。

【讨论】:

  • 嗨,我听说使用普通 dll 预编译可能会出现问题。我们自己正在使用一些 8-9 个 3rd 方 dll 来实现我们的功能。这些行中的任何想法。
  • @Kalpak - 很抱歉,但我不知道。程序集的预编译是我读过的,但从未尝试过。
【解决方案2】:

如果是我,我不会试图混淆;我会:

  1. 不用担心,目标是不断改进并保持领先

其次

  1. 考虑通过 Web 提供“秘密”服务。由您决定这是多么重要和可能;但它确实“阻止”了反编译,因为最终用户甚至没有代码。

【讨论】:

  • 我喜欢这个主意。就在任何人使用该服务之前,他都可以通过身份验证,从而成为许可证持有者。
  • +1 尤其是不断改进并保持领先。
  • "甚至没有编译好的应用程序"*
【解决方案3】:

Google for .NET 混淆器。你会发现很多产品可以在这方面有所帮助。 Stack Overflow 中也有相关问题。

这里有一些:

编辑:在搜索去混淆工具时,我发现了一个开源工具De4Dot。这个工具支持反编译大多数商业工具创建的混淆 dll 并且做得很好。

【讨论】:

  • 我们尝试了几个混淆器,但在某些情况下它们都失败了。我们正在使用在 delphi 中开发的一些 3rd 方 dll。所以一些混淆器对此有疑问。因此,混淆器在从数据库填充的下拉列表中存在问题。我不知道我们是否做错了,但肯定我们已经尝试了 4-5 个混淆器,但没有一个能让产品像在 Visua 工作室中那样工作。此外,我们正在使用 log4net 进行日志记录。我们如何处理这些消息。
  • 如果您真的希望您的代码不被读取,请使用 C++ 构建您的重要和关键 dll(如许可等)。否则尝试在本机模式下构建 C# dll(不确定这会提供多少保护)msdn.microsoft.com/en-us/library/6t9t5wcf%28VS.80%29.aspx.
  • 我听说一些并且可能很多混淆器已被黑客入侵并且毫无价值。我相信这对其他人来说只是时间问题。最好的防守是一次好的进攻并推动你的产品向前发展。
【解决方案4】:

Intellilock 在混淆和许可方面很好地满足了我们的目的。但我不会推荐该产品,因为支持不达标。对于我们面临的问题,我们从来没有及时得到答复。我们必须自行搜索和研究,甚至更改业务需求以实现某些目标。

通过这个答案,我不打算推​​广或降级任何软件,而只是想让人们了解我们正在使用的产品,以便他们做出明智的决定。

【讨论】:

    【解决方案5】:

    我上次研究这个时,Spices.Net Obfuscator 看起来是市场上最好的东西。

    不,我不为他们工作。 :)

    【讨论】:

    • “看起来像” - 你真的尝试过吗?
    【解决方案6】:

    我使用smartassembly。它使用简单,并且还能够将崩溃报告发回您内置的。

    【讨论】:

      【解决方案7】:

      其他人提到的混淆器可能非常好。

      您可能没有考虑过的另一种方法是使用完全编译为机器代码的语言(例如 C++)编写一些核心业务逻辑。

      这样做的好处是让别人更难反编译你的代码。这样做的一个缺点是您需要维护两种语言的代码。这可能不是适合您的情况的最佳方法,但在只需要对一小部分代码进行混淆而其余代码是 UI 绒毛的情况下很有用。

      例如,您的医疗软件包可能正在执行某些腺体的边缘检测,以告知医生该腺体的大小。从位图图像计算腺体大小的算法将包含在用 C++ 编写的 DLL 中。

      【讨论】:

      • 当然,这样做会违反您运行 100% 托管代码的能力,并且还会阻止您在中等信任等环境中运行。我想这取决于您的情况。
      【解决方案8】:

      回答您关于 .net 代码的 C++ 包装器的问题;我不认为它会起作用,因为当您部署应用程序时,包含业务逻辑代码的最终 c++ dll 和 .net dll 将是单独的实体,想要访问您的业务逻辑的人仍然能够挑选出.net dll 并查看内部。

      【讨论】:

        【解决方案9】:

        您可能需要考虑Remotesoft Salamander Protector 这比其他任何东西都好,因为它使得无法反编译成高级语言。

        当然,任何专家都可以花足够的时间研究你的软件并弄清楚它,因为它确实反编译了一些,但它隐藏了所有 set 和 get 方法

        所以,他们可以达到顶峰,但仅此而已。他们必须弄清楚其余部分,这会降低任何人破解它的可能性。

        希望对你有帮助

        【讨论】:

          【解决方案10】:

          很久以后在这个线程上写。我们购买了一个名为Intellilock 的软件,它有助于防止反编译、混淆,并且具有强大的许可模块。

          我们没有选择.Net Reactor,尽管它有更多的预防控制,因为 Intellilock 已经很好地满足了我们的目的。

          【讨论】:

            猜你喜欢
            • 2015-07-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-11
            • 2012-01-11
            • 2014-04-18
            • 2019-09-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多