使用 Powershell 在内存中执行可执行文件

Executing Executables In Memory With Powershell

我在 Internet 页面上有一个可执行文件,我希望能够 运行 它而不使用 powershell 将其保存到本地磁盘。它基本上应该像 iex 一样运行,但是 运行 一个已经在内存中并存储在某种变量中的可执行文件。再一次,我想在 Powershell 中完成所有这些。

示例。

(New-Object System.Net.WebClient).DownloadString("http://example.com") | iex

在这里我们可以下载脚本并运行将它们保存在内存中,而无需将任何内容保存到磁盘。但这只是我们在这里执行的一系列字符。基本上是一个 powershell 脚本。我想以同样的方式 运行 可执行文件。那可能吗?如果可以,怎么做?

首先,使用Invoke-WebRequest下载二进制可执行文件的内容作为字节数组 ([byte[]]):

$bytes = (Invoke-WebRequest "http://example.com/path/to/binary.exe").Content

然后,假设可执行文件是一个(兼容的).NET 应用程序

  • 使用 .NET 的能力从字节数组加载程序集,然后使用反射直接执行这个在内存中的表示你的二进制可执行文件。
  • This answer 展示了该技术(基于用作字节数组源的 Base64 编码字符串,但您可以简单地替换链接代码中的 $bytes 数组)。