从内存中的某个位置加载DLL

Sau*_*tis 10 c c++ dll winapi

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

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

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

sho*_*osh 5

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


sho*_*osh 3

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

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