2022-02-20注入0
请注意,本文编写于 584 天前,最后修改于 506 天前,其中某些信息可能已经过时。

消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个特性,就可以将DLL注入到指定进程中。

C
HHOOK SetWindowsHookExA(
  [in] int       idHook,
  [in] HOOKPROC  lpfn,
  [in] HINSTANCE hmod,
  [in] DWORD     dwThreadId
);

基本原理就是,SetWindowsHookEx调用的函数如果目标里没有,那么它就会强行加载第三个参数中的模块句柄,就完成注入。

准备:
先创建个动态连接库,然后添加个头文件导出函数,并创建写好弹窗代码,其他什么都不用动。

c
# include <stdio.h>
# include <Windows.h>
# include <TlHelp32.h>
//dwPid	    :进程ID
//lpDllPath :动态链接库的路径
BOOL Inject(DWORD dwPid, LPCSTR lpDllPath)
{
	HHOOK g_Hook;
	HMODULE hModule = LoadLibraryA(lpDllPath);
	if (!hModule)
	{
		return FALSE;
	}
	DWORD dwFuncAddress = (DWORD)GetProcAddress(hModule, "Na1r");
	HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, dwPid);
	THREADENTRY32 te32 = { sizeof(THREADENTRY32) };
	BOOL bRet = Thread32First(hSnap, &te32);
	if (bRet)
	{
		do
		{
			if (te32.th32OwnerProcessID == dwPid)
			{
				g_Hook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)dwFuncAddress, hModule, te32.th32ThreadID);
				break;
			}
		} while (Thread32Next(hSnap, &te32));
	}
	return TRUE;
}


int main()
{
	Inject(89924, "F:\\work\\TestDll.dll");
	return 0;
}

本文作者:Na1r

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!