32

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

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

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

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

任何防止这种情况的建议都是最受欢迎的。

4

10 回答 10

28

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

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

你永远不会打败专家破解者 - 他们会将你的安全视为一个智力难题,仅凭挑战就可以解决。

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

坐下来看看电子表格,看看可能出现的情况——危险可能比你想象的要小。

任何用户都可以在您的软件中看到“易用性”等因素,因此您认为它很容易复制。但是,良好的用户体验很少见(而且很少被复制),因为大多数开发人员(包括我自己)都不像典型用户。

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

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

于 2009-08-16T10:22:42.290 回答
7

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

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

但其次

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

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

这里有一些:

编辑:在搜索去混淆工具时,我遇到了一个开源工具De4Dot。该工具支持反编译由大多数商业工具创建的混淆 dll,并且做得非常好。

于 2009-08-14T05:54:24.797 回答
1

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

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

于 2012-12-19T05:32:15.763 回答
0

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

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

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

希望这可以帮助

于 2010-05-03T22:51:08.473 回答
0

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

于 2009-08-14T08:45:03.253 回答
0

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

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

于 2009-08-14T05:56:02.500 回答
0

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

于 2009-08-14T05:56:27.867 回答
0

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

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

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

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

于 2009-08-14T06:09:45.577 回答
0

隔了好久才写这个贴。我们购买了一款名为Intellilock的软件,它有助于防止反编译、混淆,并且具有强大的许可模块。

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

于 2010-05-29T11:19:53.277 回答