如何反汇编单个文件 .NET exe,或从中提取 .dll?

How to disassemble single file .NET exes, or extract the .dll from them?

我有一些使用单文件选项构建的 .NET exes (https://docs.microsoft.com/en-us/dotnet/core/deploying/single-file),我需要对它们使用反汇编程序,但是 none 的反汇编工具(例如 dnspy, ilspy、ildasm 等)有效,因为它们实际上是嵌入了 .NET 程序集的本机二进制文件,如 Microsoft 文档中所述。

例如,在这些二进制输出上尝试 ildasm error: 'example.exe' has no valid CLR header and cannot be disassembled

如何从这些单文件 exe 中提取 .NET dll,以便我可以反汇编它们?或者有没有其他方法可以反汇编这些 .NET 单文件 exes?

ILSpy 7.0 支持 .NET 5 单文件包。

ILSpy 7.1 添加了对 .NET 6 包的支持(添加了压缩支持)。

ILSpy 7.2 还允许保存嵌入的 .dll(上下文菜单中的“提取包条目”)。

如果您正在寻找命令行工具,请参阅 https://www.nuget.org/packages/sfextract/