使用 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
数组)。
我在 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
数组)。