4

请参考我之前的一个问题。我问的是从 DLL 加载已编译的资源。然后参考大卫赫弗南的答案。他的建议是使用内置机制直接从 DLL 的实例中加载资源,甚至不使用我自己的导出函数。这向我指出了一个安全漏洞。

如果确实如此,如果这种类型的解决方案是可能的,那么任何外部第三方都可以从任何 Delphi 应用程序/DLL 加载资源吗?嵌入式资源的安全性如何?假设我用嵌入式资源编译了一个 DLL。有人可以获取此 DLL 并提取资源吗?考虑到他们必须知道资源名称,这有多容易?他们是否能够检测到编译了哪些资源并获得命名资源的列表?如果是这样,那么我将不得不实现自己的安全级别并加密每个嵌入式资源并使用登录对其进行解密。

4

1 回答 1

10

Windows Portable Executable资源部分可供任何对可执行文件具有读取权限的进程/用户访问和枚举。

Windows API 提供了一系列使用资源的函数,包括以下函数:

  • 添加、删除和替换资源
  • 枚举资源
  • 查找和加载资源
  • 资源文件格式
  • 使用资源

事实上,有很多现成的工具可以执行此操作。您自己的 Delphi 安装有一个名为 Resource Explorer 的演示项目,通常安装在文件夹中Samples\Delphi\VCL\resXplor

如您所见,任何拥有相关知识和/或工具的人不仅可以读取,而且可以删除和替换在您的 Windows 可执行文件中找到的资源,而不管生成它的编译器是什么。

您可以在文章An In-Depth Look into the Win32 Portable Executable File Format中找到有关 PE 文件格式的更多信息。

于 2013-02-07T00:58:10.067 回答