Wysyłanie przez otwarte gniazdko.

asperos

Użytkownik
Dołączył
Styczeń 15, 2005
Posty
3
Witam, a oto mój problem:
Miejsce akcji: System Windows (XP ale to chyba nie ma znaczenia)
Język urzędowy: C++
Pacjent: Aplikacja która nadaje dane przez winsocket.

Problem: chciałbym wysłać dane z mojego komputera tak by były one uznane za wysłane przez Pacjenta. Udało mi się już to zrobić przez WPE Pro, lecz rozwiązanie to nie jest satysfakcjonujące (choćby ze względu na konieczność używania dodatkowego programu), ale daje sygnał że można to zrobić.
Raz jeszcze o problemie: Jak dobrać się do SOCKET którego używa inny program (jak pobrać socked id w oparciu chociażby o uchwyt okna aplikacji czy tez jej pid i jak użyć go do wysyłania danych przez istniejące w systemie gniazdko)
PS. Chyba należało by dodać że nie mam ani kodu źródłowego pacjenta, ani kontroli żanej nad nim i chciałbym by nie mógł się dowiedzieć o tym że się podszywam (choć to jest drugorzędne).
to chyba tyle
smile.gif
, będę wdzięczny za wszelkie odpowiedzi, a za przykłady kodu jeszcze bardziej (proszę tylko nie odsyłajcie do google bo spędziłem tam już miesiąc szukając).
Pozdrawiam
 

Marlowe

Użytkownik
Dołączył
Listopad 4, 2004
Posty
27
Bardzo jestem zainteresowany efektami jakie udało Ci się osiągnać bo pracuję od pewnego czasu nad tym samym i też natrafiłem na spore trudności choć ja szukam nie tyle na na googlach ile na Microsoft Developer Network, dokumentacja do API Winsocków jest dość bogata ale w tym konkretnym przykładzie tak naprawdę niewiele z niej wynika a to jedyne rozwiązanie, dostep do portu otwartego przez jeden proces nie jest możliwy z innego i tego obejść się nie da. Mój program ma mieć formę biblioteki dll ładowanej jako plugin do Internet Explorera dynamicznie analizującego połączenia nawiązywane przez niego na niestandardowych portach np. otwierane przez aplety javy.
 

asperos

Użytkownik
Dołączył
Styczeń 15, 2005
Posty
3
W MSDN nie znalazłem informacji jak to zrobić, ani informacji że się tego nie da. A to że się da to wiem (Program WPE PRO potrafi wstrzyknąć pakiety do dowolnego gniazdka (używając id gniazdka - jednego z parametrów wywołania send (wywołania podglądniętego w disasemblerze)), potrafi to zrobić nawet gdy gniazdko było utworzone przed uruchomieniem programu (więc proxy nie wchodzi w grę), a zamknięcie programu nie przerywa połączenia (nie wiem czy wyklucza to podmianę adresu wywoływanej funkcji ale adresy w aplikacji która normalnie korzysta z gniazdka sie nie zmieniają).


@ Marlowe chyba nasze problemy nie są do konca podobne (ja nie potrzebuję wiedzieć jakie dane aplikacja przyjmuje). Jeżeli chcesz kontrolować cały ruch winsock aplikacji to da to się chyba zrobić przez madcodehook to pozwoli podmienić metody send i recive w winsocku.
Moje pytanie czy można pisać do gniazdka bez hookowania funkcji
smile.gif
.


tak wię Bump ?
może ktoś wie?
 

goliat

Użytkownik
Dołączył
Styczeń 16, 2005
Posty
23
niesprawdzalem ale jestem na 90% pewien ze majac uchwyt do socketa, (w rzeczywistosci identyfiakator) nie pedziesz mogl na nim wykonywac operacji IO. kod operujacy na sockecie musi wedlug mnie dzialac w przestrzeni adresowej procesu ktory ma gniazdko.
mozna to osicgnac na pare sposobow. ale potem i tak jest problem identyfikacji gniazdka. jakie masz kryteria poszukiwania? proces moze miec z 10 gniazdek otwartych. otwarte uchwyty mozna zdobyc ale nie jestem pewien, czy bedzie wiadomo ze dotycza gniazdek i jakich.
jestes pewien ze musisz pisac akurat do gniazdka polaczonego?
jak chcesz ominac firewalla (zgaduje) to mozesz stworzyc nowe gniazdo i jezeli aplikacja jest uwierzytelniona to sie polaczysz
smile.gif
 

asperos

Użytkownik
Dołączył
Styczeń 15, 2005
Posty
3
Mój konkretny problem to istniejąca aplikacja używająca gniazdka. Chcę by dane nadawane przez komputer były identyfikowane jako nadane przez tą aplikację (a naweet dokładniej przez to połączenia). Nie mogę stworzyć nowego gniazdka. Samodzielne budowanie pakietu też nie wchodzi raczej w gre.
Wiem że takie coś można robić (przykładem jest dzialanie przytoczonego już WPE Pro) pytanie teraz jak.
 

goliat

Użytkownik
Dołączył
Styczeń 16, 2005
Posty
23
sa przynajmniej dwie metody. aplikacja w user mode albo driver.
driver musialby byc wyzszego poziomu np TDI.

domyslam sie ze wolisz user mode.
nie wiem na jakim etapie pisania jestes. ale sypne paroma radami:
masz dwie aplikacje, i zaluzmy ze posiadasz tzw socket handle, gniazda w innej aplikacji. NIE MOZESZ uzywac go w innym procesie bo to nie ma sensu. system uswiadomi ci to bledem WSAENOTSOCK. ta zasada "bezpieczenstwa dotyczy wielu rzeczy w systemie.
gdybys pisal driver patrzylbys na ten problem z zupelnie innej perspektywy.

Pytanie: co zrobic zeby miec dostep do gniad (ogolnie uchwytow i obiektow) innego procesu?
Odpowiedz: trzeba byc tym procesem!

juz o tym pisalem. mozna to osiagnac na pare sposobow.
mozna np. sprawic ze obserwowany przez nas proces zaladuje biblioteke dll. wtedy kod tej biblioteki bedzie sie wykonywal w przestrzeni adresowej obserwowanego procesu. czyli jestesmy tym procesem.

ta biblioteka powinna znalezc poszukiwane przez ciebie gniazdko i wykonac zadane operacje IO.

i to by bylo wszystko.
 
Do góry Bottom