【发布时间】:2020-01-29 00:10:52
【问题描述】:
我想替换 LoadLibrary 函数以防止加载可能被注入的列入黑名单的 dll。
我从 _win32.cpp 复制了我需要的 LoadLibrary 函数的示例代码。我使用了 LoadLibraryW、LoadLibraryExW、LoadLibraryA 和 LoadLibraryExA。只显示一个调用,因为它们都相同,只是函数名称。
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
LONG l = DetourDetach(&(PVOID&)Real_LoadLibraryA, Mine_LoadLibraryA);
if (l != 0)
{
__debugbreak();
}
PVOID* ppbFailedPointer = nullptr;
LONG error = DetourTransactionCommitEx(&ppbFailedPointer);
if (error != 0)
{
__debugbreak();
}
DetourDetach 始终返回 ERROR_INVALID_BLOCK。 我可以很好地运行示例,但它们都是使用 dll 注入代码的示例。
【问题讨论】:
-
这是一个记录在案的错误代码,“功能太小”。这并不奇怪,LoadLibraryA() 并没有做太多,而是转换了它的参数。你最好绕道真正的LoadLibraryW()。这也绕过了 LoadLibraryA() 兼容性垫片,抓住两者肯定是你想要的。
-
我试过 LoadLibraryExW、LoadLibraryW 和 LoadLibraryExA。都返回相同的错误。我只展示了一个函数,因为除了函数名称之外,所有函数都相同。
-
您为什么不使用此信息编辑问题?下一个可能的原因是它已经打了补丁,反恶意软件对任何弄乱这个 winapi 函数的人都非常感兴趣。
标签: detours