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.
![Ratchet&Clank 3 - historia łatania dziury przez programistów](/_next/image?url=https%3A%2F%2Focs-pl.oktawave.com%2Fv1%2FAUTH_2887234e-384a-4873-8bc5-405211db13a2%2Fspidersweb%2F2016%2F12%2Fmaxresdefault-300x240.jpg&w=1200&q=75)
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](http://vignette3.wikia.nocookie.net/ratchet/images/1/1a/Up_Your_Arsenal_NA_cover.png/revision/latest/scale-to-width-down/300?cb=20160915231044)
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:
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.
![](http://vignette2.wikia.nocookie.net/ratchet/images/5/50/Ratchet2.jpg/revision/latest?cb=20060222170808)
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.