请参阅我的previous questions之一。我问的是从DLL加载编译资源。然后参考David Heffernan的回答。他的建议是使用内置机制直接从DLL的实例加载资源,甚至不使用我自己的导出函数。这给我指出了一个安全漏洞。
如果确实如此,如果可以使用这种类型的解决方案,那么任何外部第三方都可以从任何Delphi Application / DLL加载资源吗?嵌入式资源有多安全?假设我使用嵌入式资源编译DLL。有人可以拿这个DLL并提取资源吗?考虑到他们必须知道资源名称,它有多容易?他们能够检测到编译的资源并获得命名资源的列表吗?如果是这样,那么我将不得不实现我自己的安全级别并加密每个嵌入式资源并通过登录解密它。
答案 0 :(得分:10)
Windows Portable Executable的资源部分可供任何对可执行文件具有读取权限的进程/用户访问和枚举。
Windows API为work with resources提供了一系列功能,包括以下功能:
事实上,有很多现成的工具可以执行此操作。您自己的Delphi安装有一个名为Resource Explorer的演示项目,通常安装在Samples\Delphi\VCL\resXplor
文件夹中。
正如您所看到的,知识和/或tools的任何人不仅可以阅读,而且可以删除和替换Windows可执行文件中的资源,无论生成它的编译器如何。
您可以在文章An In-Depth Look into the Win32 Portable Executable File Format中找到有关PE文件格式的更多信息。