Jak załatano Ratchet & Clank 3, czyli brudne sztuczki programistów gier

Artykuł/Gry 02.12.2016
Jak załatano Ratchet & Clank 3, czyli brudne sztuczki programistów gier

W czasie niedawnej wyprzedaży na PS Store kupiłem zestaw gier, które pamiętam z PlayStation 2. Była to antologia serii Ratchet & Clank.

Chcąc przypomnieć sobie więcej na ich temat, znalazłem całą wiki poświęconą grom o tych bohaterach i natrafiłem na interesującą informację na temat sposobu, w jaki twórcy (Insomniac Games) naprawili niedziałającą edycję gry Ratchet & Clank: Up Your Arsenal (czyli trzecią z kolei w serii).

Gra wyposażona była w funkcje online – gracze mogli współzawodniczyć ze sobą przez Internet (więcej o graniu przez Internet na PS2 pisałem w zeszłym roku). Gry w tamtych czasach często nie miały funkcji aplikowania łatek (mówiąc brzydko, patchowania). Gdy zachodziła taka potrzeba, w grach na PC ściągało się osobny plik .exe i uruchamiało,  najczęściej wskazując na katalog instalacji gry. Konsole nie posiadały tej całej infrastruktury Playstation Store czy Xbox Live, która służy do aktualizacji i ściągania gier.

Gra, która została wysłana do sklepów, również nie miała wbudowanej funkcji aktualizacji.

NA

Gdy przyszła potrzeba zaaplikowania patcha do gry, Insomniac Games musieli znaleźć metodę zrobienia tego bez (co wtedy stosowano) rozsyłania do sklepów płyty z patchem. Zaczęli więc szukać luki we własnym kodzie, o czym opowiedział po latach programista firmy w wypowiedzi dla Game Developer Magazine:

Gra pobierała z serwera licencję  użytkownika (EULA) po uruchomieniu. Zauważyliśmy, że nie zaimplementowaliśmy sprawdzania jego długości – była więc szansa na buffer overflow.

Buffer overflow, czyli przepełnienie bufora, to często wykorzystywana przez hackerów technika nadpisywania regionów w pamięci, których normalnie nie powinniśmy nadpisać.

Jonathan Garrett i jego ekipa nadpisali w ten sposób adres funkcji, która miała stały adres, powodując, że wykonała ona polecenie ściągnięcia aktualizacji gry.

Jednym z wyzwań była konieczność napisania kodu dekodującego, ponieważ funkcja pobierająca EULA zatrzymywała się przy wykryciu bajtu o wartości 0 – co często trafiało się w kodzie. W związku z tym najpierw wysłano funkcję dekodującą (napisaną specjalnie tak, aby kod 0 w niej nie wystąpił), która następnie dekodowała dalszy ciąg przesłanego patcha i uruchamiała go.

Akcja przeprowadzona została z powodzeniem – udało się dodać łatkę wszystkim graczom sieciowym. Od tego czasu każda gra posiada już funkcje aktualizacji, a buffer overflow jest bardzo rzadkim przypadkiem – standardowo sprawdza się w kodzie gier i programów tego typu błędy w trakcie tzw. analizy statycznej kodu. Przypadek Ratcher & Clank 3 jest przykładem partyzanckiej i sprytnej metody aktualizacji, której nie przewidzieli nawet sami  twórcy gry.

*Wykorzystałem informacje znalezione w serwisie dla producentów gier GamaSutra oraz w starych numerach Game Developer Magazine.

Dołącz do dyskusji

  • zakius

    ta łatka nadpisywała pamięć przy każdym uruchomieniu, czy znaleźli sposób na zachowanie jej?

  • http://twitter.com/htaler Hubert Taler

    W przypadku analogicznej sytuacji (update z sieci) dla Star Wars Battlefront 2 nowy kod składowany był na karcie pamięci. Być może w tym przypadku też tak było.

  • zakius

    czyli pobieranie EULA, sprawdzenie czy łatka już jest, jeśli tak doczytanie z karty, a jeśli nie to z sieci
    no ciekawa sprawa

  • http://twitter.com/htaler Hubert Taler

    Więcej szczegółów programista nie podał, możemy się tylko domyślać. Nie znam architektury bootloadera PS2, być może np. pliki z karty miały w ogóle większy priorytet.

  • zakius

    nadal musieli JAKOŚ uruchomić funkcję nadpisującą ram zawartością karty
    chyba że mieli podobny błąd w module sprawdzającym zawartość karty i dlatego dało się od razu z niej

  • Dima Noizinfected

    artykul zapowiadal sie ciekawie, ale sekurak to to raczej nie jest

  • Gość

    Skoro ps2 dało się przerobić poprzez „aplikacje” uruchamianą z karty pamieci to sądzę, że nie było większego problemu dla twórców aby po załadowaniu gry odpalić łatkę z karty.

  • zakius

    ale oryginalna gra nie miała kodu do wczytywania łatek

MAŁO? CZYTAJ KOLEJNY WPIS...

MAŁO? CZYTAJ KOLEJNY WPIS...

Advertisement