C ++ - CreateRemoteThread DLL Injection [Windows 7]

Wo immer ich nachschaue, ist die Methode zum Injizieren über CreateRemoteThread dieselbe, die Methode zum Abrufen der Prozess-ID jedoch nicht ... Meine Funktion gibt die richtige Prozess-ID zurück, und ich bin nicht an Hilfe interessiert, sodass ich nichtig werde dieser Teil heraus und nur die tatsächliche Einspritzung mit einschließen.

Ich lerne gerade DLL-Injection und versuche es auf notepad.exe. Wenn die Injektion funktioniert, ändert sich der Titel eines Notizblocks von "Unbenannt - Notizblock" in "Fixiert".

#define DLL_NAME "injectme.dll"

.....

BOOL InjectRemoteThread(DWORD ProcessID)
{
    HANDLE RemoteProc;
    char buf[50]        =   {0};
    LPVOID MemAlloc;
    LPVOID LoadLibAddress;

    // Process ID does show correctly!
    WCHAR id[100];
    StringCbPrintf(id, 100, L"%d", ProcessID); // id contains the process ID... is confirmed in comparing ID shown in tasklist and the messagebox.
    MessageBox(NULL, id, L"Process ID", MB_ICONINFORMATION);
    // Process ID does show correctly!

    if ( !ProcessID )
    {
        MessageBox(NULL, (LPCWSTR)GetLastError(), L"An error occured", NULL);
        return 0;
    }
    RemoteProc          =   OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, ProcessID);
    if ( !RemoteProc )
    {
        MessageBox(NULL, (LPCWSTR)GetLastError(), L"An error occured", NULL);
        return 0;
    }
    LoadLibAddress      =   (LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA");
    MemAlloc            =   (LPVOID)VirtualAllocEx(RemoteProc, NULL, strlen(DLL_NAME)+1, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(RemoteProc, (LPVOID)MemAlloc, DLL_NAME, strlen(DLL_NAME)+1, NULL);
    CreateRemoteThread(RemoteProc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddress, (LPVOID)MemAlloc, NULL, NULL);

    CloseHandle(RemoteProc);
    VirtualFreeEx(RemoteProc, (LPVOID)MemAlloc, 0, MEM_RELEASE | MEM_DECOMMIT);
    return 1;
}

Die DLL verwendet den Injektor einer anderen Person, aber ich verstehe nicht, warum ... Er befindet sich in der Tat im selben Verzeichnis wie der Injektor.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage