......
DWORD ret;
char *DllName = "c:\MyDll.dll";
int len = strlen(DllName) + 1;
PVOID param = VirtualAllocEx(hProcess, NULL, len,
MEM_COMMIT | MEM_TOP_DOWN,
PAGE_READWRITE);
if (param != NULL)
{
if (WriteProcessMemory(hProcess, param,
(LPVOID)DllName, len, &ret))
{
for (DWORD p = 0; p < NumberOfThreads; p ++)
{
hThread = OpenThread(THREAD_ALL_ACCESS, 0, ThreadId[p]);
if (hThread != 0)
{
InjectDll(hProcess, hThread, (DWORD)param);
CloseHandle(hThread);
}
}
}
......
其中InjectDll:
void InjectDll(HANDLE hProcess, HANDLE hThread, DWORD param)
{
QueueUserAPC(
(PAPCFUNC)GetProcAddress(GetModuleHandle("kernel32.dll", "LoadLibraryA",
hThread,
(DWORD)param
;
} |