ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

U
Umar Farooq Khawaja

Reflector 及其插件 FileDisassembler

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


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

当 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 反编译


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

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

但是像 DevExtras 和 JetBrains 这样的一些公司已经创建了免费的替代品:

DevExtras CodeReflect

JetBrains DotPeek


反射器就像 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
P
ProfK

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

补充:我最近最喜欢的是 JetBrains 的 dotPeek


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

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


Telerik 提供了反编译为 VB.NET、IL 或 C#.NET 的能力,我觉得这很有用。它还自动选择框架,并有一个可用于反混淆的插件。此外,它支持 .NET 4.5.1。看起来还不错。
我在这篇文章中尝试了所有解决方案,而 JustDecompile 是唯一一个对我来说完美的解决方案。
y
yoyo

我很惊讶没有人提到 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 可能不漂亮,但至少它有一个转储选项,可以帮助我找到包含我正在寻找的字符串的类。
L
Luke Halliwell

你想要reflector


N
Noteworthy

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

主要特点:

调试 .NET 和 Unity 程序集

编辑 .NET 和 Unity 程序集

明暗主题

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


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

如今(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 反编译器。