【问题标题】:How do I decompile a .NET EXE into readable C# source code?如何将 .NET EXE 反编译为可读的 C# 源代码?
【发布时间】: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 中似乎没有未解决的问题

标签: c# .net reverse-engineering decompiling


【解决方案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,其他版本应该类似):

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

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

【讨论】:

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

你想要reflector

【讨论】:

    【解决方案8】:

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

    主要特点:

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

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

    【讨论】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      相关资源
      最近更新 更多