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


259

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


2
好。看这里... Teleriks JustDecompile实际上反编译了Red Gates Reflector完全拧紧的DLL ... Reflector有很多问题... JustDecompile ...到目前为止没有问题...
Marc Johnston

1
我使用JustDecompile已有很长时间了,它真的很擅长反编译和打包源文件,以准备编译csproject。它确实在开发中非常活跃,在其仓库中
David Chelliah

Answers:


194

Reflector及其附加FileDisassembler

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


4
我的Reflector副本具有“导出...”选项,并且我没有安装任何插件。它使用所有源代码和资源创建一个VS项目。那么为什么每个人都建议FileDisassembler?这个比较好?
卢卡斯

卢卡斯:开箱即用,我还没有看到反射镜能够做到这一点。FileDisassembler一直是唯一的方法。我想这在最近的历史中可能已经改变。我会看看。
GEOCHET

节省生命!笨屁股TFS删除了我的项目。尽管我确实告诉TFS删除了自己,但没想到它会从本地文件系统中删除项目。都一样谢谢 x
Christo

FileDisassembler在哪里?:/
汤姆·斯蒂克2015年

它仅适用于.Net框架。任何适用于.Net core 3.0 exe的工具?
Somnath Kadam19年

144

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

从ILSpy网站(https://github.com/icsharpcode/ILSpy/):

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

ILSpy功能

  • 装配浏览
  • IL拆卸
  • 反编译为C#
  • 支持lambda和“收益率回报”
  • 显示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支持异步/等待反编译

1
我正在使用2.2,它支持反编译为IL,VB.NET和C#。我发现这非常有用。
VoteCoffee 2014年

1
Telerik似乎有兴趣从其上运行的计算机收集可疑信息,并且ILSpy无法从源代码进行编译。同样,ILSpy二进制文件混合了变量名,并在源代码中添加了一些奇怪的字符。
AaA

1
请注意,ILSpy包含Visual Studio加载项。对于ILSpy 2.4,我添加了从Visual Studio源代码直接导航到反编译输出的功能。不幸的是,有一些最新的修补程序现在已合并到ILSpy主线中,但没有发布2.4版本。
yoyo

辉煌!有一家软件公司向人们收取一次100英镑的费用,让他们使用服务器上的“特殊”工具来解决问题。设法获得他们在连接时使用的工具的副本,然后设法非常轻松地使用ILSpy来获得工具的解锁密码。不再窃取客户!
user2924019

ILSpy是最好的一个
Pritam

65

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

但是,像DevExtras和JetBrains这样的一些公司创造了免费的替代方案:

DevExtras CodeReflect

JetBrains DotPeek


5
Reflector就像35 $。打破我所知的银行,但其市值是其的10倍。
StingyJack 2011年

7
值得将Telerik JustDecompile添加到免费的.NET程序反编译器列表中。telerik.com/justdecompile
Todd,

3
@StingyJack:太好了,好像他们听到了你的声音!如果您想要VS2012拆卸器,现在它的价格实际上是10,价格为368美元。:/
DeepSpace101

1
我不反对他们赚钱,但是@Daniel的答案中提到的ILSpy是我现在正在使用的。
StingyJack

1
现在,标准版的价格为100美元,与Visual Studios集成的版本的价格为200美元。那真是通货膨胀率的高低。虽然他们提供免费的东西给开源开发者:reflectorblog.red-gate.com/2013/07/open-source
VoteCoffee

35

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

添加:我最近的最爱是JetBrains的dotPeek


我喜欢dotPeek允许轻松地处理整个文件夹,但是到目前为止,它们仅反编译为c#。大多数其他反编译器也执行vb和IL。它也仅支持Net 4.5,而Telerik支持4.5.1
VoteCoffee 2014年

所以dotPeek是完全免费的,还是对付费版本有限制?我在jetbrains网站上看不到任何有关它的信息。
batmaci

29

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


Telerik提供了反编译为VB.NET,IL或C#.NET的功能,我认为这很有用。它还会自动选择框架,并具有可用于消除混淆的插件。此外,它还支持.NET 4.5.1。看起来还不错。
VoteCoffee 2014年

1
我在本文中尝试了所有解决方案,而JustDecompile是唯一适合我的解决方案。
Alvaro Pereira

24

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

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

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

现在,您可以浏览DLL结构。双击班级成员以查看IL。使用文件>转储将IL导出到文件。


我发现IL DASM有点野蛮。它显示了树,但是右键单击却无济于事。再加上导出到文件的转储基本上是垃圾。看一下,它甚至对远程帮助有什么帮助?
汤姆·斯蒂克

4
我从来没有说过ildasm是那里最好的选择,只是它可用并且可以工作。¯_(ツ)_ /¯–
yoyo

不,不会害怕。
yoyo'1

我真的很惊讶dotPeek不允许我在整个大会中搜索我知道在那里的字符串。ildasm可能不是很漂亮,但至少它具有转储选项,可以帮助我找到包含要查找的字符串的类。
·霍尔斯默

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.