.net core 可以反编译.Net Core 3自包含的单个可执行文件吗?

.net core 可以反编译.Net Core 3自包含的单个可执行文件吗?,.net-core,obfuscation,decompiling,ilspy,.net Core,Obfuscation,Decompiling,Ilspy,我尝试使用Dotpeek和ILSpy.Net来反编译(我自己的代码),但失败了 我需要对.NETCore3的分布式二进制文件进行特殊的模糊处理吗 Exe netcoreapp3.0 真的 真的 真的 win-x64 单个文件exe实际上是一个非托管包装,ILSpy不支持反编译。但当您运行exe时,它会将其内容展开到临时文件夹中。因此,您可以在那里找到托管dll,并使用ILSpy对其进行反编译 要查找临时文件夹,可以使用任何显示进程加载的程序集位置的工具。SysInternals进程监视器()是

我尝试使用Dotpeek和ILSpy.Net来反编译(我自己的代码),但失败了

我需要对.NETCore3的分布式二进制文件进行特殊的模糊处理吗


Exe
netcoreapp3.0
真的
真的
真的
win-x64

单个文件exe实际上是一个非托管包装,ILSpy不支持反编译。但当您运行exe时,它会将其内容展开到临时文件夹中。因此,您可以在那里找到托管dll,并使用ILSpy对其进行反编译

要查找临时文件夹,可以使用任何显示进程加载的程序集位置的工具。SysInternals进程监视器()是一个很好的方法

您可以将procmon设置为按exe名称进行筛选,当启动exe时,procmon应显示从临时文件夹加载的程序集的一些事件:

您可以浏览到该文件夹并在那里找到托管dll。您可以从该位置使用ILSpy进行反编译


我写了一篇博文:

我想补充@Eren Ersönmez的答案,虽然ILSpy DotPeek当时不支持这个,因为自包含的单个文件只是一个包装器,它包含所有DLL并在运行时提取,只需知道提取到哪里就可以使用ProcMon、ProExp或windbg保存您

如果使用windows,则可以转到c:\Users\{Local Username}\AppData\Local\temp\.net\{Name of executable} 这将导致类似于 c:\Users\alenros\AppData\Local\Temp.net\MyTestApplication

启动exe,将在该位置创建一个同名文件夹。 该文件夹将包含随机命名的文件夹。打开最新的一个,您将在那里找到所有提取的DLL,然后可以对其进行反编译


更新:其中一条公告指出,单文件可执行文件的生成方式将发生变化,因此此方法对它们不起作用。

自包含可执行文件基本上是包含必要DLL的zip文件。Dotpeek和ILSpy可能还不支持这种格式,但它并不是现成的。@ESG你觉得.NET 5怎么样?@Jackop他们改变了可执行文件的构建方式,因此不需要解包,但不知道反编译器是否支持它>在.NET Core 3.0中,你可以编译成单个可执行文件,但该可执行文件实际上是运行时需要执行的所有文件的压缩版本。当您执行文件时,它首先将自身扩展到一个临时目录,然后从包含所有文件的目录执行应用程序的入口点。相比之下,.NET 5将创建一个真实的、可直接就地执行的单个可执行文件。@Jackop您能给我一些关于
的参考(文档)吗。NET 5将创建一个真实的、可直接就地执行的单个可执行文件。
?ILSpy 7.0(目前作为预览版提供)支持反编译.NET Core 3和.NET 5捆绑包。
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PublishTrimmed>true</PublishTrimmed>
    <PublishReadyToRun>true</PublishReadyToRun>
    <PublishSingleFile>true</PublishSingleFile>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
  </PropertyGroup>
</Project>