繁体   English   中英

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

[英]Loading DLL from a location in memory

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

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

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

实现你自己的 DLL 加载器会很快变得非常麻烦。 阅读这篇文章很容易错过你可以让自己陷入什么样的疯狂边缘情况。 我强烈建议不要这样做。
只是为了品尝 - 考虑到您不能对正在加载的 DLL 中的代码使用任何常规调试工具,因为您正在执行的代码未列在操作系统已知的任何 DLL 的区域中。
另一个严重的问题是在 Windows 中处理DEP

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

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

这里提出了类似的问题:

以调试器友好的方式从 RAM 加载本机 C++ .dll

其中一个答案提出了 github 中显示的 dllloader 示例应用程序:

https://github.com/tapika/dllloader

它支持开箱即用的 .dll 调试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM