从内存中的位置加载DLL

正如问题所说,我想从内存中的位置而不是文件加载DLL,类似于LoadLibrary(Ex)。 我不是WinAPI的专家,所以谷歌搜索了一下,发现这篇文章与MemoryModule库一起完全满足我的需求。

另一方面,信息很旧,图书馆也没有更新一段时间。 所以我想知道是否有不同的,更新的和更好的方法来做到这一点。 此外,如果有人使用了文章中提到的库,他们是否可以提供有关使用它时可能遇到的问题的见解?

对于好奇的,我正在探索加密应用程序的一些插件的概念,而不将解密的版本存储在磁盘上。

好吧,你可以根据这些指令创建一个RAM驱动器,然后将你可以在内存中的DLL复制到那里的文件并使用LoadLibrary()。
当然,如果您计划将其部署为某种产品,这是不太实际的,因为人们会注意到安装了驱动程序,安装后重新启动以及“我的电脑”下的新驱动器号。 此外,这实际上没有隐藏DLL,因为它只是坐在RAM驱动器中供所有人观看。

我感兴趣的另一件事是你为什么要这么做? 也许你的最终结果可以通过除了从内存加载DLL以外的其他方法来实现。 例如,当使用诸如UPX的二进制打包器时,磁盘上的DLL与最终执行的DLL不同。 在使用LoadLibrary正常加载DLL之后,解包器立即启动并使用未压缩的二进制文件重写DLL加载到的内存(DLL头确保分配了足够的空间)

实现自己的DLL加载器可以非常快速地实现毛发。 阅读这篇文章很容易错过你可以融入的疯狂边缘案例。 我强烈建议不要这样做。
只是为了尝试 – 考虑到您不能使用任何传统的调试工具来处理您正在加载的DLL中的代码,因为您执行的代码未列在操作系统已知的任何DLL的区域中。
另一个严重的问题是在Windows中处理DEP 。