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;
}

posted @ 2015-05-31 23:27  笔直的一道弯  阅读(320)  评论(0编辑  收藏  举报