Dll Injection; Funktion callen von Außen; Bestehenden Socket nutzen
-
Hallo.
Das Ziel ist eine Art simpler Packet Sniffer wie WPE.
Mittels DLL Injection und einem Detour werden die Winsock Funktionen send, recv, ... gedetourt. So können die Daten ausgelesen werden. Das Funktioniert auch.
Das eigentliche Problem: Eine andere Applikation soll von Außen die gesnifften Pakete so oft wie möglich senden können.
Kann man einfach die Socket ID (die man durch Detour ja leicht auslesen kann) an die außenstehend Applikation übergeben und mit ihr die Daten senden, oder muss man selbst eine neue Vebindung aufbauen?
Wenn das nicht geht, wie könnte ich von Außen eine Funktion in der schon injezierten DLL aufrufen, sodass sie im Programm ausgeführt wird, in das die DLL injeziert wurde (also eine Funktion zum Senden bereits in der DLL die dann die bestehende Verbindung und Socket ID nutzt)?
-
deine "socket id" ist ein handle und die sind bekannterweise prozessbezogen, also geht das nicht.
-
The WSADuplicateSocket function is used to enable socket sharing between processes.
-
Danke, die Funktion kannte ich nicht.
Ich denke aber, der einfachere Weg wäre die Funktion in die Dll zu packen und vom anderen Programm aus zu callen.
Mir fällt nur nichts ein wie.
-
events
-
du könntest das auch durch inter process communication lösen, konkret zb mit named pipes..

-
was sind denn named pipes o.O
-
-
also ich hab schon mal so ein ähnliches projekt geschrieben..

du hast halt dein programm, in dem machst du eine named pipe auf.
dann hast du die dll die injiziert wird. die gesnifften daten schickst du über die pipe an dein programm, und das kann die daten sooft du willst iwo hinschicken.. ^^
du kannst in der dll auch die senden funktion blockieren, die daten in deinem programm modifizieren, und dann die veränderten daten versenden..

-
danke für die antworten

-
aber ich hab noch nen problem ... und zwar wie bekomme ich in meinem externen programm die WSAPROTOCOL_INFO in die WSASocket() funktion wenn ich in der dll WSADuplicateSocket() aufrufe??
-
also in WSADuplicateSocket() speichert die WSAPROTOCOL_INFO ja in nem buffer .. wie bekomm ich den in mein externes programm? ^^
danke nochmal im voraus