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

Posted

技术标签:

【中文标题】如何将 .NET EXE 反编译为可读的 C# 源代码?【英文标题】:How do I decompile a .NET EXE into readable C# source code? 【发布时间】:2010-09-15 20:04:47 【问题描述】:

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

【问题讨论】:

好的。看这里……Teleriks JustDecompile 实际上反编译了 Red Gates Reflector 完全搞砸的 DLL……Reflector 存在许多问题……JustDecompile……到目前为止完美无瑕…… 我使用JustDecompile已经有很长时间了,它非常擅长将源文件反编译和打包为准备编译的csproject。它在开发中非常活跃,他们的 repo github.com/telerik/JustDecompileEngine 中似乎没有未解决的问题 【参考方案1】:

Reflector 及其插件FileDisassembler。

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

【讨论】:

我的 Reflector 副本有一个“导出...”选项,但我没有安装任何插件。它创建一个包含所有源代码和资源的 VS 项目。那么为什么大家都建​​议使用 FileDisassembler 呢?更好吗? Lucas:开箱即用,我还没有看到反射器能够做到这一点。 FileDisassembler 一直是唯一的方法。尽管我猜这在最近的历史中可能已经改变。我去看看。 救生员!笨蛋 TFS 删除了我的项目。虽然我确实告诉 TFS 删除自己,但没想到它会从本地文件系统中删除项目。一样的感谢。 x FileDisassembler 在哪里? :// 它仅适用于 .Net 框架。任何适用于 .Net core 3.0 exe 的工具?【参考方案2】:

当 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 支持异步/等待反编译

【讨论】:

我使用的是 2.2,它支持反编译为 IL、VB.NET 和 C#。我发现这非常有用。 看来 Telerik 有兴趣从运行在其上的计算机收集可疑信息,而 ILSpy 无法从源代码编译。此外,ILSpy 二进制文件混淆了变量名,并在源代码中放入了一些奇怪的字符。 请注意,ILSpy 包含一个 Visual Studio 加载项。对于 ILSpy 2.4,我添加了从 Visual Studio 源代码直接导航到反编译输出的功能。不幸的是,有一些最新的修复程序现已合并到 ILSpy 主线,但没有发布 2.4 版本。 太棒了!有一家软件公司每次向人们收取 100 英镑的费用,让他们在您的服务器上使用“特殊”工具来解决问题。设法获得了他们在连接时使用的工具的副本,然后设法非常轻松地使用 ILSpy 来获取工具解锁密码。不再敲诈客户! ILSpy 是最好的【参考方案3】:

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

但 DevExtras 和 JetBrains 等一些公司已经创建了免费的替代方案:

DevExtras CodeReflect

JetBrains DotPeek

【讨论】:

Reflector 是 35 美元。我知道破产了,但它的价值是它的 10 倍。 值得将 Telerik JustDecompile 添加到免费的 .NET 程序集反编译器列表中。 telerik.com/justdecompile @StingyJack:太好了,他们好像听到了你的声音!如果您想要 VS2012 反汇编程序,现在实际上是 10 美元的价格,368 美元。 :// 我不反对他们赚钱,但@Daniel 的回答中的 ILSpy(提到)是我现在正在使用的。 现在标准版售价 100 美元,与 Visual Studios 集成的版本售价 200 美元。这简直是​​通货膨胀率。尽管他们确实向开源开发人员免费提供了东西:reflectorblog.red-gate.com/2013/07/open-source【参考方案4】:

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

添加:我最近最喜欢的是 JetBrains 的dotPeek。

【讨论】:

我喜欢 dotPeek 允许轻松处理整个文件夹,但截至今天它们只能反编译为 c#。大多数其他反编译器也执行 vb 和 IL。它也只支持 Net 4.5 而 Telerik 支持 4.5.1 所以 dotPeek 是完全免费的还是他们对付费版本有限制?我在 jetbrains 网站上看不到任何有关它的信息。【参考方案5】:

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

【讨论】:

Telerik 提供了反编译为 VB.NET、IL 或 C#.NET 的能力,我发现这很有用。它还自动选择框架,并有一个可用于反混淆的插件。此外,它支持 .NET 4.5.1。看起来还不错。 我尝试了这篇文章中的所有解决方案,而 JustDecompile 是唯一适合我的解决方案。【参考方案6】:

我很惊讶没有人提到 Microsoft 的 ildasm。它可能不如 ILSpy 或 Reflector 漂亮,但它带有 Visual Studio,所以很多开发人员已经拥有它。

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

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

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

【讨论】:

我觉得 IL DASM 有点野蛮。它显示了树,但是当右键单击时,我发现这很疯狂。加上导出到文件的转储基本上是垃圾。看看它,它有多大的帮助? 我从来没有声称 ildasm 是最好的选择,只是它可用并且有效。 ¯_(ツ)_/¯ 不,不怕。 我真的很惊讶 dotPeek 不允许我在整个程序集中搜索我知道的字符串。 ildasm 可能不漂亮,但至少它有一个转储选项,可以帮助我找到包含我正在寻找的字符串的类。【参考方案7】:

你想要reflector。

【讨论】:

【参考方案8】:

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

主要特点:

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

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

【讨论】:

不知道为什么我被否决了,我只是列出了当今大多数 dotnet 逆向工程师使用的工具。恕我直言,它确实回答了获取用 C# 编译的应用程序源代码的问题。【参考方案9】:

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

ILSpy 适合所有人 [免费 OSS C# IL 多平台] dotPeek 方便反编译 [免费 C# IL] dnSpy 供专家、安全和黑客使用 [免费 OSS C# VB IL] JustDecompile 适用于所有人 [免费 OSS C# VB IL](续为 CodemerxDecompile) IldAsm 怀旧 [免费 IL] .NET Reflector 历史 [商业不支持的 C# VB IL MC++]

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

【讨论】:

以上是关于如何将 .NET EXE 反编译为可读的 C# 源代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 .hex 文件反编译为 Arduino 的 C++?

反编译 APK 上的 .smali 文件 [重复]

Android 将 apk 反编译为源码

APK骨架分析

为啥将class反编译为java后,java直接编译时有错误

Oolong工具:.class二进制文件反编译为.j汇编文件