gpt4 book ai didi

c - LoadLibraryExW 加载 User32.dll 失败

转载 作者:行者123 更新时间:2023-12-03 11:05:55 28 4
gpt4 key购买 nike

当尝试通过 LoadLibraryExW 加载 C:\Windows\System32\user32.dll 时,它失败并显示最后一个错误 ERROR_INVALID_IMAGE_HASH。

这是它的加载方式:

HMODULE User32Lib = LoadLibraryExW(L"C:\\Windows\\System32\\user32.dll", NULL, LOAD_LIBRARY_REQUIRE_SIGNED_TARGET);

我查看了 DLL 本身,它是在 2020 年 4 月 8 日签署的(针对我机器上的版本),因此它应该仍然有效。

我做错了什么吗?

最佳答案

显然 LOAD_LIBRARY_REQUIRE_SIGNED_TARGET要求 PE 镜像与 IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 链接(0x0080) 在其 DLL characteristics .这是一个标志,强制内核中的内存管理器在加载图像时检查数字签名。引用链接器选项 /INTEGRITYCHECK .

大多数系统 DLL 没有这个特性。 “user32.dll”没有,但“bcrypt.dll”有:

PS C:\> $user32_hdr = get-peheader C:\Windows\System32\user32.dll
PS C:\> $bcrypt_hdr = get-peheader C:\Windows\System32\bcrypt.dll
PS C:\> '{0:x}' -f $user32_hdr.DllCharacteristics
4160
PS C:\> '{0:x}' -f $bcrypt_hdr.DllCharacteristics
41E0

我对代码签名的主题以及加载器和内存管理器中的实现细节知之甚少。我刚刚使用调试器发现加载失败 STATUS_INVALID_IMAGE_HASHLdrpCompleteMapModule , 在它检查了 DLL 特征中的 0x80 之后。从那里我搜索了关于这个值和 /integritycheck 的讨论。与 LOAD_LIBRARY_REQUIRE_SIGNED_TARGET 有关的选项.我发现一些非官方的引用资料声称后者需要前者。因此,我编写了一个脚本来转储系统 DLL 的 DLL 特征,以便找到具有 IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 的 DLL 特征。旗帜。找到“bcrypt.dll”并检查它尚未加载后,我确认使用 LOAD_LIBRARY_REQUIRE_SIGNED_TARGET 加载它。确实有效。

关于c - LoadLibraryExW 加载 User32.dll 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62461457/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com