C++ - CreateRemoteThread DLL-Injektion [Windows 7]

Wo ich suchen die Methode der Injektion durch CreateRemoteThread ist die gleiche, jedoch die Methode der grabbing-die Prozess-ID ist nicht... Meine Funktion gibt die korrekte Prozess-ID, und ich bin nicht daran interessiert, jede Hilfe, damit ich nichts das Teil heraus und nur die eigentliche Injektion.

Ich bin gerade erst lernen mit DLL injection und bin versucht, auf notepad.exe. Wenn die Einspritzung funktioniert, wird der Titel der Editor von "Untitled - Notepad", um "Süchtig".

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

Der DLL arbeitet mit einer anderen person Injektor, aber ich verstehe nicht, warum...
Es ist in der Tat im gleichen Verzeichnis wie der injector.

  • Ich habe gesehen etwas ähnliches. Ich war nur Herumspielen auf XP, und damit ein Prozess mit 100% CPU durch DLL-Einspritzung, die fein gearbeitet. Wenn ich versuchte es auf Windows 7, es hat nicht funktioniert. Gibt es etwas um Sie herum verändert, möglicherweise behoben werden, indem die Anpassung Ihrer Prozess-token, aber ich sah noch nie zu weit in Sie.
  • Machen Sie keinen Fehler, insbesondere in der OpenProcess Bühne?
  • Nicht in meinem Fall nicht. Ich vermute in diesem Fall nicht entweder.
  • Ich bekomme keine Fehler, überall, leider.
  • Nicht sicher, ob diese Fragen, sind aber beide Ihre app und Editor, der die gleiche Architektur, also sowohl 64 - oder 32-bit?
  • Sie können auch SetWindowsHookEx API inject DLL.
  • Ich benutze 32-bit-Windows, so dass beide Programme sollten 32-bit. Auch weiß ich über SetWindowsHookEx-und das möchte ich vertiefen und zu verstehen, jede Methode der Injektion, jedoch möchte ich diese Möglichkeit erstmal arbeiten.
  • Ich möchte nur hinzufügen, dass - ja - die Architektur macht den Unterschied! Ich habe gerade angefangen zu lernen, DLL-injection Techniken in C++, und - nach machen die gleichen Fehler, du hast über und unter der Annahme, dass diese von Windows automatisch finden, die-DLL in den System32-Ordner habe ich gefunden, dass, um für Sie zu arbeiten, muss die DLL kompiliert werden, wie die gleiche Architektur wie das Ziel-Programm. Ich bin nicht sicher, dass der Programmcode, der die Injektion selbst...
  • ***Auch erwähnenswert: CreateRemoteThread zurück eine gültige thread-ID und scheint erfolgreich, auch wenn Sie nicht zum Speicher ordnungsgemäß für den DLL-Pfad (und die Injektion somit nicht arbeiten), da diese nicht in den Anwendungsbereich der Funktionen Verantwortung. Dies hatte mir hing, sich für eine gute Weile.

InformationsquelleAutor user1435947 | 2012-12-31
Schreibe einen Kommentar