几年前,我为客户编写了一个 C# 应用程序,但我不再拥有源代码。我所拥有的只是我在客户端 PC 上部署的 EXE。有没有办法可以从 EXE 生成 C# 源代码?
Reflector 及其插件 FileDisassembler。
反射器将允许查看源代码。 FileDisassembler 将允许您将其转换为 VS 解决方案。
当 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#
支持 lambdas 和“收益回报”
显示 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 支持 async/await 反编译
Reflector 一般不再免费,但他们确实免费向开源开发人员提供:http://reflectorblog.red-gate.com/2013/07/open-source/
但是像 DevExtras 和 JetBrains 这样的一些公司已经创建了免费的替代品:
反射器和 Denis Bauer 的 File Disassembler 插件。它实际上从程序集中生成源项目,其中 Reflector 仅显示反汇编的源。
补充:我最近最喜欢的是 JetBrains 的 dotPeek。
Telerik JustDecompile 是免费的,并且具有从 .NET 程序集创建项目的功能。
我很惊讶没有人提到 Microsoft 的ildasm。它可能不如 ILSpy 或 Reflector 漂亮,但它与 Visual Studio 一起提供,因此许多开发人员已经拥有它。
要运行它(假设 VS 2013,其他版本应该类似):
选择开始 > 所有程序 > Visual Studio 2013 > Visual Studio 工具。双击 VS2013 的开发人员命令提示符。从生成的命令提示符处运行“ildasm”。在该工具中,选择文件 > 打开并打开您的可执行文件或 DLL。
现在您可以浏览 DLL 结构。双击班级成员以查看 IL。使用 File > Dump 将 IL 导出到文件。
我很惊讶没有人提到 dnSpy。 dnSpy 是一个调试器和 .NET 程序集编辑器。即使您没有任何可用的源代码,您也可以使用它来编辑和调试程序集。
主要特点:
调试 .NET 和 Unity 程序集
编辑 .NET 和 Unity 程序集
明暗主题
它是开源的,也是使用最广泛的点网逆向工程工具之一。
如今(2022 年)有各种 .NET / C# 反编译器可用:
适合所有人的 ILSpy [免费 OSS C# IL 多平台]
dotPeek 方便反编译 [免费 C# IL]
用于专家、安全和黑客的 dnSpy [免费 OSS C# VB IL]
JustDecompile for everyone [免费 OSS C# VB IL](续 CodemerxDecompile)
怀旧的 IldAsm [免费 IL]
.NET Reflector for history [商业不支持的 C# VB IL MC++]
我更喜欢 ILSpy,因为它是免费的 OSS,速度非常快(与其他软件相比),维护良好,它甚至可以被 Visual Studio 使用,并且反编译的代码是准确的。这篇博文 In the Jungle of .NET Decompilers 详细解释了所有这些 .NET 反编译器。
不定期副业成功案例分享