C#反编译器?

标签 c# .net

<分区>

这是真的吗? 有人可以从 MSIL 反编译我用 C# 编写的代码吗? 来自 .exe 文件?

最佳答案

大部分是真的。一位名叫 Lutz Roeder 的非常聪明的程序员编写了一个出色的反编译器,名为 Reflector (现在归 redgate 所有)。它非常擅长将 IL 转换回 C# 或 VB.NET 代码。这不是完全的魔法,它不能

  • 将常量转换回它们的常量标识符
  • 恢复局部变量的名称
  • 反编译中间形式的匿名方法
  • 如上所述反编译迭代器
  • 如上所述反编译lambda
  • 反编译使用 promise 的 C# 5 async 和 await 关键字的代码,如上所述
  • 恢复代码中的注释。

并且有一些错误使它不得不使用 goto 语句或失败。它在其他方面非常用作调试辅助工具,可帮助您发现和诊断您未编写的代码中的错误。没有文献记载任何人使用它从反编译获得的盗版源代码开始成功的业务。它的效果太好了。

否则,它已经为“混淆器”开辟了一个活跃的市场领域,混淆器是一种重写程序集内容以使其难以反编译的工具。典型的策略是重写标识符,使它们变得很难解释和/或修改程序集的结构,这样反编译器会崩溃但 CLR 不会。 Reflector 的当前所有者 Redgate 也销售混淆器。 Visual Studio 付费许可证中包含一个,称为“Dotfuscator Community Edition”。不知道它有多好,这从来没有经过测试。

只需在代码中使用大量 lambda 和迭代器就已经是混淆代码的极佳方法。将其逆向工程为原始代码非常困难。 Lutz 在同一时间放弃 Reflector 并非巧合,那是 C# 变得太难可靠地反编译的时候。

关于C#反编译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4480091/

相关文章:

c# - 覆盖基类中定义的属性

c# - 在 .NET 7 中使用具有最少 API 的 MapGroup

c# - 将表达式树转换为多项式形式的算法

C# Visual Studio 以另一种方式打开上下文菜单?

C# 数学应用程序的哪种数字类型?

c# - 在字符串列表中查找与输入字符串最接近的匹配项

c# - C# 3.0 代码与 .NET 4.0 的兼容性如何

c# - DotNetOpenId openIdRelyingParty 设置

c# - Swig c++/c# 不断获取 "Type Initialized Exception"

c# - IHttpModule 和控制台应用程序的流畅 NHibernate 模式