Handle erhalten
-
Dass die Addresse der Kernel32.dll sich von Prozess zu Prozess unterscheiden würde kann ich absolut nicht bestätigen. Ich benutze Win7 64bit seit RC1 und habe das noch nie beobachten können.
Du musst es ja nicht so machen, war nur ein gutgemeinter Tipp welcher, zumindest für mich, perfekt funktioniert

-
hmm das habe ich mal gehört ansonsten sieht das schon Top aus

dürfte ich bitte die call export Funktion sehenß
-
Was mir gerade einfällt, selbst wenn die Ladeaddresse des Moduls varieren würde, könnte man immer noch ganz einfach die Modul-Liste des Zielprozesses abwandern und einfach die Ladeadresse der Kernel32.dll abgreifen

Den Code zu callExport finde ich gerade nicht, aber sie funktioniert so:
1. Modul im lokalen Prozess per LoadLibrary laden, mit GetProcAddress die Addresse des Exports bestimmen.
2. Das Offset des Exports bestimmen indem man schlicht die Baseaddress der DLL von der Addresse des Exports substrahiert.
3. Die Modul-Liste des Zielprozesses abwandern und das Modul suchen, Offset addieren und einfach CreateRemoteThread darauf loslassen.
-
danke für die Erklärung.
Aber was ich nicht so ganz verstehe, dann hat man ja 2 neue Threads, in einem läuft dann WinMain und in einem die Funktion?
-
Cruelreaver schrieb:
danke für die Erklärung.
Aber was ich nicht so ganz verstehe, dann hat man ja 2 neue Threads, in einem läuft dann WinMain und in einem die Funktion?DllMain läuft nur zum Initialisieren der DLL und wird von LoadLibrary miterledigt. Dh. der eine Thread ist praktisch sofort beendet. Jetzt ist es halt Geschmackssache ob man seinen eigenen Thread in der DllMain startet oder in einem Export. Allerdings sollte man zweiteres tun, Microsoft rät vom erstellen von Threads in der DllMain ab.

-
cool danke dann werde ich das auch mal so versuchen.
-
Ich erstelle einen Prozess mit CREATE_SUSPENDET.
Und möchte dann meine Dll injecten.Nur warum kann man nicht die Moduleliste abwandern wenn er suspendet ist?
Module32First gibt dann no more modules beim 1. mal schon zurück.
Das ist doch blödsinn oder? kernel32.dll müsste auch wenn er suspendet gestartet wird bereits im Prozess sein? Oder geht das mit dieser Methode nicht?
-
in der MSDN steht ja auch
"Ensure that the target process was not started suspended" beim CreateSnapshot.
Aber wie soll man die Modulliste des Prozesses sonst abwalken? Das geht dann nicht?
-
Icematix
ok das war Blödsinn, die Adressen sind am gleichen Ort.
Dachte das ist so wegen imagebase randomization.
Aber das ist nur bei PC neustart so.Jedenfalls ist mir noch was anderes aufgefallen.
Man braucht für die base Adresse von dem Modul nicht extra die Prozessliste abwandern, weil die GetExitCodeThread zurückgibt.
Dann ist es noch etwas effizienter.Ansonsten nochmal vielen Dank für die Hilfe das alles klappt super.
-
Cruelreaver schrieb:
in der MSDN steht ja auch
"Ensure that the target process was not started suspended" beim CreateSnapshot.
Aber wie soll man die Modulliste des Prozesses sonst abwalken? Das geht dann nicht?Wenn es wirklich nicht mit der tlhelp api will musst du eben die double linked list im peb walken. Den process environment block bekommst du mit NtQueryInformationProcess mit ProcessBasicInformation als information-class [1].
Damit kannst du dann auf den PEB bzw. über den PEB auf die PEB_LDR_DATA struct zugreifen [2] welche dann die Liste mit den geladenen Modulen enthält.[1]: http://msdn.microsoft.com/en-us/library/ms684280(VS.85).aspx
[2]: http://undocumented.ntinternals.net/UserMode/Structures/PEB_LDR_DATA.html