81

如果我开始使用 C# 时学到的第一件事是最重要的。您可以使用 Reflector 或其他工具反编译任何 .NET 程序集。许多开发人员没有意识到这一事实,当我向他们展示他们的源代码时,他们中的大多数人都感到震惊。

防止反编译仍然是一项艰巨的任务。我仍在寻找一种快速、简单和安全的方法来做到这一点。我不想混淆我的代码,所以我的方法名称将是 a、b、c 左右。反射器或其他工具应该根本无法将我的应用程序识别为 .NET 程序集。我已经知道一些工具,但它们非常昂贵。还有其他方法可以保护我的应用程序吗?

编辑:

我提出问题的原因不是为了防止盗版。我只想阻止竞争对手阅读我的代码。我知道他们会而且他们已经做到了。他们甚至这样告诉我。也许我有点偏执,但阅读我的代码的商业竞争对手并没有让我感觉良好。

4

13 回答 13

110

要记住的一件事是,您希望以一种具有商业意义的方式执行此操作。为此,您需要定义目标。那么,你的目标到底是什么?

防止盗版?这个目标是无法实现的。甚至原生代码也可以被反编译或破解;在线提供的大量warez(甚至对于Windows和Photoshop等产品)证明了一个坚定的黑客总是可以访问。

如果你不能阻止盗版,那么仅仅减少它怎么样?这也是误导。只需一个人破解您的代码,所有人都可以使用它。你必须每次都很幸运。海盗只需要幸运一次。

我给你的目标应该是利润最大化。您似乎相信制止盗版对于这项努力是必要的。它不是。利润只是收入减去成本。制止盗版会增加成本。这需要付出努力,这意味着在过程中的某处增加成本,从而减少等式的那一侧。保护您的产品也无法增加您的收入。我知道你看看所有那些海盗,看看如果他们愿意支付你的许可费,你能赚到的钱,但现实是这永远不会发生。这里有些夸张,但它通常认为无法破解您的安全的盗版者会找到他们可以破解或没有的类似产品。他们永远不会购买它,因此它们不代表销售损失。

此外,保护您的产品实际上会减少收入。有两个原因。一种是一小部分客户对您的激活或安全性有疑问,因此决定不再购买或要求退款。另一个是在购买之前实际尝试盗版软件以确保其正常工作的一小部分人。限制你的产品的盗版分销(如果你能在这方面取得成功的话)可以防止这些人尝试你的产品,因此他们永远不会购买它。此外,盗版还可以帮助您的产品传播给更广泛的受众,从而吸引更多愿意为此付费的人。

更好的策略是假设您的产品会被盗版,并考虑利用这种情况的方法。关于该主题的更多链接:
如何防止我的代码被盗?
保护 .NET 应用程序

于 2010-03-19T15:30:31.930 回答
16

在这里工作时,我们使用PreEmptive Solutions 的Dotfuscator

虽然不可能保护 .NET 程序集,但我认为 100% Dotfuscator 已经够难了。我自带了很多混淆技术;

跨程序集重命名 重
命名方案
重命名前缀
增强的重载归纳
增量混淆
HTML 重命名 报告
控制流
字符串加密

事实证明,它们对小公司来说并不是很贵。他们对小公司有特殊的定价。

(不,我不为 PreEmptive 工作;-))

当然有免费软件替代品;

于 2010-03-19T15:02:46.927 回答
13

在任何云服务提供商中托管您的服务。

于 2010-03-19T14:59:31.853 回答
10

如何防止任何 C# 应用程序的反编译

几乎描述了整个情况。

在某些时候,代码必须被翻译成 VM 字节码,然后用户就可以得到它。

机器代码也没有太大的不同。像IDA Pro这样好的交互式反汇编器/调试器 几乎可以让任何原生应用程序透明化。调试器足够智能,可以使用 AI 来识别常见的 API、编译器优化等。它允许用户从机器代码生成的程序集中精心重建更高级别的构造。

而且IDA Pro也在一定程度上支持.Net。

老实说,在从事逆向工程(为了兼容性)项目几年之后,我从我的经验中得到的主要信息是,我可能不应该太担心有人窃取我的代码。如果有人想要它,无论我实施什么方案,都不会很难得到它。

于 2010-03-19T14:59:05.927 回答
7

没有混淆器可以保护您的应用程序,甚至这里描述的任何一个都不能。看到这个链接,它是一个去混淆器,可以去混淆几乎所有的混淆器。

https://github.com/0xd4d/de4dot

可以帮助您的最好方法(但请记住,他们也不是完整的教授)是使用混合代码,用非托管语言编码您的重要代码,并使用 C 或 C++ 制作一个 DLL,然后使用 Armageddon 或 Themida 保护它们。Themida 并不适合所有破解者,它是市场上最好的保护器之一,它还可以保护您的 .NET 软件。

于 2013-10-22T18:43:37.220 回答
5

我知道您不想混淆,但也许您应该查看dotfuscator,它会获取您编译的程序集并为您混淆它们。我认为它甚至可以加密它们。

于 2010-03-19T15:02:35.723 回答
3

我听说过一些将 IL 直接编译为本机代码的项目。您可以从这篇文章中获得一些额外的信息: Is it possible to compile .NET IL code to machine code?

于 2010-03-19T14:59:38.547 回答
3

我们使用{SmartAssembly}对企业级分布式应用程序进行 .NET 保护,它对我们非常有用。

于 2010-03-19T15:01:55.460 回答
2

如果您想完全保护您的应用程序免受反编译,请查看 Aladdin's Hasp。您可以将程序集包装在只能由您的应用程序访问的加密外壳中。当然有人想知道他们是如何做到这一点的,但它确实有效。但是我不知道它们是否可以保护您的应用程序免受运行时附件/反射的影响,而这正是 Crack.NET 能够做到的。

-- 编辑 还要小心将编译为本机代码作为解决方案......也有本机代码的反编译器。

于 2010-03-19T15:00:55.603 回答
1

你有 API 吗?

与其尝试在所有客户设备上保护您的一种产品中的一个 ddl 文件,不如为您宝贵的产品功能创建一个 API 服务?让保存在设备上的实际产品使用该 API 来交付您想要的产品。

我认为这样你就 100% 确定你的代码没有被反编译,并且你在你的 API 中设置了你自己的限制,这样开发人员/黑客就不会以你不想要的方式使用你的 API。

当然还有更多的工作,但最终,你可以控制。

于 2015-12-29T18:53:13.150 回答
0

如果有人不得不窃取您的代码,这可能意味着您的商业模式行不通。我的意思是什么?例如,我购买了您的产品,然后寻求支持。您太忙或认为我的请求无效,浪费您的时间。我解码您的产品以支持我的相关业务。你的产品对我来说变得更有价值,我会优先考虑我的时间,以解决利用你的产品的商业模式。我重新编码并重新命名您的产品,然后出去赚您决定留在桌子上的钱。保护代码是有原因的,但很可能您是从错误的角度看待问题。你当然是。你是“编码员”,我是商人。;-) 干杯!

附言。我也是开发人员。即“编码器”

于 2013-06-19T13:58:14.427 回答
0

我知道这是旧的,但Themida是我用过的最先进的反破解软件。
不过,它不是免费的。

于 2018-02-20T19:37:39.870 回答
0

除了此处列出的第三方产品外,还有另一个产品:NetLib Encryptionizer。然而,它的工作方式与混淆器不同。混淆器使用内置的反混淆“引擎”修改程序集本身。Encryptionizer 在文件级别加密 DLL(托管或非托管)。因此它不会修改 DLL,除非对其进行加密。在这种情况下,“引擎”是位于应用程序和操作系统之间的内核模式驱动程序。(免责声明:我来自NetLib Security

于 2019-04-27T13:50:46.747 回答