是否可以限制DLL功能?

时间:2013-07-18 00:33:25

标签: c++ windows security dll limit

假设我希望我的客户能够为他们的应用程序创建插件,但我不想让他们破解我的程序内存,是否有可能阻止这种情况?

或者将DLL加载到一个无法访问主程序存储器的内存区域中?

2 个答案:

答案 0 :(得分:3)

您可以让插件在单独的进程中运行。插件所需的任何信息都作为消息传递给该进程。应用程序所需的任何结果都将作为消息接收。每个插件可以有一个单独的进程,或者您可以在同一个进程中运行所有插件。

另外,大多数现代版本的插件功能都使用嵌入式运行时环境,例如JVM。然后,插件在与应用程序相同的进程中运行,但是在虚拟环境的范围内,这有效地限制了插件可能破坏程序的破坏。在这种情况下,没有DLL,但脚本代码或字节代码。

答案 1 :(得分:2)

简短的回答是“不”。

答案很长: DLL被加载到内存中,从过程的角度和操作系统的角度来看,它似乎都是可执行文件本身的一部分,用于所有意图和目的。当然,DLL(可能)在多个可执行文件之间共享,因此操作系统需要跟踪特定DLL的“用户”数量,但从一个进程的角度来看,它是可执行文件的一部分。它是一个单独的地址范围,但DLL内容的权限和权限与任何其他DLL或主要的exectuable本身完全相同。

如果你有插件,你需要信任插件。如果这不是你想要的,那么不要使用DLL模型来制作插件(例如,使用共享内存区域和另一个可执行文件来仅允许访问共享内存)。