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

新手上路,请多包涵

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

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

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

原文由 Saulius Žemaitaitis 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 944
2 个回答

好吧,您可以根据 这些说明 创建一个 RAM 驱动器,然后将您可以在内存中的 DLL 复制到那里的文件并使用 LoadLibrary()。

当然,如果您打算将其部署为某种产品,这不是很实用,因为人们会注意到正在安装驱动程序,安装后重新启动以及“我的电脑”下的新驱动器号。此外,这并没有真正隐藏 DLL,因为它只是放在 RAM 驱动器中供所有人观看。

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

原文由 shoosh 发布,翻译遵循 CC BY-SA 2.5 许可协议

实现你自己的 DLL 加载器会很快变得非常麻烦。阅读这篇文章很容易错过你可以让自己陷入什么样的疯狂边缘情况。我强烈建议不要这样做。

只是为了品尝 - 考虑到您不能对正在加载的 DLL 中的代码使用任何常规调试工具,因为您正在执行的代码未列在操作系统已知的任何 DLL 的区域中。

另一个严重的问题是在 Windows 中处理 DEP

原文由 shoosh 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题