我怎样才能保护我的.NET程序集反编译?

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

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

编辑:

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

要记住的一件事是,你想以一种有商业意义的方式来做到这一点。 要做到这一点,你需要确定你的目标。 那么,你的目标究竟是什么?

防止盗版? 这个目标是不可实现的。 即使是本地代码也可以反编译或破解; 在线提供的众多warez(即使是Windows和Photoshop等产品)也certificate了黑客可以随时获得访问权限。

如果你不能防止盗版,那么只是减less盗版呢? 这也是错误的。 只有一个人破解你的代码,才能让所有人都能使用它。 每次你都要幸运。 海盗只需要运气一次。

我把它给你的目标应该是最大化利润。 你似乎认为,为了这个努力,停止盗版是必要的。 不是这样。 利润就是收入减去成本。 阻止盗版增加了成本 。 这需要付出努力,这意味着在这个过程的某个地方增加成本,从而减less了这一方程式的一面。 保护您的产品也不会增加您的收入。 我知道你看所有这些海盗,看看你可以赚的所有的钱,只要他们支付你的执照费,但事实是,这是永远不会发生的。 这里有一些夸张的说法,但是一般认为,无法破解安全的海盗会find类似的产品,可以破解或者没有。 他们永远不会购买它,因此他们不代表销售损失。

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

一个更好的策略是假定你的产品将被盗版,并想办法利用这种情况。 有关该主题的更多链接:
我如何防止我的代码被盗取?
保护.NET应用程序

在这里我们使用PreEmptive Solutions的Dotfuscator 。

尽pipe保护.NET程序集是不可能的,但是我认为Dotfuscator已经足够了。 我带了很多混淆技术。

十字大会重命名
重命名计划
重命名前缀
增强过载感应
增量混淆
HTML重命名报告
控制stream程
stringencryption

事实certificate,他们并不是很贵的小公司。 他们对小公司有特殊的定价。

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

当然有免费的替代品;

在任何云服务提供商处托pipe您的服务。

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

几乎描述了整个情况。

在某些时候,代码将不得不被翻译成虚拟机字节码,然后用户可以得到它。

机器代码也没有太大的不同。 一个好的交互式反汇编程序/debugging器像IDA Pro几乎可以使任何本地应用程序透明。 debugging器足够聪明,可以使用AI来识别公共API,编译器优化等。它允许用户精心地从机器代码生成的程序集中重build更高级别的构造。

而且IDA Pro也支持.Net。

老实说,在做了一个逆向工程(兼容性)项目几年之后,我从中获得的主要经验是我可能不应该过多担心盗取我的代码的人。 如果有人想要,不pipe我实施什么scheme,都不会很难得到它。

我知道你不想混淆,但也许你应该检查出dotfuscator ,它会把你编译的程序集,并为你混淆它们。 我认为它甚至可以encryption它们。

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

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

最好的方法可以帮助你(但记住他们也不是完全教授)是使用混合代码,用非托pipe语言编写你的重要代码,并在C或C ++中制作一个DLL,然后用Armageddon或Themida来保护它们。 Themida不是针对每一个黑客,它是市场上最好的保护者之一,它也可以保护你的.NET软件。

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

我听说过一些直接将IL编译成本地代码的项目。 你可以从这篇文章中得到一些额外的信息: 是否有可能编译.NET IL代码到机器代码?

如果你想完全保护你的应用程序免受反编译,看看阿拉丁的Hasp。 您可以将程序集封装在只能由应用程序访问的encryptionshell中。 当然,人们想知道他们如何能够做到这一点,但它的工作原理。 我不知道他们是否保护你的应用程序免受Crack.NET能够做到的运行时附件/reflection。

– 编辑也要小心编译为本地代码作为解决scheme…也有本地代码的反编译器。

如果有人窃取你的代码,这可能意味着你的商业模式不起作用。 这是什么意思? 例如,我购买你的产品,然后我要求支持。 你太忙或相信我的要求是无效的,浪费你的时间。 我解码您的产品,以支持我的相关业务。 您的产品对我来说变得更有价值,我优先考虑我的时间来解决利用您的产品的商业模式。 我重新编码和重新标记你的产品,然后出去赚钱,你决定离开桌子上。 有保护代码的原因,但最有可能的是从错误的angular度来看问题。 你当然是。 你是“编码员”,我是商人。 ;-)干杯!

PS。 我也是一名开发人员。 即“编码器”

你API吗?

与其试图在您的所有客户设备上的某个产品中保护您的一个ddl文件,为什么不为您的宝贵产品function创buildAPI服务? 让设备上保存的实际产品使用该API来按需交付产品。

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

当然还有更多的工作要做,但最后你还是可以控制的。