如何将 .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++?