Przechwytywanie strony WWW z przeglądarki i podmiana zawartości

0

Witam

Zastanawia mnie możliwość napisania programu w oparciu o przedstawioną niżej koncepcję:

  1. Przeglądarka np. Firefox z jakąś otwartą stroną www np. onet.pl.
  2. Mój programik przechwytuje zawartość tej strony www ( przechwytuje tagi HTML zraz z zawartością ).
  3. Program przeszukuje stronę www pod katem wystąpienia jakiegoś znaku/tagu i zmienia wartość np.
    onet</br> na bonet
  4. Program automatycznie wyświetla w czasie rzeczywistym zmienioną zawartość strony.

Zdaję sobię sprawę, iż sprawa nie jest prosta, jednakże chciałbym spróbować coś takiego zrealizować. Niestety nie za bardzo wiem jak się do tego zabrać i z który z punktów byłby najbardziej problematyczny.

Najlepiej aby kod był w C.

Dziękuję za pomoc
Andy

1

A masz dostęp do tego komputera? To 100 razy łatwiej będzie skonfigurować w przeglądarce tzw "folder ze skryptami" które są ładowane na każdej stronie. Piszesz sobie w javascripcie co potrzebujesz i voila.

0

Użycie JS to ciekawy pomysł i może najprostszy do napisania, jednakże niekoniecznie najłatwiejszy dla użytkownika. Konfigurowanie może być dla niektórych problematyczne. A chciałbym, aby program wystarczyło "kliknąć" i ma działać.

0

Specjalistą nie jestem ale wydaje mi się że JS to jest jedyny sposób żeby osiągnąć to co chcesz zrobić. Jak ma być łatwe to napisz instalator który sam wykryje przeglądarki i wrzuci skrypt tam gdzie trzeba.

0

Znalazłem bibliotekę libcurl do C oraz HTMLParser w Pythonie. Więc jednak jest w czym wybierać.
Dzięki za naprowadzenie

0

Ale ja rozumiem że ty chcesz podmienić zawartość strony wyświetlonej w przeglądarce? Do tego ani libcurl ani żadne parsowanie htmla w pythonie sie nie nada ;] Bo cały problem stanowi zmuszenie przeglądarki do wyświetlenia innej strony!
Od biedy jeśli nie chcesz tego javascriptu to możesz spróbować wykorzystać coś w rodzaju proxy, ale to znów trzeba skonfigurować w przeglądarce.

1

Możesz napisać plugin do przeglądarki (spójrz np. na Reddit Enhancement Suite), ale jak to coś prostego to userscript będzie zdecydowanie najlepszym rozwiązaniem.

0

Tak, chodzi mi o podmienienie danych w aktywnym oknie przeglądarki. A po szybkim przeglądnięciu dokumentacji HTMLPArser oraz libcurl, okazało się, iż rzeczywiście te narzędzia są w tym wypadku nieodpowiednie. A szkoda. Pozostaje chyba ten nieszczęsny JS :) Tu jednak pojawia się problem różnych przeglądarek a tym samym różnych rozwiązań. Czyli trzeba by pewnie pisać pluginy na każdą przeglądarkę z osobna. Nie wydaję się to zbyt efektywnym rozwiązaniem.
Dlatego wracając jeszcze do C lub asemblera, zastanawiam czy coś takiego jak podpięcia ( hooks ) czy coś takiego jak Przejęcie procedury okna ( window subclassing ) można by tu zastosować ?
Czyli program znajduje proces przeglądarki, przejmuje okno, wyszukuje dane i podmienia. Niestety, nie wiem czy to jest realne do zrealizowania. Dobrze kombinuje czy to ślepy zaułek ?

0

O czym ty piszesz? O_o
JS jest taki sam niezależnie od przeglądarki i cały ten twój zamieniacz można zrobić w kilka linijek kodu.
Nawet gdybyś umiał to zrobic tymi hookami to takie cos wymagaloby tygodni zmudnej pracy i pod każdą przeglądarkę byłoby inne.

0

co więcej - jeśli chciałbyś to zrobić po swojemu to wtedy dopiero musiałbyś pisać wersję na każdą przeglądarkę - ba! nawet prawdopodobnie na każdą wersję każdej przeglądarki
ponadto grzebanie w pamięci cudzego procesu będzie blokowane przez antywirusy i nie wystarczy podmienić w pamięci zawartość strony - trzeba jeszcze zmusić silnik przeglądarki do jej przeparsowania; w najgorszym przypadku musiałbyś odtworzyć działanie fragmentu silnika każdej przeglądarki i robić to jeszcze za pomocą reverse engineeringu - całkowicie ślepy zaułek; to całe lata pracy i kolejne tygodnie po każdym wydaniu nowszej wersji przeglądarki

0

Witam,

Nie wiem czy idea jest ta sama co opisana przez zainteresowanego.

Możesz przekierować pakiety - cały ruch sieciowy lub pojedyńczy program - do Twojego programu i zmieniać dane w locie.
W linuxie można do tego wykorzystać np iptables.

0

@Elga wspomniałem o tym wyżej -> proxy.

0

Co do przechwytywania pakietów to nie zawsze to wyjdzie, gdyż przy szyfrowaniu strony SSL dane na wyjściu będę bezużyteczne. To samo będzie to dotyczyło proxy.
Chyba rzeczywiście pozostaje JS, choć zaintrygowała mnie kwestia "hakerska" rozwiązania problemu. Trochę tak liznąłem temat, i zastanawia mnie czy nie da się zastosować czegoś takiego jak wstrzykiwanie kodu w proces lub zastosowanie podpięcia pod proces celem osiągnięcia zamierzonego efektu ?

0

Znalazłem coś takiego jak Greasmonkey, chyba będzie odpowiedni.
A co do innej metody to chyba można by wyciągnąć kod strony z pamięci procesu i podmienić. Ale już wiem że to byłoby poważne i czasochłonne wyzwanie programistyczne.

0

Może najpierw zacznij od ,,Hello world" w C. xD
Bo ewidentnie widać, że o większości rzeczy o których piszesz - zwyczajnie nie masz pojęcia. :-D

0

Ale przecież greasemonkey to jest zabawka tylko dla firefoxa a ty chciałeś coś uniwersalnego. Weź się chłopie zdecyduj co chcesz osiągnąć...

0

Pozostaje chyba ten nieszczęsny JS :) Tu jednak pojawia się problem różnych przeglądarek a tym samym różnych rozwiązań. Czyli trzeba by pewnie pisać pluginy na każdą przeglądarkę z osobna. Nie wydaję się to zbyt efektywnym rozwiązaniem.
Dlatego wracając jeszcze do C lub asemblera, zastanawiam czy coś takiego jak podpięcia ( hooks ) czy coś takiego jak Przejęcie procedury okna ( window subclassing ) można by tu zastosować ?

"mam 5 butelek z piwem. Cholera, pozostaje ten nieszczęsny otwieracz do butelek i otwieranie każdej butelki z osobna. Lepiej kupię Arduino i zrobię robota, który sam chodzi i wykrywa położenie butelki, połącze silnik z otwieraczem i będzie się samo otwierać. Wydam kilkaset złotych i spedze kilkadziesiat godzin nad problemem, żeby tylko nie użyć rozwiazania, ktore do tego jest przeznaczone. Bo otwieracze sa zbyt mainstreamowe"

Dlatego wracając jeszcze do C lub asemblera, zastanawiam czy coś takiego jak podpięcia ( hooks ) czy coś takiego jak Przejęcie procedury okna ( window subclassing ) można by tu zastosować ?

ale procedury okna są chyba tylko na windowsach(przynajmniej w takiej wersji, jak je prezentuje WinApi) Jak ktoś będzie miał Linuxa albo Maca, to będziesz musiał zrobić osobne wersje programu...

0

Internet Explorer od dawna umożliwia takie zabawy, w sposób całkiem przystępny i dobrze udokumentowany (IWebBrowser2, IHMLDocument2). Obojętnie, czy jego instancja, czy tylko jego kontrolka umieszczona w Twoim oknie - i tu, i tu się da, z tym, że to drugie jest wydajniejsze.
Szukaj za i analizuj przykłady z kluczem WM_HTML_GETOBJECT.

Jako że jesteś początkujący w tym temacie, z pewną dozą niepewności mogę polecić bibliotekę DispHelper do grzebania w kodzie html, w sposób podobny do JS. To, co w normalnym kodzie robi się w kilkunastu (i więcej) poziomach zagnieżdżenia, w disphelper pasuje w jednej linijce, podobnie jak w JS. Normalne dojście do elementów html w IE jest dość zawiłą papraniną w dziesiątki różnych interfejsów i jeśli to komunikacja międzyprocesowa, to wszystkie stringi "wychodzące" alokuje się funkcją SysAllocString. Status aktualnie wywoływanej metody sprawdza się zazwyczaj dwukrotnie - kod błędu i wartość zwrócona, bo NULL to też sukces. Disphelper robi wszystko w tle, niestety, wymaga nauczenia się go, ale zawiera sporo przykładów do analizowania.

Kolejnym skracaczem kodu jest biblioteka z VisualStudio - zestaw klas-wrapperów do interfejsów. Nie pomogę, nie jestem specem w tej dziedzinie, za to mogę pomóc w operowaniu interfejsami IE. Różne dziwadła budowałem, włącznie z automatycznymi klikaczami reklam.

0

Dziękuję wszystkim konstruktywne i te mniej konstruktywne sugestie i uwagi. Muszę przeanalizować wszystkie zasugerowane rozwiązania i wtedy podejmę decyzję.

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1