Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz
  • 0

Adresy pamięci w grach


ankieteradrian

Pytanie

Opublikowano

Witam. 2k17 a ja tu napiszę temat o Tibii xD
Chcę napisać bota do OTClienta w autoit. Taki nowy client Tibii.
To będzie pierwszy program inny niż konsolowy, dlatego chcę poćwiczyć na czymś gdzie kiedyś grałem i przy okazji pobawić się autoit, które też pierwszy raz używam. Tylko nie mogę odnieść się do adresów z gry ;/
Za pomocą Cheat Engine wyszukuje adresy, ale coś jest chyba nie tak, bo skanuje daną ilość hp, po czym zmniejszam wartość i znów przeprowadzam skan i już nowej wartości nie znajduje ;/
W jaki sposób zdobyć/odszukać adressy hp/many, by były na pewno poprawne.
Coś czytałem, że na starym cliencie adresy były stałe, a na tym nowym się zmieniają, ale nawet jeśli są zmienne, to chyba powinienem je odszukać (chociaż na jakiś czas) za pomocą tego programu?
Mógłby mi ktoś rozjaśnić sprawę i ewentualnie zasugerować jakby się do tych adresów dostać?

Czytałem też coś, że trzeba odjąć(czy dodać) jakiś adres bazowy, żeby wyszedł realny adres. Nie bardzo rozumiem.
Na forach tibijskich nikt mi nie pomógł.

13 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

Opublikowano

Trochę ciężko mi to zrozumieć jako, że jestem amatorem xD

https://www.youtube.com/watch?v=6Tdt3qjOWQA - Obsługi CE i szukania adresów uczyłem się korzystając z tego filmiku.

Czyli co, mam znaleźć jakąś wartość np. 2000 (powiedzmy, że tyle mam HP w grze) i wejść w memory view i znów znaleźć te wartość i poszukać jakiegoś bliskiego napisu za/przed?

Następnie skanować ten string w ce. i jeśli dostanę 1 adres(a co jeśli więcej?) odjąć 4 bajty, albo dodać 4 bajty(lub wielokrotność, jeśli napis nie był linijkę pod/nad?)?

 

@Edit

Aha i jak odczytałeś taki adres: 0x61FF1C ? Skąd te 1C na końcu?

 

Nie musi to być napis, to był tylko przykład żeby to w sposób jak najbardziej jasny przedstawić bo łatwo widać string w memory dump'ie.

 

Ogólnie możesz szukać czego chcesz czego wartość łatwo znaleźć po czym znając konstrukcje pamięci obliczyć adres każdej innej zmiennej której potrzebujesz. Na tym screenie widać w jaki sposób zmienne są ułożone w pamięci logicznej, zaakcentowałem to strzałkami i kolorami :)

Opublikowano

Hmm...tylko Ty bierzesz z creature.h. Ja chcę dane playera, więc szukam w localplayer.h

https://github.com/edubart/otclient/blob/master/src/client/localplayer.h

I tu mamy zmienną:

double m_health;

więc typu double. 

A co do mojego szukania - szukam w typach double i w typach "all" z powodu aktu desperacji xD

 

@Edit

Aha - teraz jestem na takim etapie, że znajduje mi te wartości, ale nadal adresy nie są na zielono(czyli nie są to adresy, których szukam, tylko prawdopodobnie wskaźniki) i nie mogę się dokopać do tego odpowiedniego..

Opublikowano

Hmm...tylko Ty bierzesz z creature.h. Ja chcę dane playera, więc szukam w localplayer.h

https://github.com/edubart/otclient/blob/master/src/client/localplayer.h

I tu mamy zmienną:

double m_health;

więc typu double. 

A co do mojego szukania - szukam w typach double i w typach "all" z powodu aktu desperacji xD

 

localplayer dziedziczy z Player a Player dziedziczy Creature więc tamte zmienne też będziesz miał w tej strukturze.

 

Próbuj poszukać po jakiejś prostrzej zmiennej, mi też kiedyś szukanie po zmiennoprzecinkowych w cheatengine sprawiało problemy.

Opublikowano

Trochę ciężko mi to zrozumieć jako, że jestem amatorem xD

https://www.youtube.com/watch?v=6Tdt3qjOWQA - Obsługi CE i szukania adresów uczyłem się korzystając z tego filmiku.

Czyli co, mam znaleźć jakąś wartość np. 2000 (powiedzmy, że tyle mam HP w grze) i wejść w memory view i znów znaleźć te wartość i poszukać jakiegoś bliskiego napisu za/przed?

Następnie skanować ten string w ce. i jeśli dostanę 1 adres(a co jeśli więcej?) odjąć 4 bajty, albo dodać 4 bajty(lub wielokrotność, jeśli napis nie był linijkę pod/nad?)?

 

@Edit

Aha i jak odczytałeś taki adres: 0x61FF1C ? Skąd te 1C na końcu?

Opublikowano

Zależy mi tylko na zmiennych takich jak HP i Mana - w przyszłości może jeszcze będę chciał adres na nick postaci na którą jestem zalogowany.

 

Czyli z tego co mówisz mam jednak szukać tych zmiennych typu unit8, a nie double?

 

Prostszej zmiennej - czyli masz na myśli żeby poszukać adresu do czegoś innego niż hp/mana? Mnie tylko to interesuje.

 

Jak znajdziesz jakąkolwiek zmienną w stukturze to obok w pamięci będziesz miał reszte tych zmiennych więc przykładowo znajdując adres m_level i potem odejmując 0x28 czyli 40 będziesz miał adres m_health itd.

 

 

EDIT:

LeXNUBL.png

 

Załóżmy, że szukam 'float d' a nie moge z jakichś powodów wyszukać go bezpośrednio w cheatengine. Wiem, że za tym floatem jest sobie jakaś tablica która akurat w tym przypadku ma "end" w sobie.

Szukam string "end" w ce. i dostaje adres 0x61FF2C. To wiedząc, że float ma 4 bajty odejmuje je od adresu 0x61FF2C bo wiem że ta zmienna której szukam jest wcześniej w pamięci. I dostaje 0x61FF28 czyli to czego potrzebowałem.

Opublikowano

Zależy mi tylko na zmiennych takich jak HP i Mana - w przyszłości może jeszcze będę chciał adres na nick postaci na którą jestem zalogowany.

 

Czyli z tego co mówisz mam jednak szukać tych zmiennych typu unit8, a nie double?

 

Prostszej zmiennej - czyli masz na myśli żeby poszukać adresu do czegoś innego niż hp/mana? Mnie tylko to interesuje.

Opublikowano

Jezu...

 

Póki nie znajdziesz adresu to nie będziesz w stanie znaleźć offsetu.

Szukając adresu możliwe że szukasz po prostu złej wartości.

Opublikowano

Czyli mam zacząć od tego, żeby znaleźć coś co ma statyczny adres?

Nie mogę nic takiego znaleźć ;/

 

Najłatwiej jest chyba znaleźć HP/Mane, bo mogę zmieniać wartość co chwilę przez co wykluczać błędne adresy. T_T Nie wiem jak się za to zabrać z sensem :(

 

Miałbyś może ochotę i czas, żeby samemu sprawdzić czy dasz radę wyszukać adres HP albo Many w tej grze? Jeśli by Ci się powiodło to mógłbyś mi wytłumaczyć konkretnie na tym przykładzie jak do tego doszedłeś?

Czy nie ma to sensu, bo adresy są zmienne i u Cb będą inne niż u mnie i nie bardzo będziesz miał jak mi to wytłumaczyć?

Bardzo byłbym wdzięczny za taką pomoc, bo tak byłoby chyba najprościej dla Ciebie (bo pracujesz na czymś konkretnym i nie musiałbym teoretyzować) i dla mnie.

 

(Folder z grą oraz passy do postaci podesłałbym na pw)

 

Nie nie mylisz pojęcia tu nie chodzi mi o pointery tylko o zwykłe zmienne w pamięci.

 

Jak podeślesz mi na pw to co potrzebne to do tego siądę i spróbuje wytłumaczyć.

Opublikowano

Czyli mam zacząć od tego, żeby znaleźć coś co ma statyczny adres?

Nie mogę nic takiego znaleźć ;/

 

Najłatwiej jest chyba znaleźć HP/Mane, bo mogę zmieniać wartość co chwilę przez co wykluczać błędne adresy. T_T Nie wiem jak się za to zabrać z sensem :(

 

Miałbyś może ochotę i czas, żeby samemu sprawdzić czy dasz radę wyszukać adres HP albo Many w tej grze? Jeśli by Ci się powiodło to mógłbyś mi wytłumaczyć konkretnie na tym przykładzie jak do tego doszedłeś?

Czy nie ma to sensu, bo adresy są zmienne i u Cb będą inne niż u mnie i nie bardzo będziesz miał jak mi to wytłumaczyć?

Bardzo byłbym wdzięczny za taką pomoc, bo tak byłoby chyba najprościej dla Ciebie (bo pracujesz na czymś konkretnym i nie musiałbym teoretyzować) i dla mnie.

 

(Folder z grą oraz passy do postaci podesłałbym na pw)

Opublikowano

Dowiedziałem się jeszcze, że można próbować dostać się do ospowiedniego adresu idąc po wskaźnikach, ale tu też finalny adres jest niepoprawny.

Dowiedziałem się też, że mógłbym od razu szukać adresu/wskaźnika np. na adres double m_health, ale tu też finalny adres jest błędny.

Chyba, że coś źle robię.

Proszę bardzo o jakieś sugestie, wskazówki, rozwiązania problemu.

Opublikowano

Za pomocą Cheat Engine wyszukuje adresy, ale coś jest chyba nie tak, bo skanuje daną ilość hp, po czym zmniejszam wartość i znów przeprowadzam skan i już nowej wartości nie znajduje ;/

W jaki sposób zdobyć/odszukać adressy hp/many, by były na pewno poprawne.

 

Zgaduje, że tak się dzieje ponieważ skanujesz/szukasz hp jako zmienną typu uint/int czyli 4 bajtową. Kiedy w kliencie hp jest typu uint8 czyli 1bajtową zmienną.

 

4X1iY6s.png

 

https://github.com/edubart/otclient/blob/master/src/client/creature.h

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...