我正在从事与沙盒技术相关的项目.
目前我正在编写一个从远程Web服务器获取小型汇编.exe二进制文件的C程序(.NET).这个二进制文件存储在内存中(从不触摸磁盘),我的目的是从内存中运行这个二进制文件.如果我的客户端是.NET我的,那么从内存中运行该程序集就没有问题(事实上,有很多不同的方法可以获得这个),但当然这是不可能的C(不完全确定).
我的问题是:在程序.exe的地址空间中进行汇编C,有没有办法从那里运行它?有没有办法让它CLR运行呢?起初我想调用powershell从那里运行它(使用Reflection.Assembly),但这种情况涉及将程序集写入磁盘.
无论如何,毫无疑问,最好和最有效的方法是使用.NET客户端.
正如问题所说,我想从内存中的位置而不是文件加载DLL,类似于LoadLibrary(Ex).我不是WinAPI的专家,所以google了一下,发现这篇文章与MemoryModule库一起完全满足我的需求.
另一方面,信息很旧,图书馆也没有更新一段时间.所以我想知道是否有不同的,更新的和更好的方法来做到这一点.此外,如果有人使用了文章中提到的库,他们是否可以提供有关使用它时可能遇到的问题的见解?
对于好奇的,我正在探索加密应用程序的一些插件的概念,而不将解密的版本存储在磁盘上.
假设我在编译过程中已经将二进制文件包含在我的程序中,所以我将它保存在变量中,
var myExec =[]byte{'s','o','m','e',' ','b','y','t','e','s'}
所以我的问题是是否有办法在我的程序中执行这个二进制文件而不将其写回光盘并调用exec或fork在上面?我正在Golang中编写我的应用程序,所以我正在寻找的方法是使用Go或C(使用CGO)来完成它.
基本上,我正在寻找类似管道bash脚本到bash的东西,我不知道在哪里可以管道本机可执行文件的字节来运行它并将其写回磁盘,然后让os再次读取它似乎很多额外的工作要做
可能重复:
加载EXE文件并使用C#从内存运行它
我正在使用WebClient类从Web服务器下载.exe.有没有办法可以运行.exe而不先将其保存到磁盘?
为了完整起见,让我告诉你到目前为止我所拥有的.
这是我用来开始下载的代码:
WebClient webClient = new WebClient();
webClient.DownloadDataCompleted += new DownloadDataCompletedEventHandler(webClient_DownloadDataCompleted);
webClient.DownloadDataAsync(new Uri("http://www.somewebsite.com/calc.exe"));
Run Code Online (Sandbox Code Playgroud)
在(webClient_DownloadDataCompleted)方法中,我只需从参数e中获取字节:
private void webClient_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
Byte[] downloadedData = e.Result;
// how to run this like a .exe?
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我想在 Windows 上执行内存中的程序。我不想将文件写入磁盘。我只想传入一个字节数组(这是我要执行的程序)作为参数。
我的技术不够熟练,无法编写本机代码来执行此操作。再次强调,这应该是 Windows 原生的。
我要在内存中执行的程序不是Java程序。它是一个可执行文件(.exe)!可执行文件应该在内存中读取和运行,而不是通过Runtime.getRuntime().exec("example.exe");
我发现你可以在Windows中从内存中运行程序.但是这个功能被认为是一个黑客(有一天可能不再工作),或Windows是否支持此功能?
这是一个讨论这个主题的线程: 来自内存缓冲区的CreateProcess