不管LoadLibraryA,LoadLibraryW,LoadLibraryExA,LoadLibraryExW,所以只要hook LoadLibraryExW就可以监视所有的dll加载。
值得注意的是,win7 以上系统,LoadLibraryExW函数在KernelBase.dll中,kernel32中的只是个跳板函数。
还有一种利用dll的回调方法,会更优雅,下一次介绍,不需要hook任何函数。
简单的示例:
#pragma once
#include "../../../../ComAll/XHook.hpp"
namespace HookLoadLibraryW
{
static HookEnv env;
HMODULE WINAPI MyLoad(
__in const WCHAR* lpFileName,
__reserved HANDLE hFile,
__in DWORD dwFlags
)
{
wcout<<lpFileName<<endl;
return NULL;
}
static int32 Hook(){
InitHookEnv(env);
addr_t old=GetProcAddress(GetModuleHandleA("KernelBase.dll"),"LoadLibraryExW") ;
Hook(env,old,MyLoad);
return 0;
}
static int32 UnHook(){
UnHook(env);
return 0;
}
}
欢迎关注 windows驱动编程微信公众号,微信号:driverdevelop