如何将.NET EXE反编译为可读的C#源代码?

Mus*_*sis 254 .net c# decompiling reverse-engineering

几年前我为客户编写了一个C#应用程序,但我不再拥有源代码.我所拥有的只是我在客户端PC上部署的EXE.有没有办法从EXE生成C#源代码?

GEO*_*HET 192

Reflector及其加载项FileDisassembler.

Reflector将允许查看源代码.FileDisassembler允许您将其转换为VS解决方案.

  • 当我在FileDisassembler上做出答案时,FileDisassembler上的帖子出现了页面刷新:-)你赢了. (4认同)
  • 我的Reflector副本有一个"导出..."选项,我没有安装插件.它创建了一个包含所有源代码和资源的VS项目.那么为什么每个人都建议使用FileDisassembler?这个比较好? (4认同)

Dan*_*iel 142

当Red Gate说不再有.Net Reflector的免费版本时,我开始使用ILSpy和Telerik的JustDecompile.我发现ILSpy比JustDecompile(仍处于Beta版)更准确地反编译.红门已经改变了他们的决定,仍然有.Net Reflector的免费版本,但现在我喜欢ILSpy.

来自ILSpy网站(http://www.ilspy.net/):

ILSpy是开源.NET程序集浏览器和反编译器.

ILSpy功能

  • 装配浏览
  • IL反汇编
  • 反编译为C#
  • 支持lambdas和'收益率'
  • 显示XML文档
  • 节省资源
  • 搜索类型/方法/属性(子串)
  • 基于超链接的类型/方法/属性导航
  • 基础/派生类型导航
  • 导航历史
  • BAML到XAML反编译器
  • 将程序集另存为C#项目
  • 查找字段/方法的用法
  • 可扩展的插件(MEF)

更新:

2012年4月15日,ILSpy 2.0发布.与1.0版相比的新功能:

  • 装配清单
  • 支持反编译表达式树
  • 支持在nullables上提升操作员
  • 反编译为Visual Basic
  • 搜索由空格分隔的多个字符串(在ILSpy.exe中搜索"Assembly manager"会找到AssemblyListManager)
  • 单击局部变量将突出显示该变量的所有其他事件
  • Ctrl + F可用于在反编译代码视图中进行搜索

更新:

  • ILSpy 2.1支持异步/等待反编译


小智 65

Reflector一般不再免费,但他们确实免费向开源开发人员提供:http: //reflectorblog.red-gate.com/2013/07/open-source/

但是像DevExtras和JetBrains这样的公司创造了免费的替代品:

DevExtras CodeReflect

JetBrains DotPeek

  • 值得将Telerik JustDecompile添加到免费的.NET程序集反编译器列表中.http://www.telerik.com/justdecompile (7认同)
  • 反射器就像是35美元.打破银行,我知道,但它的价值是10倍. (5认同)
  • @StingyJack:很好,看起来他们听到了你的声音!如果你想要VS2012反汇编程序,现在实际价格为368美元.:/ (3认同)
  • 我并不因为他们赚钱而反对他们,但@Daniel 的答案中提到的 ILSpy 就是我现在使用的。 (2认同)
  • 现在标准版售价 100 美元,与 Visual Studios 集成的版本售价 200 美元。这是一个非常高的通货膨胀率。尽管他们确实向开源开发人员免费提供了一些东西:http://reflectorblog.red-gate.com/2013/07/open-source/ (2认同)

Pro*_*ofK 35

Denis Bauer的Reflector和File Disassembler插件.它实际上是从程序集生成源项目,其中Reflector本身只显示反汇编的源代码.

ADDED:我最近的最爱是JetBrains的dotPeek.


小智 28

Telerik JustDecompile是免费的,具有从.NET程序集创建项目的功能.


yoy*_*oyo 24

我很惊讶没人提到微软的ildasm.它可能不如ILSpy或Reflector那么漂亮,但它随Visual Studio一起提供,因此许多开发人员已经拥有它.

运行它(假设VS 2013,其他版本应该类似):

  1. 选择"开始">"所有程序">"Visual Studio 2013"​​>"Visual Studio工具".
  2. 双击VS2013的开发人员命令提示符.
  3. 从生成的命令提示符运行"ildasm".
  4. 在该工具中,选择"文件">"打开",然后打开可执行文件或DLL.

现在您可以导航DLL结构.双击类成员以查看IL.使用"文件">"转储"将IL导出到文件.

  • 我从未声称ildasm是那里最好的选择,只有它可用并且有效.¯\ _(ツ)_ /¯ (4认同)

Luk*_*ell 14

你想要反射器.


小智 12

我很惊讶没有人提到dnSpydnSpy是一个调试器和 .NET 程序集编辑器。即使您没有任何可用的源代码,您也可以使用它来编辑和调试程序集。

主要特点:

  • 调试 .NET 和 Unity 程序集
  • 编辑 .NET 和 Unity 程序集
  • 浅色和深色主题

它是开源的,也是最广泛使用的点网逆向工程工具之一。


Pat*_*eam 8

现在(2022 年)有各种可用的 .NET / C# 反编译器:

我更喜欢 ILSpy,因为它是免费的 OSS,速度非常快(与其他软件相比),维护得很好,甚至可以被 Visual Studio 使用,并且反编译的代码是准确的。这篇博文In the Jungle of .NET Decompilers详细解释了所有这些 .NET 反编译器。