gpt4 book ai didi

c++ - Hook LoadLibrary API 调用

转载 作者:行者123 更新时间:2023-11-30 04:40:11 28 4
gpt4 key购买 nike

我想加载与应用程序工作目录中不同版本的 DLL。为此,我需要挂接 LoadLibrary 调用,以便当应用程序调用加载 DLL 时,我可以透明地用该 DLL 的较新版本替换它。我尝试使用 NCodeHook 并在我的 DLL 中包含以下代码,我使用 NInjectLib 将其注入(inject)到应用程序中,但它在加载 kernel32.dll 时崩溃。谁能告诉我这是注入(inject)调用的正确方法还是有其他替代方法。

        // CodeHook.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include <NCodeHookInstantiation.h>
#include "CodeHook.h"

#ifdef _MANAGED
#pragma managed(push, off)
#endif

typedef HMODULE (WINAPI *LoadLibraryFPtr)(LPCTSTR dllName);

#pragma data_seg("SHARED")
LoadLibraryFPtr origFunc = NULL;
#pragma data_seg()

#pragma comment(linker, "/section:SHARED,RWS")


HMODULE WINAPI LoadLibraryHook(LPCTSTR dllName)
{
if (origFunc != NULL)
{
return origFunc(dllName);
}
}



BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

CODEHOOK_API void Initialize (void)
{
NCodeHookIA32 nch;
origFunc = nch.createHookByName("kernel32.dll", "LoadLibrary", LoadLibraryHook);
}

#ifdef _MANAGED
#pragma managed(pop)
#endif

最佳答案

我不知道 NCodeHook 库,但需要知道的一件重要事情是 LoadLibrary 函数实际上有 2 个版本:LoadLibraryA(LPCSTR)LoadLibraryW(LPCWSTR)。确保 Hook 正确的函数并使用适当的函数定义。您可能还需要 Hook LoadLibraryExA/LoadLibraryExW

Detours是一个更广为人知的 API Hook 库。另见 this article了解更多 Hook 技术。

关于c++ - Hook LoadLibrary API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1681868/

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