【发布时间】:2013-08-16 18:49:23
【问题描述】:
我想用我的应用程序做这两件事(仅限 Windows):
- 允许用户在启动应用程序之前将本机代码插入(使用工具)到我的应用程序中。
- 在运行时直接从内存中运行这个用户插入的代码。
理想情况下,用户必须很容易指定此代码。
我现在正在考虑如何做到这一点的两个想法:
用户会将本机 dll 嵌入到应用程序的资源中。应用程序将使用 this 文章中的技术直接从内存中加载此 dll。
以某种方式将用户指定的 .dll 方法的汇编代码复制到我的应用程序资源中,并按照this 文章中的说明从堆中执行此代码。
有没有更好的选择来做到这一点?如果没有,有什么想法可能会导致这些解决方案出现问题吗?
编辑
我特别不想使用LoadLibrary* 调用,因为它们要求 dll 文件已经在我试图避免的硬盘驱动器上。我也在努力让拆解更难。
编辑
更多细节: 应用程序代码在我的控制之下并且是本机的。我只是想为用户提供一种在我的应用程序编译和部署后嵌入他自己的自定义功能的方法。
我可以对用户代码进行任意限制,这不是问题。
【问题讨论】:
-
正常且直接的方法是使用 LoadLibrary() 从文件系统动态加载 dll,并在该 dll 中调用众所周知的函数。这不可行吗
-
LoadLibraryEx和GetProcAddress有什么问题?另外,“直接从内存中运行 [...]” 是什么意思?而不是从运行?您提出的解决方案存在问题:反恶意软件和病毒防护软件将运行混乱。 -
您能说“主要用于导致其被所有防病毒/恶意软件检测软件隔离或删除的目的”或“允许您被任何和所有负责任的公司 IT 部门轻松禁止”吗?它会在您的产品文献中读起来非常好。
-
您希望允许第三方将代码静态链接到您的应用程序中。所以给他们你的目标文件和链接器。如果您愿意,您可以将其封装在一个工具中,以方便第三方使用。
-
换句话说,一个从磁盘加载的.dll,之前已经扫描过。再次,这是不同的。您正在使用可执行代码并执行它。您没有获取数据段并将其重新声明为可执行代码。这基本上就是@Ken 所说的。
标签: windows winapi native-code