1.windows消息钩子
使用API SetWindowsHookEx()进行dll注入,在dll中可以截获GUI界面消息。
函数定义:
HHOOK SetWindowsHookEx(
int idHook, // hook type
HOOKPROC lpfn, // hook procedure
HINSTANCE hMod, // hook procedure所属的DLL句柄(Handle)
DOWORD dwThreadId // 想要挂钩的线程ID
);
如:SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, g_hInstance, 0);
注:用OD调试新加载的DLL时,可以勾选Options->Events->Break on new module(DLL)。这样在DLL加载到OD中时会自动断下。
2.DLL注入
1) 创建远程线程(CreateRemoteThread() API)
//InjectDll.cpp
#include "windows.h"
#include "tchar.h"
BOOL InjectDll(DWORD dwPID, LPCTSTR szDllPath)
{
HANDLE hProcess = NULL, hThread = NULL;
HMODULE hMod = NULL;
PVOID pRemoteBuf = NULL;
DWORD dwBufSize = (DWORD)(_tcslen(szDllPath)+1)*s