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

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

reflection器及其加载FileDisassembler 。

reflection器将允许查看源代码。 FileDisassembler将允许您将其转换成VS解决scheme。

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

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

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

ILSpy特性

  • 大会浏览
  • IL拆卸
  • 反编译为C#
  • 支持lambdas和“收益回报”
  • 显示XML文档
  • 节省资源
  • searchtypes/方法/属性(子string)
  • 基于超链接的types/方法/属性导航
  • 基本/派生types导航
  • 导航历史
  • BAML到XAML反编译器
  • 将程序集保存为C#项目
  • 查找字段/方法的用法
  • 可扩展的插件(MEF)

更新:

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

  • 组件列表
  • 支持反编译expression式树
  • 支持解除可运算的运算
  • 反编译为Visual Basic
  • search由空格分隔的多个string(在ILSpy.exe中search“Assembly manager”将findAssemblyListManager)
  • 点击一个局部variables将突出显示该variables的所有其他事件
  • 可以使用Ctrl + F在反编译的代码视图中进行search

更新:

  • ILSpy 2.1支持asynchronous/等待反编译

一般来说,Reflector不再免费,但它们可以免费提供给开源开发者: http : //reflectorblog.red-gate.com/2013/07/open-source/

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

DevExtras CodeReflect

JetBrains DotPeek

Reflector和来自Denis Bauer的文件反汇编程序加载项。 它实际上从程序集生成源项目,其中Reflector自己只显示反汇编的源代码。

ADDED:我最喜欢的是JetBrains的dotPeek 。

Telerik JustDecompile是免费的,并具有从.NET程序集创build项目的function。

我很惊讶没有人提到微软的ildasm 。 它可能不像ILSpy或Reflector那样漂亮,但Visual Studio自带了很多开发者已经拥有它。

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

  1. select开始>所有程序> Visual Studio 2013> Visual Studio工具。
  2. 双击VS2013的开发人员命令提示符。
  3. 从生成的命令提示符运行“ildasm”。
  4. 在该工具中,selectFile> Open并打开您的可执行文件或DLL。

现在你可以导航DLL结构。 双击class级成员查看IL。 使用文件>转储将IL导出到文件。

你想要reflection器 。