APC注入DLL(一)
提供一点APC注入的实例:
条件:取到进程句柄
DWORD APCInject(HANDLE hProcess,DWORD tid)
{
const char szInjectModName[] = "c:\\testdll.dll";
DWORD dwLen = strlen(szInjectModName);
PVOID param = VirtualAllocEx(hProcess,NULL, dwLen, MEM_COMMIT | MEM_TOP_DOWN, PAGE_EXECUTE_READWRITE);
if (param != NULL)
{
DWORD dwRet;
if (WriteProcessMemory(hProcess, param, (LPVOID)szInjectModName, dwLen, &dwRet))
{
HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, tid););
if (hThread != NULL)
{
//
// 注入DLL到指定进程
//
QueueUserAPC((PAPCFUNC)LoadLibraryA, hThread, (ULONG_PTR)param);
}
}
}
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD dwPID = 0;
DWORD tid = GetWindowThreadProcessId(FindWindow(L"XXXXXXX", 0), &dwPID);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
if (hProcess == NULL)
{
return 1;
}
APCInject(hProcess,tid);
return 0;
}