Wie DLL injekten ohne das sie im system oder process ordner liegt?
-
Das Setzen eines systemweiten Hooks (SetWindowsHookEx) mit einer Hook-Function in der DLL sorgt dafür, dass diese DLL von jedem User-Prozess im System geladen wird.
-
Hä? Habt ihr meine Frage net verstanden? Sorry, vieleicht ein wenig doof formuliert, werds einfach noch mal versuchen.
Also mal grafisch:
(User Proc.) (User DLL) +--------------+ +------------+ | | | | | DLL - |<-------->| DLL | | Injector | | | | | +------------+ +--------------+ ^ | v +--------------+ | | | Fremder Proc.| | | +--------------+Soweit is ja klar was ich machen will, aber das Problem ist, dass sich die DLL NUR injektzieren lässt, wenn sie im selbem Verzeichnis/Ordner liegt wie die .exe des fremden Prozesses, ODER sie liegt im system32 Verzeichnis.
Meine Frage war, geht das injektzieren auch ohne das meine DLL im selbe Verzeichnis/Ordner liegt oder im system32 Ordner?Gruß Tobi.
-
T0bi schrieb:
Hä? Habt ihr meine Frage net verstanden?
Hast du meine Antwort nicht verstanden?

Auf oben beschriebene Art und Weise wird die DLL von jedem Prozess geladen, egal wo sie liegt.
-
Hm aber benutze ich SetWindowsHookEx net um so eher Keyboard hook ect mit WH_XXX zu setzen?
PS: Die DLL soll via' Remotethread geladen werden.
-
Pfui pfui...

Es wird ganz einfach die Windows-Suchreihenfolge verwendet, wenn du keinen absoluten Pfad angibst.
Sprich (iirc) system32 -> windows -> system -> %SYSTEMROOT% -> Verzeichnis der Exe
Muss nicht stimmen. Du solltest mal die MSDN bzw. Google bemühen.
-
Sorry aber ich hab jetzt die Ausrede, dass ich die MSDN nicht aufrufen kann er lädt die seite net, kA wieso nicht.
Ich hab mich entschlossen nen Keyboard hook zu installieren fuer den process, dann brauch ich des net via Remote machen oder?
-
Ok also ich habe mich fuer die Variante mit dem Keyboard hook entschieden ist wohl die einfachste

Allerdings nervt mich jetzt eine Sache. Ich wollte die DLL dynamisch laden:typedef BOOL (*fpInstallHook)( HWND, DWORD ); typedef BOOL (*fpUnistallHook)( ); DWORD dwProcessThreadID = 0; HMODULE hModule = LoadLibrary( "Direct3DHook.dll" ); fpInstallHook inHook = (fpInstallHook)GetProcAddress( hModule, "InstallHook" ); fpUnistallHook unHook = (fpUnistallHook)GetProcAddress( hModule, "UnistallHook" ); HWND hWindow = FindWindow( 0, szWindowName ); dwProcessThreadID = GetWindowThreadProcessId( hWindow, 0 ); InstallHook( 0, dwProcessThreadID ); // inHook( 0, dwProcessThreadID ); getchar( ); UnistallHook( ); // unHook( ); FreeLibrary( hModule );Allerdings, wenn ich sie dynamisch laden will, dann bekomme ich ne schicke Fehlermeldung die mir sagt, das meine Injector.exe eine access violation hat an der stelle 0xC0000005, sie kommt noch nicht einmal so weit den hook zu setzen. wenn ich die sache statisch abwickeln möchte funktioniert das.
Idden?
-
Das Setzen des Hooks erfolgt von außen. Du brauchst nur die Adresse der Hook-Funktion innerhalb der DLL.
Kommunizieren musst du mit der DLL z.B. über ein MemoryMappedFile, da die DLL natürlich in jedem Prozess neu geladen wird und sich damit auch keine Variablen etc teilen.
Deinen Code kannst du dann z.B. in den EntryPoint klatschen.
-
Wieso kann mir ja auch einfach ein paar funktionen fuer die DLL schreiben, dann kann ich den shared bereich der dll nutzen, und die wparam, lparam infos kann ich auch auslesen bzw. sie werden mir an eine nachrich (WM_USER+2) gesendet.
nur ists merkwürdig das statischen laden der dll geht und das dynamische net.
-
Ja ich kenne dein Problem, das ging mir damals beim ersten Versuch auch so.
Ohne Kenntnis deines Quellcodes kann man das aber nur schwer beantworten.
-
Hm nuja, ist ja eigentlich auch egal ob ich das im injector dynamisch oder statisch mache. Jetzt bräuchte ich hier mal hilfe

http://www.c-plusplus.net/forum/viewtopic-var-p-is-1553125.html
Gruß Tobi
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.