Oszustnik

Jeżeli jesteś w miarę stałym i długotrwałym czytelnikiem tego blogu, być może pamiętasz wpis, w którym chwalę prostą gierkę online pod tytułem Wallsmash. W tamtym wpisie kłamię bezczelnie, że ugrawszy prawie pół miliona punktów odłożyłem gierkę na bok. Otóż nie, nie odłożyłem. Zamiast tego grałem w nią regularnie do całkiem niedawna, chociaż rodzina mi już zaczęła sugerować, żebym przestał bo się uzależniłem.

Jak się od-zależnić?

W moim przypadku działa jedna, sprawdzona metoda: zhackować grę tak, żeby przestała być atrakcyjna. Metoda zadziałała dla gry Number Match, stwierdziłem więc, że może zadziała też i tutaj.

Zacząłem od zajrzenia w kod źródłowy gry. Okazało się, że większość klamotów siedzi sobie w pliku bundle.804bae11.js, serwowanym bezpośrednio z domeny z grą. Niestety, kod JS w tym pliku jest wynikiem przepuszczenia przez jakiś automacik, który unieczytelnił go kompletnie (losowe nazwy zmiennych i funkcji, żadnego łamania linii itd. itp.) Na szczęście udało mi się znaleźć repozytorium GitHub z kodem oryginalnej gry, dzięki któremu po krótkiej analizie ustaliłem, że najprościej będzie podciągnąć nieco liczbę pojawiających się na planszy bonusów.

Ściągnąłem więc plik bundle.804bae11.js na lokalny komputer, poczyniłem niezbędne zmiany...

function a() {
  yt.forEach(function (t) {
    t[0]++;
  }),
    wt.forEach(function (t) {
      t[0]++;
    });
  for (var t = 0.5, e = 0.8, n = 0; n < bt; n++)
    Math.random() <= t
      ? yt.push([0, n, ut])
      : Math.random() <= e &&
        (5 == ut
          ? wt.add([0, n, "laser"])
          : ut > 5 && ut < 15 && Math.random() > 0.5
          ? wt.add([0, n, "laser"])
          : ut > 15 && Math.random() > 0.85
          ? wt.add([0, n, "laser"])
          : wt.add([0, n, "ball"]));
}

(zmiany w liniach podświetlonych, czyli 8, 14, 16)

... a następnie zawiesiłem się nieco, bo okazało się, że nie mam pojęcia jak "w locie" podmienić oryginalny plik JS na taki serwowany z lokalnej maszyny. Na szczęście nie ja pierwszy miałem tę zagwozdkę i po chwili guglania okazało się, że firefoksowa wtyczka Requestly pozwala na takie podmianki - i to w sposób całkiem "przezroczysty" dla serwera. Pojawił się jednak nowy kłopot - mianowicie przekierowanie z jednego pliku JS na drugi za pomocą Requestly jest możliwe wyłącznie jeżeli nowy plik pochodzi z jakiegoś serwera www - nie da się bezpośrednio podpiąć lokalnego systemu plików.

Aby postawić lokalny serwer www, Google doradziło mi zainstalowanie... Node.js. Nie mam pojęcia co to za zwierz, chyba dość pokaźny, bo instalacja chwilę trwała - ale w końcu się udało. Potem jeszcze npm install http-server i uruchomienie polecenia http-server w folderze z plikiem bundle.804bae11.js. Szybkie sprawdzenie czy http://127.0.0.1:8080 serwuje ów plik - i na koniec podmianka w Requestly:

Przeładowałem stronę z gierką i - ku swemu zdumieniu - stwierdziłem, że trick zadziałał i od teraz w każdej nowej linii na górze planszy pokazuje się mnóstwo bonusów.

Na koniec włączyłem gierkę na pełnym ekranie i kazałem ściągniętemu ze sklepu Microsoftu autoclickerowi klikać w planszę na dole tuż przy krawędzi (w celu osiągniecia lepszego kąta). Od tej pory gra grała się całkiem sama z siebie, bez mojego udziału.

Pogapiwszy się na taki "wygaszacz ekranu" przez paręnaście minut stwierdziłem, że gra jest nudna i wywaliłem ją z zakładek 🙂

2 komentarze

  1. Heh, jak w każdej grze w której użyjesz kodów/hacków/cheatów. Czasem podniesie satysfakcję z rozgrywki, częściej pozbawi zabawy wogle.
    Albo wyleczy z nałogu ¯\_(ツ)_/¯

Leave a Comment

Komentarze mile widziane.

Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]