【问题标题】:Check if loaded DLL is system module检查加载的DLL是否为系统模块
【发布时间】:2020-05-13 20:42:28
【问题描述】:

有什么方法可以可靠地检查加载的 DLL 是否是微软官方的模块/库?

检查数字签名? https://docs.microsoft.com/en-us/windows/win32/seccrypto/example-c-program--verifying-the-signature-of-a-pe-file

还有其他方法吗?

是否有任何受支持的 Windows API(如 IsSystemModule 允许我检查它是否是系统模块(C:/windows/system32C:/windows/SysWOW64)?它仍然可以从可执行文件夹加载...

【问题讨论】:

  • 如果您担心加载恶意 DLL,那么当您加载它时,是不是太晚了?
  • @user253751 在这种情况下它与检测恶意DLL无关,通过LoadLibrary注入不再常见:P
  • 来自不同版本 Windows 的 DLL 是否仍算作“微软官方”?
  • 检查签名有什么问题?
  • 如果您查看 Microsoft/SysInternals 的自动运行工具 (docs.microsoft.com/en-us/sysinternals/downloads/autoruns),它会检查 Authenticode 签名。我认为这是最好的方法。

标签: c++ c windows winapi dll


【解决方案1】:

除签名检查外,您还可以检查 (C) Microsoft 的 VERSIONINFO 资源。这是一个快速而肮脏的检查,但不是可靠的身份验证。

【讨论】:

  • 任何人都可以将© Microsoft Corporation版权属性链接到其二进制文件的版本资源中。不是你想推荐使用的东西。
  • 这是用于 GUI 中的颜色编码,而不是用于诚实的身份验证。 OP 正在组合某种进程浏览器,希望在用户二进制文件和操作系统文件之间进行区分。 OSVERSION 将作为一阶近似值。
  • 不,这不是关于颜色编码的。问题是如何识别某些模块。 OP 可能正在使用它进行颜色编码。但这个问题要笼统得多。这会误导任何未来的访问者,他们碰巧没有使用这些信息来更改其 GUI 中某些像素的颜色。
猜你喜欢
  • 2011-01-18
  • 1970-01-01
  • 2017-04-24
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 2016-05-15
相关资源
最近更新 更多