1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
// 使用 CreateRemoteThread 在目标进程中创建线程执行 LoadLibrary
BOOL RemoteThreadInjection(DWORD dwProcessId, LPCSTR szDllPath) {
// 打开目标进程
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
// 在目标进程中分配内存
LPVOID pRemoteMemory = VirtualAllocEx(hProcess, NULL, strlen(szDllPath) + 1,
MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
// 写入DLL路径
WriteProcessMemory(hProcess, pRemoteMemory, szDllPath, strlen(szDllPath) + 1, NULL);
// 获取 LoadLibrary 地址
LPTHREAD_START_ROUTINE pLoadLibrary = (LPTHREAD_START_ROUTINE)
GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
// 创建远程线程
HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, pLoadLibrary, pRemoteMemory, 0, NULL);
// 等待线程执行完成
WaitForSingleObject(hThread, INFINITE);
// 清理资源
VirtualFreeEx(hProcess, pRemoteMemory, 0, MEM_RELEASE);
CloseHandle(hThread);
CloseHandle(hProcess);
return TRUE;
}
|