Wyszukiwanie tekstu w danym programie.

0

Witam.

Mam pytanie. Czy jest możliwe wyszukiwanie tekstu w danym programie bez używania adresów?
Słyszałem o tkzw. pakietach i o winsockach. Czy byłby to dobry pomysł? Jest może jakiś inny, łatwiejszy sposób?

Umiem czytać tekst z wpisanego przeze mnie adresu, ale zastanawiam się czy jest inna możliwość. Czasem ciężko mi wysniffować (chyba tak się to nazywa) adres - dlatego pytam.

Z góry dzięki.

0

Jeżeli tekst jest pobierany/wysyłany przez program jakimś nieszyfrowanym protokołem, to można go oczywiście łatwo zesniffować w zawartości pakietu. Najprościej to podejrzewam zrobić, jeżeli nie przy użyciu gotowych snifferów. To poprzez skorzystanie z rozwiązan i tak używających WinPCap. Nie wiem też o co chodzi Tobie z adresami. Bo przy czytaniu z pamięci procesu, są one niezbędne. Chociaż oczywiście można wyszukać jakieś stałe bajty, w okolicy których ma być dany tekst czy inne wartości. I odejmując dodając liczby do znalezionej pozycji - uzyskać pożądane dane. Tak działa oczywiście wiele trainerów do gier.

0

Słuchaj. Mówisz o pakietach i o sniffowaniu. Więc tak:
Mogę do tego użyć programu np. WPE PRO. Tak? Jest może jakiś tutorial jak te pakiety później stosować? Tzn. Jeśli pojawi się ten pakiet to żeby dodało to do listbox1. Wiem jak zrobić dodawanie do listboxu, jednak nie czaję z tymi pakietami.

Wydaje mi się, że sam WPE PRO nie wystarczy, tylko sam też będę musiał w swoim programie odczytywać te pakiety (własny packet reader napisać). Może da radę bez tego packet readera, nie wiem. To pytanie właśnie kieruję do was.

Znajomy zrobił niegdyś dllkę, dzięki której wyszukiwał w danym programie interesujący go tekst. Podobno nie na zasadzie pakietów, ani adresów. Niestety jak to zrobił to nie powiedział ;< Przeglądając jego dllkę znalazłem tam tylko readprocessmemory, oraz tekst, który miał zostać zlokalizowany ;d

2

No to raczej żadne pakiety czy sockety. Skoro ta dllka używała na pewno tylko ReadProcessMemory i analizowałeś jej kod. To pewnie szukała czego potrzeba w pamięci procesu i dalej coś tam z tym robiła, typu wyświetlenie. Wiem też, że na przykład kiedyś AllPlayer komunikował się z (Express)IVO w celu czytania napisów pod filmami przez niezłomny głos Jacusia. Właśnie poprzez Sockety. Ale nie zgłębiałem tematu ani jak się z tego korzysta. Bo o wiele prościej osiągnąc to można w przypadku produktu IVO Software poprzez mechanizm DDE, do którego wszystko co potrzeba jest w dokumentacji programu.

Nie używałem też nigdy jakiegoś WPE PRO. Nie wiem co to i nie potrzebuje raczej poznać. Używam jeśli mi potrzebne coś do wysniffowania to raczej WireSharka. Nie wiem w jakim języku chcesz mieć ten własny sniffer. Wydaje się mi, że coś tam kiedyś pytałeś w tematach o Obiektowym Pascalu lub Delphi. Także masz w załączniku poglądowy kod źródlowy prostego sniffera HTTP'a bazującego na WinPCap oraz modułach ICS. Może kod nie jest idealny, ale działa. Pisany był pod Delphi 7. Jego exek i kod, w tym wszystkie potrzebne pliki - zawarte są w archiwum. Masz już podstawę do pokombinowania samodzielnie dalej z tematem. Najwyżej poszukaj sobie plików do obsługi WinPCap'a pod innymi językami i napisz to po swojemu w czymś innym, jeżeli potrzebujesz.

0

Nooo kurde!! Ładnie się popisałeś. Gratuluję! To jest sniffer http. Czy sniffer do programów jest dużo trudniejszy do zrobienia?

No nic. Przejrzę to Sobie + postaram się coś zrozumieć ; >
Dzięki.

1

Spoko. A i ja się nie popisuje. Tylko pokazałem kod, który dawno temu naklepałem. A nie ma raczej czegoś takiego jak sniffer do programów. Bo nie wiem niby jak miałby sniffować. Można napisać coś, co założy Hooka na żądane funkcje WinAPI. Albo na przykład pod komunikaty wysyłane do nowych okien. I na tej bazie wyciągać jakieś informacje. Ale nie jest to na pewno sniffer. Gdyż jeżeli się dobrze orientuje, to sniffery są tylko i wyłącznie do pakietów sieciowych.

Pewnie i tak najprościej będzie wyciągnąć ten tekst z pamięci procesu, szukając najpierw powtarzalnych bajtów, które są w okolicach tego co chcemy uzyskać. I później tak jak pisałem, dodając lub odejmując od znalezionego adresu tych bajtów uzyskamy adres potrzebnych nam danych. Do przygotowania sobie rozpoznania, jakie rzeczy są gdzie w pamięci, może się przydać nawet Cheat Engine. Często się nim posiłkuje, nie tylko robiąc trainer do jakiejś gry.

1

Rozumiem, że chcesz napisać jakiegoś bota czy coś takiego do gry sieciowej. Pisałeś coś o jakimś stringu, który chciałbyś poznać.
Klient gry może zawierać string o który ci chodzi, ale nie koniecznie musi on być przesyłany przez serwer do klienta. Trzeba tu rozgraniczyć pewne rzeczy, szczególnie co to za dane. Nie wiadomo też nic o komunikacji. Najprawdopodobniej jest to protokół TCP/IP a na nim już specyficzny dla samej gry.
Jeśli chcesz podsłuchać komunikację pomiędzy serwerem gry a klientem to właśnie możesz użyć gotowych programów np. wireshark'a czy WPE PRO. Gry zazwyczaj nie przesyłają danych jawnie, ale szyfrują komunikację więc dane, które podsłuchasz mogą okazać się dla ciebie nielogiczne.
Jeśli masz szczęście i nie są szyfrowane a chciałbyś ingerować w pakiety to tak jak @olesio pisał hook na funkcje winsocket czyli inwazyjna metoda bo trzeba grzebać w kliencie (lub jego pamięci).
Ja używam nieco mniej inwazyjnej techniki polegającej na PROXY w kliencie gry trzeba tylko zmienić IP serwera na IP mojej aplikacji proxy czyli zazwyczaj localhost. Samo proxy ma 2 komponenty TServerSocket i TClientSocket po nadejściu czegokolwiek do TServerSocket przesyłam to do TClientSocket (i odwrotnie) a w międzyczasie mogę zadecydować czy przepuścić dalej dane, zablokować je czy sfabrykować własny pakiet danych i wysłać w jedną lub drugą stronę.
TServerSocket (komunikacja klient <----> PROXY)
TClientSocket (komunikacja PROXY <----> Serwer gry)
Sam kod takiej aplikacji nie jest skomplikowany, ale sprawiasz wrażenie osoby raczkującej w temacie i pewnie za wiele ci to nie da. Niestety ode mnie gotowca nie dostaniesz ;)

1

@szopenfx: tutaj opinia o raczkowaniu autora wątku jest chyba niestety jak najbardziej uzasadniona. A ja podziliłem się kodem, bo akurat miałem oraz chciałem. Toteż i nie było co robić z niego tajemnicy. Może komuś się jeszcze przyda. Zresztą nie jest to super hiper kombajn jak WireShark, tylko proste rozwiązanie na własne potrzeby. Bo czasami jakaś strona ma playera do radia tradycyjnego w dostępie poprzez www. A po co otwierać przeglądarkę i się przeklikiwać. Jeśli można o wiele łatwiej zrobić sobie playliste stacji radiowych udostępnianych poprzez ShoutCast lub podobną technikę. Wtedy sobie można posłuchać tego pod WinAMP'em lub innym playerem obsługującym radia netowe, według własnego uznania. I wtedy sniffer przydaje się do szybkiego wyciągnięcia konkretnego linku, co nie zawsze się uda po mozolnej analizie kodu strony, bo i nie wszystko będzie zwrócone przez przeglądarke. Gdyż wiadomo może to ogarniać PHP lub JS po stronie serwera.

A i ponieważ również opisałeś jak można kombinować z własnym udawanym proxy to według mnie wszystko powinno być jasne. Dalej to już tylko chęci wykazania się samodzielnością i stworzenia czegoś dla swoich potrzeb i program gotowy :) Co do Hookowania funkcji do obsługi socketów, to kto ogarnięty bez problemów znajdzie moje posty z załączonym archiwum winsock_hook.rar nie raz tutaj publikowane. I owy kod sobie dostosuje by nie działał jak prosty Opiekun Dziecka/Ucznia w Internecie, tylko wychwytywał nam pakiety TCP/IP obsługiwane tymi funkcjami. Metoda wprawdzie, jak wspomniałeś nieco inwazyjna. Ale dzięki takiemu Hookowi, co pokazuje w swoim kodzie na przykładzie akurat tam HTTP. Można również podmienić zawartość pakietów przed ich wysłaniem jak i otrzymaniem. Oczywiście nie zawsze gra może być na tyle dobrze napisana przez twórców, by w łatwy sposób pozwolić na zmiane ustawień sieciowych i użycie proxy.

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