Dll Injection
-
Heyho und einen schönen 4. Advent

ich versuche mich an Dll Injection und leider stürzt die Anwendung, in die ich injizieren möchte nach aufrufen einer Funtkion ab.
Hier etwas Sourcecode:HANDLE hProcess, hAllocMemory, hRemoteThread; char szPath[256]; char Param[1024]; strcpy(szPath, "lib.dll"); strcpy(Param, "Hello World"); HINSTANCE hDll = LoadLibrary(szPath); hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwPid); hAllocMemory = VirtualAllocEx(hProcess, 0, intSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE); WriteProcessMemory(hProcess, (void*) hAllocMemory, (void*) szPath, intSize, 0); hRemoteThread = CreateRemoteThread(hProcess, 0, 0, (LPTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA"), hAllocMemory, 0, 0); WaitForSingleObject(hRemoteThread, INFINITE); VirtualFreeEx(hProcess, hAllocMemory, intSize, MEM_DECOMMIT); hAllocMemory = VirtualAllocEx(hProcess, 0, sizeof(Param), MEM_COMMIT, PAGE_EXECUTE_READWRITE); WriteProcessMemory(hProcess, (void*) hAllocMemory, (void*) &Param, sizeof(Param), 0); hRemoteThread = CreateRemoteThread(hProcess, 0, 0, (LPTHREAD_START_ROUTINE) GetProcAddress(hDll, "Test"), hAllocMemory, 0, 0); WaitForSingleObject(hRemoteThread, INFINITE); VirtualFreeEx(hProcess, hAllocMemory, sizeof(Param), MEM_DECOMMIT); CloseHandle(hProcess);Wenn ich den zweiten Teil weglasse (wo die Funktion "Test" aufgerufen wird) stürzt das Programm nicht ab. Ich weiß echt nicht, woran es liegt

MFG DerCoder
-
ka obs daran liegt aber
WriteProcessMemory(hProcess, (void*) hAllocMemory, (void*) &Param, sizeof(Param), 0);sizeof(Param) ist kleiner als Param gross ist, denn sizeof gibt dir wahrscheinlich den wert 4 zurück, also die grösse von char allgemein, icht die länge des strings param!
um die länge des strings welcher gschribene werden soll zurükbekommen musst du schon strlen(); verweden!
also wenn du Hello World in den process schreiben willst dann nur so:WriteProcessMemory(hProcess, (void*) hAllocMemory, (void*) &Param, strlen(Param), 0);
-
zomg dll inject0rn wollen aber dann bei sowas banalem solche noobfehler machen. solche programmer brauchen wir!
-
welt schrieb:
zomg dll inject0rn wollen aber dann bei sowas banalem solche noobfehler machen. solche programmer brauchen wir!
Lass ihn doch. Übung macht den Meister.
:xmas2:
-
Hm, ich habe mir einfach mal sizeof() ausgeben lassen, da kam 1024 raus.
Kann es sein, dass das Programm, in das ich zu injizieren versuche sich dagegen wehrt?
Wenn ich zum Beispiel in Windows Programme, wie Notepad, injiziere, passiert schon mal gar nichts.Achja: Wenn ich ein Funktion aus der Dll aufrufe, die keine Parameter braucht, quasi:
hRemoteThread = CreateRemoteThread(hProcess, 0, 0, (LPTHREAD_START_ROUTINE) GetProcAddress(hDll, "Test"), hAllocMemory, 0, 0); WaitForSingleObject(hRemoteThread, INFINITE);stürzt das Zielprogramm auch ab >_>
EDIT: Sehe grade erst den netten Post von welt... Wenn du mit solchen banalen noobfehlern nicht zu kämpfen hast, freut es mich für dich, aber die Frage ist, was macht ein solcher Mensch hier im Forum, wo man sich eigentlich untereinander hilft. Wenn du mir nicht helfen kannst, brauchst du auch nicht im Thread zu posten.
-
hDll stimmt nicht. LoadLibrary muß auch im Kontext des Zielprozesses aufgerufen werden. Viel Spaß noch.

-
Die Dll wird doch in Zeile 11 geladen, oder verstehe ich was falsch?
-
Zeile 11 schreibt nur irgend nen Krams in den Speicher... :xmas2:
-
Ah ich meine 12 -.- Sry
-
In Zeile 12 wird "kernel32.dll" via GetModuleHandle "geladen". Wo aber wird LoadLibraryA für "lib.dll" im Zielprozess aufgerufen?

-
Hm aber es wird doch die ProcAddress von "LoadLibraryA" aus der kernel32.dll gesucht und als Thread im Zielprozess remote gestartet und als Parameter wird der allocierte Speicher übergeben, was die "lib.dll" starten sollte.
Wie sollte es denn deiner Meinung nach aussehen?
-
Hab den Fehler gefunden

Peinlich peinlich!...
Ich muss den Pfad natürlich absolut angeben und nicht relativ, d. h.:D:\\Programmieren\\C++\\Development\\Injection\\Dll\\lib.dllund nicht
lib.dllDanke für die Bemühungen