DLL注入:
1. 使用注册表注入dll
HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Windows\AppInit_DLLs
AppInit_Dlls中设置待注入的dll绝对路径
LoadAppInit_Dlls值设为1
2. 使用Windows挂钩注入dll
需要使用SetWindowsHookEx函数,MSDN定义如下:
HHOOK WINAPI SetWindowsHookEx(
_In_ int idHook,
_In_ HOOKPROC lpfn,
_In_ HINSTANCE hMod,
_In_ DWORD dwThreadId
);
第一个参数为挂钩类型;
第二个参数为一个函数地址,即挂钩类型事件发生时,系统应该调用的函数;
第三个参数标识一个dll,这个dll中包含第二个参数表示的函数;
第四个参数表示要给哪个线程挂钩,0表示所有运行线程
以下给出一个示例:
HOOKPROC hkprcSysMsg;
static HINSTANCE hinstDLL;
static HHOOK hhookSysMsg;
hinstDLL = LoadLibrary(TEXT("c:\\myapp\\sysmsg.dll"));
hkprcSysMsg = (HOOKPROC)GetProcAddress(hinstDLL, "SysMessageProc");
hhookSysMsg = SetWindowsHookEx(
WH_SYSMSGFILTER,
hkprcSysMsg,
hinstDLL,
0);
可以使用UnhookWindowsHookEx取消挂钩:
BOOL WINAPI UnhookWindowsHookEx(
_In_ HHOOK hhk
);
3. 使用远程线程注入dll
Dll注入的本质即让目标进程中的一个线程通过LoadLibrary()加载待注入dll文件。
通常情况下,无法控制目标进程线程,此时可以创建一个线程了实现上述目的,CreateRemoteThread便提供了此功能。
<