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

时间:2008-10-07 18:27:09

标签: c# .net reverse-engineering decompiling

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

8 个答案:

答案 0 :(得分:187)

Reflector及其加载项FileDisassembler

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

答案 1 :(得分:136)

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

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

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

ILSpy功能

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

<强>更新

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

  • 装配清单
  • 支持反编译表达式树
  • 支持举起无犯罪的操作员
  • 反编译为Visual Basic
  • 搜索以空格分隔的多个字符串(在ILSpy.exe中搜索“Assembly manager”会找到AssemblyListManager)
  • 单击本地变量将突出显示该变量的所有其他实例
  • Ctrl + F可用于在反编译代码视图中进行搜索

<强>更新

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

答案 2 :(得分:63)

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

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

DevExtras CodeReflect

JetBrains DotPeek

答案 3 :(得分:34)

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

增加:我最近的最爱是JetBrains'dotPeek

答案 4 :(得分:27)

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

答案 5 :(得分:24)

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

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

  1. 选择开始&gt;所有程序&gt; Visual Studio 2013&gt; Visual Studio工具。
  2. 双击VS2013的开发人员命令提示符。
  3. 从生成的命令提示符运行“ildasm”。
  4. 在该工具中,选择文件&gt;打开并打开您的可执行文件或DLL。
  5. 现在您可以导航DLL结构。双击类成员以查看IL。使用文件&gt;转储将IL导出到文件。

答案 6 :(得分:14)

你想要reflector

答案 7 :(得分:-1)

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

主要功能:

  • 调试.NET和Unity程序集
  • 编辑.NET和Unity程序集
  • 明暗主题

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