如何保护我的C#代码不被反编译?

可能重复:
.Net混淆
.NET世界中混淆的替代方案

就在几分钟前,我读到有许多免费工具可以让你将C#.exe转换回VB解决方案。 这意味着我的专有代码可以被查看,编辑和重新编译/重新分发。 有办法防止这种情况吗?

简而言之,您需要使用Obfuscation 。 仅举几例。

  1. Dotfuscator的
  2. 混淆
  3. 溜冰者 (免费软件)
  4. DeployLX CodeVeil
  5. 此外,Visual Studio还附带了Dotfuscator的简易版本。

您可以阅读此MSDN 文章 ,其中提供了有关如何对代码进行模糊处理的建议。

你可以使用Obfuscator .. Salamander是.NET的一个这样的工具……

Confuser是.NET的另一个免费混淆器。 它是用C#开发并使用Mono

您可以使用mono将其编译为本机二进制文件,只需谷歌即可。

您还可以将敏感函数/组件编码为本机C ++,将其包装在C ++ / CLI中,并使用.NET以及混淆.NET程序集。

即使有混淆,JIT编译器最终也需要查看IL代码,你只是让反编译变得更加困难。

混淆器是一个不错的选择,因为它增加了人们查看,编辑,重新分发等代码的努力。

虽然这些代码不能在物理上保护您的代码,但它们可能会阻止反编译代码的行为:法律机制,如专利,版权和许可。

反编译或逆向工程是经济努力的一场战斗。 您是否值得对您的代码进行模糊处理(可能与reflection“陷阱”相冲突),是否值得对某人进行逆向工程(没有上下文)而不是模拟或重写?

对这个答案的评论, https://stackoverflow.com/a/1988467/64348 ,有几个人同意,表明混淆不会阻止回到原始(或原始的一些足够接近的版本)代码。 混淆只是可逆翻译的替代,除了一些有用的上下文之外不需要真正的密钥。