【问题标题】:Executing Executables In Memory With Powershell使用 Powershell 在内存中执行可执行文件
【发布时间】:2021-10-28 19:15:36
【问题描述】:

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

示例。

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

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

【问题讨论】:

    标签: powershell executable shellexecute


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 很高兴听到它有帮助,@MuhammedÖzen;我的荣幸。
    猜你喜欢
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 2014-01-08
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    相关资源
    最近更新 更多