ReadProcessMemory i dynamiczne adresy

0

No wiec po paru latach chodzenia po google i wielu probach wyciagniecia informacji od hamskich ludzi nie chcacych dzielic sie wiedza dotarlem tutaj z moim problemem.

Otoz od dluzszego czasu interesuje sie botami (gdzies tak ze 4 lata juz bedzie) i staram sie je tworzyc glownie dla zabawy (samo pisanie bota i ogladanie efektow jest dla mnie wystarczajaco zabawne) i glownie pisalem skrypty do 'pewnego' bota w javie ale niestety juz tego nie moge robic wiec chce pisac na wlasna reke (w c++ i tylko o to mi chodzi).

Nie mam na mysli prostych klikaczy ktore w danym czasie cos tam klikna, z tym nie bylo by zadnego problemu. Ale chodzi mi o bota ktory pobiera potrzebne dane i wedlug nich wykonuje jakies czynnosci (cos tam ostatnio iirc wikipedia mi podpowiedziala ze to juz nie sa boty a sztuczna inteligencja (tzn to co pisalem/chce pisac)) i moj problem polega na tym, ze nie mam pojecia jak mam pobrac te dane.

Czytalem na necie wiele poradnikow, przeszukalem wiele stron i for, ale to zamalo. Jedynie dowiedzialem sie nieco o ReadProcessMemory i troche o pakietach ale pakiety wole ominac.

Wiec moja sytuacja wyglada tak - adresy znalezc umiem i uzywam do tego CheatEngine. Niech bedzie przyklad taki - mam gre i umiem dowiedziec sie w jakiej galaktyce aktualnie sie znajduje (tzn umiem znalezc adres w CE ale nie wiem jak zmusic RPM aby zwrocil mi to w string'u) ale nie moge znalezc wiekszosci potrzebnych mi adresow. I w tym podpowiedzial mi pewien znajomy, ze chodzi o jakies "dynamiczne adresy" czy cos takiego. Nie mam pojecia jak mam sobie z tym poradzic zeby wyczytac np aktualna szybkosc statku lub odleglosc do jakiegos obiektu (sa pokazane w grze oczywiscie). I w tym temacie wiecej na google znalezc nie moge wiec pisze tutaj.

Tak w skrocie: chodzi mi o skanowanie "dynamicznych adresow" za pomoca ReadProcessMemory.

Licze na to ze sa tu jacys powazni ludzie ktorzy zrozumia tresc postu ktorego napisanie zajelo mi 20 minut:P

1

To nie jest taka prosta sprawa jak Ci sie wydaje.

Po pierwsze zalozmy, ze gra nie ma zabezpieczene zewnetrznych, bo wtedy wszystko jeszcze bardziej sie komplikuje. Mozesz sobie znalezc za pomoca CE adres ale musisz wiedziec, ze nie jest on dynamiczny tj. ze nie jest to jakis wskaznik na wskaznik ktory za kazdym wlaczeniem gry bedzie sie zmienial. Tutoriale do tego sa jak to znajdowac adres bazowy(+ ew. offset)

Odczytywac wartosc pod danym adresem mozesz za pomoca funkcji readprocessmemory ktorej przekazujesz uchwyt okna,adres w pamieci, bufor, ile danych pobrac(pisze z pamieci).

Po poprawnym odczytaniu mozesz w ten obszar pamieci zapisac wlasna wartosc za pomoca writeprocessmemory. Tworcy gier stosuja rozne techniki zeby uniemozliwic grzebanie w pamieci. Czasami trzeba uzyc funkcji virtualprotect(ex) w celu zmiany "opcji dostepu" do pewnego obszaru pamieci. Mowa tu o grach mmo/online bo w single raczej takich rzeczy nie ma.

Ogolnie tutoriali itp. rzeczy jest sporo na google. Gotowego kodu nikt Ci nie da, trzeba wejsc w dokumentacje i tam uczyc sie wykorzystania danych funkcji.

Zazwyczaj latwiej jest operowac na pakietach, jesli nie chcesz sam analizowac ich to do wiekszosci gier znajdzie sie juz gotowce mowiace za co dany pakiet odpowiada. Rowniez daje to wieksze pole do dzialania niz same operacje na pamieci.

Calkiem przystepny tutorial na start. Sam kiedy z niego korzystalem.
http://www.rohitab.com/discuss/topic/35537-cc-reverse-engineering-tutorial-for-newbies/

0
Krycho napisał(a)

To nie jest taka prosta sprawa jak Ci sie wydaje.

Po pierwsze zalozmy, ze gra nie ma zabezpieczene zewnetrznych, bo wtedy wszystko jeszcze bardziej sie komplikuje. Mozesz sobie znalezc za pomoca CE adres ale musisz wiedziec, ze nie jest on dynamiczny tj. ze nie jest to jakis wskaznik na wskaznik ktory za kazdym wlaczeniem gry bedzie sie zmienial. Tutoriale do tego sa jak to znajdowac adres bazowy(+ ew. offset)

Odczytywac wartosc pod danym adresem mozesz za pomoca funkcji readprocessmemory ktorej przekazujesz uchwyt okna,adres w pamieci, bufor, ile danych pobrac(pisze z pamieci).

Po poprawnym odczytaniu mozesz w ten obszar pamieci zapisac wlasna wartosc za pomoca writeprocessmemory. Tworcy gier stosuja rozne techniki zeby uniemozliwic grzebanie w pamieci. Czasami trzeba uzyc funkcji virtualprotect(ex) w celu zmiany "opcji dostepu" do pewnego obszaru pamieci. Mowa tu o grach mmo/online bo w single raczej takich rzeczy nie ma.

Ogolnie tutoriali itp. rzeczy jest sporo na google. Gotowego kodu nikt Ci nie da, trzeba wejsc w dokumentacje i tam uczyc sie wykorzystania danych funkcji.

Zazwyczaj latwiej jest operowac na pakietach, jesli nie chcesz sam analizowac ich to do wiekszosci gier znajdzie sie juz gotowce mowiace za co dany pakiet odpowiada. Rowniez daje to wieksze pole do dzialania niz same operacje na pamieci.

Calkiem przystepny tutorial na start. Sam kiedy z niego korzystalem.
http://www.rohitab.com/discuss/topic/35537-cc-reverse-engineering-tutorial-for-newbies/

Dzieki za link, przeczytalem i zachowam tez na pozniej. No coz, wiec mam jeszcze wiekszy problem. Pakiety odpadaja, a ja nadal nie moge poradzic sobie z tymi adresami. W grze (male mmo) pokazuje mi np 60, skanuje, zmieniam na np 70, skanuje i 0 wynikow, z tym mam wlasnie problem. Te wartosci mam pokazane w UI gry. Czy sa jakies sposoby zeby zdobyc do tego jakis staly adres albo cos? :/

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