Dll Injection - Passiert was?
-
Soweit ich weiss, funktionier CreateRemoteThread wegen den Sessions unter Win Vista/7 auch nicht mehr richtig. Außerdem meckert mein Virenschutz immer bei Programmen, die CreateRemoteThread aufrufen.
Könnte man nicht (theoretisch) folgendes machen: Man schreibt seine Code in das fremde programm, und anstatt CreateRemoteThread aufzurufen schreibt man irgendwo in dem fremden Prozess einen Jump-Befehl zu dem Angelegten Speicherbereich. Dieser müsste dann auch von dem Anderen Programm ausgeführt werden, also müsste man auch noch wissen, wo der Befehl liegt, den dieser Prozess als nächstes ausführen wird. Ob das allerdings machbar ist oder wie man das macht, entzieht sich meiner Kenntnis.
MfG, Jochen
-
DLL/Code injections funktionieren unter Vista wie gehabt (mal abgesehen von Problemen/Warnungen der AV's). Man braucht halt nur Administrator Rechte dafür.
-
HMODULE schrieb:
!!!: LoadLibrary()+GetProcAddress()
Und wie soll das gehen?
-
Achso, naja wenn die Adressen sich nur beim Start von Windows ändern, und dann für jeden Prozess gleich sind, liegt das Problem des TE aber wo anders.
-
@Danyka
Befindet sich deine lil.dll auch im selben Verzeichnis wie die Notepad Executable oder im Systemordner?
Ansonsten musst du den absoluten Pfad angeben.
-
Ich wusste, ich übersehe irgendwas...danke für das Augen öffnen; es war tatsächlich so eine banale Lösung
-
Meine Lösung?
Dann hast du aber doch bestimmt eine Windows-Meldung bekommen, dass die DLL nicht gefunden wurde?!
-
Ja, deine Lösung und nein es gab keine Fehlermeldung, deswegen wusste ich auch absolut nicht weiter... Mein Build hatte 0 Fehler/Warnungen (VS 2010) und beim ausführen gab es auch keine Fehler.
-
Könnte man nicht (theoretisch) folgendes machen: Man schreibt seine Code in das fremde programm, und anstatt CreateRemoteThread aufzurufen schreibt man irgendwo in dem fremden Prozess einen Jump-Befehl zu dem Angelegten Speicherbereich.
Ja, das würde Theorethisch gehen. Man könnte einfach eine Funktion mit den Befehlen schreiben und dann direkt unter diese eine neue leere Funktion deklarieren und von dessen beiden Adressen die Größe rauskriegen.. damit hätte man alles was man braucht, bis auf den aufruf. Um diesen mit bestimmtheit festelgen zu können, müsste man sich jedoch auf einen bestimmten Prozess spezalisieren, was nicht immer möglich ist.
@Danyka: ich nehme an, dass du schon dieses tutorial kennst?! : http://www.autoitbot.de/coding-bereich-autoit-bot-community/tutorials/bots-memory-co/2173-code-dll-injection-tutorial/
1. Dein problem liegt wohl höchst wahrscheinlich an "CreateRemoteThread" Was gibt denn die "GetLastError()" Funktion zurück?
führe mal in etwa an einigen Stellen folgendes aus um den Fortschritt deiner funktion zu überprüfen :
printf("PathSize: %d", PathSize); cout << endl; printf("PID: 0x%x", PID); cout << endl; printf("hProcess: 0x%x", hProcess); cout << endl; printf("AllocAdresse: 0x%x", AllocAdresse); cout << endl; printf("hRemoteThread: 0x%x", hRemoteThread); cout << endl; printf("hDll: 0x%x", hDll); cout << endl << endl; printf("Last Error: 0x%x", GetLastError()); cout << endl; system("pause");
2. Du solltest beachten, dass "String" eine klasse ist und deswegen dllPath.c_str nicht die gleiche Speichergröße hat wie dllPath.
nimm also am besten sizeof(dllPath.c_str) statt sizeof(dllPath), wenn du schon mit String statt c-strings arbeiten musst
MFG,
Deathly AssassinEdit: Achja.. Wenn du sowieso deinen überwigend Code im C-Stil hälst, wundert es mich umso mehr, warum du statt eines normalen C-Strings die String Klasse benutzt
-
Lies doch! Das Problem wurde schon gelöst!