CheatEngine a tablice...

0

nie byłem pewny czy ten temat się nadaje na inne subforum więc wylądował tutaj...Mimo że ciekawi mnie to głównie z pobudek programistycznych

no więc ostatnio z kolegami nie mieliśmy co robić i postanowiliśmy sobie we 4 zagrać w Mass Effect 3 na multi (wiem, wiem. Jesteśmy zdesperowani). Jak ktoś grał w tę grę to wie że na multi rzeczy zdobywało się randomowo otwierając skrzynki (jak w CSie). Z takiej skrzynki może ci również wypaść ulepszenie broni (jest 10 poziomów każdej broni). No ale jak to u EA bywa - potrzebowałbyś albo wydać na tę grę fortunę (z 10000000000000000 dolarów) albo zmarnować całe życie zbierając kredyty w grze aby odblokować cokolwiek na 10 poziomie (szansa na wypadnięcie broni jest super mała). No więc użyłem CheatEngine'a i zhackowałem sobie bazylion kredytów. Ale nawet wtedy szansa na wypadnięcie broni (zwłaszcza tych rzadkich) jest taka mała że na samo otwieranie skrzynek musiałbyś zmarnować lata żeby wszystkie bronie do 10 ulepszyć. I wtedy wpadł mi do głowy pomysł...

Zastanowiłem się jak ci programiści rozwiązali problem przechowywania danych o poziomie broni. Pewnie trzymają je w jakiejś tabeli, gdzie każdy indeks odpowiada innej broni a wartość pod indeksem odpowiada poziomowi (no przynajmniej ja bym to tak zrobił). Zatem, jeżeli odnajdę adres w pamięci gdzie przechowywane są dane o jednej broni, dane o innych powinny znajdować się tuż pod i nad tym adresem. Wtedy mógłbym wszystkie bronie ulepszyć za jednym zamachem.

Znalazłem adres jednej z broni i ulepszyłem ją na poziom 10(działa, sprawdzałem). Znam jej adres w pamięci: 16441CC8. CheatEngine podpowiada mi, że zmienna przechowywana pod tym adresem ma rozmiar 4 bajtów, zatem zakładam że pozostałe mają taki sam rozmiar. Wobec tego powinienem znalezć zmienne o wartości 1-10 pod adresami 16441CC4 i 16441CCC. Skanuję okolicę i... oto wyniki
16441CC4 wartość 0
16441CCC wartość 240
pobliskie wyniki również zdają się nie mieć sensu.

Nie chodzi tu już nawet o te głupie bronie.Jako informatyka nurtuję mnie to, bo oznacza że coś mi umknęło. Jak myślicie, o co chodzi ?

0

Broń jest pewnie obiektem i gdzieś tam występuje tablica obiektów, a nie czystych danych.

0

Nie grałem nigdy w "Mass Effect 3 na multi" domyślam się, że "multi" oznacza multiplayer z centralnym serwerem? jeśli tak prawdopodobnie serwer trzyma informacje o statystykach broni/sprzętu ty jedynie możesz oszukać tylko wizualne efekty np. założona zbtroja/broń, ale tak naprawdę statystyki będą identyczne z faktycznie założonymi i po ponownym zalogowaniu są stare staty.
Pomijając tą oczywistość, tak jak @Patryk27 wspomniał nie musi to być tablica rekordów tylko tablica referencji na obiekty albo tablica wskaźników na rekordy i wtedy same dane mogą być rozrzucone po stercie jak (mówiąc kolokwialnie) rodzynki w gównie. Możesz przeszukać pamięć pod kątem właściwej tablicy pointerów. Mając już 1 rekord/obiekt poszukaj jego początku i wyszukaj pointerów, które wskazują na ten adres pewnie będzie kilka/kilkanaście takich miejsc będą to albo kopie wskaźnika (pojedyncze zmienne) na ten rekord albo faktyczna tablica - jak to sprawdzić? Wystarczy z pod takiego adresu pobrać nast./poprzedni wskaźnik i się do niego udać w celu sprawdzenia czy jest to kolejny element zbroi czy coś randomowego.
Taka okoliczność jest chyba nawet rozpatrzona w tutorialu do CE więc zacznij od niego.

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