任何第三方都可以加载我项目中的嵌入资源吗?

4
请参考我的以前的问题。我正在询问如何从DLL中加载已编译的资源。然后请参考David Heffernan的答案。他建议使用内置机制直接从DLL实例中加载资源,甚至不需要使用自己的导出函数。这向我指出了一个安全漏洞。
如果真是这样,如果这种解决方案是可行的,那么任何外部第三方都可以从任何Delphi应用程序/DLL中加载资源吗?嵌入式资源有多安全?假设我编译了一个带有嵌入式资源的DLL。有人能够拿走这个DLL并提取资源吗?这有多容易,考虑到他们必须知道资源名称?他们能够检测到编译的资源并获得命名资源列表吗?如果是这样,那么我将不得不实现自己的安全级别,并使用登录加密每个嵌入式资源。
1个回答

10

一个Windows Portable Executable的资源部分可以被拥有可读权限的任何进程/用户访问和枚举。

Windows API提供了一系列函数来处理资源, 包括以下功能:

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

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

正如您所看到的,任何具备知识和/或工具的人都可以读取、删除和替换您的Windows可执行文件中的资源,无论编译器是哪个。

你可以在文章深入了解Win32可移植可执行文件格式中找到关于PE文件格式的更多信息。


谢谢,这正是我所怀疑的。我需要改变我的方法并加密我嵌入的所有内容。 - Jerry Dodge
顺便说一句,我从来不知道嵌入式资源是全窗口的。我一直以为它是特定于Delphi的。这让我对许多事情有了新的认识。 - Jerry Dodge
@JerryDodge:我发布的链接中的应用程序可以让你查看其他人可以在你的exe/dll中看到的信息类型(其中一些是可视化的)。正如我所说,你可能想要使用它来检查自己的应用程序或DLL,这样你就会知道需要保护什么。它也适用于其他(非Delphi)应用程序,其中一些具有一些有趣的资源。 - Ken White
如果你担心有人从你的exe/dll中提取资源,你还可以考虑使用复制保护软件套装(比如Armadillo、Software Passport的保护引擎),并使用“永久评估”许可证(无过期日期)来保护你软件的exe和dll。这将负责包装和加密你的东西,并在有人启动时解密和取消包装。 - Marjan Venema
我们曾经使用过Aladdin的HASP密钥,它包装了编译后的EXE文件,并需要一个服务器加密狗才能正常工作。那是一种很好的保护方式,但我们已经放弃了它,并正在实施自己的加密方法。 - Jerry Dodge
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接