warcraft 3 TFT + ROC, warcraft III,

Replaysowa strzałka Polskie Centrum Replayów - top
Replay Tygodnia / Best Replay
Nie ma żadnych replayów spełniających te wymogi.

No 1 hax my server! Warden, PunkBuster, Valve Anti-Cheat vs hakerzy.

Tematem tego artykułu są systemy chroniące gry przed czitami. W ogromnej większości jest to po prostu tłumaczenie angielskojęzycznych tekstów, których źródła umieściłem na końcu. Jeśli ktoś jest zainteresowany wyłącznie techniczną stroną działania tych systemów, to wiele się tu nie dowie – zdecydowałem skupić się na omówieniu najciekawszych dla zwykłego użytkownika funkcji, oraz przedstawieniu ich znaczenia dla działania systemu i prywatności danych.
 
Wardenka jest znana większości graczy Warcraft III nie jako system zabezpieczeń, lecz postać nieustępliwej strażniczki. Sam system, według informacji z wikipedii, jest użyty w grach Diablo 2 1.11, Starcraft 1.15 i oczywiście nowszych, jak Wacraft III i World of Warcraft. Nazwa jest prawdopodobnie wewnętrznym żartem pracowników firmy Blizzard. Rzeczywiście, pasuje jak ulał – główną siłą systemu jest jego zdolność do automatycznej aktualizacji. Moduły zawierające kod są ściągane w tle i uruchamiane. Atakujący system haker ma więc ciężki orzech do zgryzienia. Moduł może zażądać od komputera gracza dowolnej rzeczy do wykonania i/lub odesłania. Jedynym ograniczeniem możliwości jest prawo. Otwiera to ogromne pole do nadużyć, ale także ochrony. Można niektóre moduły wysyłać tylko bardziej „podejrzanym” osobom (np. takim, które były raportowane jako cziterzy), korzystać ze statystycznych metod (moduły heurystyczne, banowanie z opóźnieniem), rozsyłać je według specjalnych kluczy (np. tylko do określonego regionu geograficznego – minimalizacja potencjalnej klienteli dla hakera, który obszedł system w jednym kraju). Same moduły w dowolnym momencie mogą zostać zmienione, więc obejście jakiejś konkretnej wersji Wardenki musi być znacznie bardziej ogólne, niż typowy czit, jeśli ma działać na większej ilości komputerów.
 
Powstanie takich systemów stało się konieczne wraz ze zwiększającą się popularnością gier online i rozwojem e-sportu. Gracze zazwyczaj chcą znać reguły przed przystąpieniem do rozgrywki. Skad więc się bierze zjawisko hakowania? Są, według mnie, dwie motywacje.

Pierwszą podsumowuje najlepiej klasyczny „Manifest Hakera” – ciekawość, chęć rywalizacji i bycia lepszym, zabijanie czasu. Wbrew pozorom, pokonanie takiego systemu to nie jest nic wymagającego niezwykłej wiedzy. Co jest potrzebne? Trochę wiedzy i mnóstwo czasu. Jak powszechnie wiadomo, najwięcej go mają właśnie nastolatki grające w gry, czyli grupa najbardziej zorientowana w temacie. Takiemu podejściu sprzyja wiek, charakteryzujący się chęcią „walki z systemem”, przynależności do eliternej grupy hakerów magików. Ważnym przymiotem hakera staje się wiedza i reputacja, pojęta jako zdolność do wypuszczenia czita jako pierwszy. Ktoś korzystający z cudzej pracy zostaje nazwany pogardliwie leecherem (pijawką).
 
Drugą motywacją są oczywiście pieniądze. Jak dobry jest to biznes? Trudno powiedzieć. Dla dzieciaka z dużą ilością czasu może się okazać, że jest to całkiem dobre zajęcie na kieszonkowe i jednocześnie rozwijanie swojej pasji. Znane jest też zjawisko „farmowania” (tzw. grinding), obecne głównie w grach rpg, które może dostarczyć jakichś realnych dochodów z powodu wymiany wirtualnych pieniędzy lub przedmiotów na prawdziwe. W grach typu RTS jedyną możliwością zarobienia większych pieniędzy jest granie w turniejach online ze wspomagaczami. Typowy maphack jest dość tani (około 50$, według moich pobieżnych informacji). Podobno dischack został sprzedany za 800€, ale czas potrzebny do znalezienia odpowiedniego błędu i sposobu wykorzystania go prawdopodobnie stawia zarobek/godzinę w jednym rzędzie z MH.
Jak więc ludzie zarabiają na czitach do RTSów? To już jest proste i każdy się może o tym przekonać – hack sites, czyli stronki z czitami. Można się zapisać na płatne członkostwo i dzięki temu uzyskać dostęp do wersji prywatnych czitów, które z samej natury bycia prywatnymi są nieco rzadziej wykrywane. Nie jest to aż tak cudowny biznes, jak się może wydawać, bo jak wiadomo, każdy może być „zhakowany”, w tym producenci. Co jakiś czas występuje wyciek i prywatny czit robi się publiczny, zmniejszając opłacalność całego procederu. Trzeba też pamiętać o tym, że duży producent zawsze będzie mógł poświęcić 50$ na popularniejszy czit.
 
W całej tej zabawie w kotka i myszkę są jeszcze dwie niewiadome: pierwsza to zaufanie do hakera (Czy to działa czy nie? Stracisz cdkey? Na pewno jest obecnie niewykrywany?), a druga to twój zdrowy rozsądek. Przykład: http://www.wc3tools.com/hacks.php jak bardzo można zaufać tej stronie? Nie bardzo. Po pierwsze tutejszy mh to najpopularniejsza wersja publiczna, a więc na pewno wykrywana. Dla niepoznaki są linki do znanych programów 3rd party.
Drugi przykład to strony znanych programów. Często jest tam udowadniane w śmiesznych wywodach, jak i dlaczego ten konkretny program jest zgodny z EULA (umową z końcowym użytkownikiem). W konsekwencji ma to zapewnić poczucie bezpieczeństwa – skoro jest zgodny z EULA to nie będzie za to bana. Nie jest to jednak prawda. Są znane przykłady banów za kompletnie przypadkowe programy. Blizzard interpretuje umowę w bardzo dowolny sposób.
 
WoWGlider (a może MMOGlider?) okazał się niezgodny z EULA a także DMCA (prawo antypirackie w Stanach Zjednoczonych) według prawników Blizzarda. Powód jest prozaiczny, producent Glidera zarobił około miliona dolarów na sprzedaży (minus koszty produkcji oczywiście). Zaglądając do treści pozwów można zauważyć kilka ciekawych rzeczy. Interpretacja jest wyjątkowo naciągana, chociaż logiczna, co może budzić sprzeciw. Teoretycznie prawo stanowi rząd, ale duże znaczenie mają też pieniądze poświęcone na prawników, którzy je analizują. Ta firma z pewnością ma duże możliwości i z nich skorzystała, pomijając moralny aspekt tej sprawy (Czy uzyskanie korzystnej dla Blizzarda interpretacji jest ogólnie korzystne? Kto po nich skorzysta z tego, i przeciwko komu?). Stoi to w lekkiej sprzeczności z obrazem firmy Blizzard wśród graczy, którzy w większości uważają, że nie ponosi ona porażek. Poza patchem 1.22. I jeszcze zabiciem Freecrafta. I BNetD. W każdym razie dobrze wiedzieć, że trzeba zarobić około 1mln$, żeby się tobą zainteresowali. W dokumentach pozwu są też wyszczególnione sposoby ochrony bota przed wykryciem i kwiatki typu:

 
Ile Blizzard kosztuje produkcja tego systemu? Prawdopodobnie tyle samo co jego obchodzenie. Skoro jedna metoda kosztowała 18000$, to można przypuszczać, że cały system jest wart 0.5-1mln $. Oczywiście wersja WoW jest jedną z najbardziej zaawansowanych w porównaniu z grami typu Warcraft III, w których się to po prostu mniej opłaca. Oprócz samego systemu, trzeba doliczyć obsługę kont, wsparcie (500000 skarg na same boty!), game masterów itd.
Wbrew powszechnej opinii „Blizzard does nothing” lecą tutaj całkiem spore sumy. Trzeba przyznać rację stwierdzeniom z pozwu – rzeczywiście botting i ogólnie hacking obniża wartość gry dla potencjalnych klientów, oraz zmusza do zużywania znacznych ilości zasobów finansowych na coś bliżej nieokreślonego :)

Reakcja na pozew wśród hakerów niezbyt przyjazna. Czy naprawdę Blizzard nie dał rady i dlatego powstał pozew? Czy Warden jest tak słaby? Spróbujmy określić. Co to w ogóle jest? Jak taki system działa i jakie stoją przed nim wyzwania?
 
Najprostszym porównaniem, odnoszącym się do znanych pojęć, jest tutaj wirus i program antywirusowy. Wyobraźmy sobie wirusa, który ma funkcję wspomagania w grze, zamiast tradycyjnego „rozmnażania” i sprawa rozwiązana. Można przyjąć, że rozprzestrzenianie występuje automatycznie, ale nie przez tradycyjne samokopiowanie, lecz przez dokonanie zmiany w świecie gry. Ludzie, którzy używają czitów (trzeba tu odróżnić typowe pojęcie haker od zwykłego użytkownika), czerpią z tego albo korzyści finansowe (boty, turnieje online), albo po prostu przyjemność. Ponieważ jest to widoczne dla innych, stają się oni zachęceni przez przykład i „kopiują” czity, przez zwiększenie zapotrzebowania, żądanie ich dalszego powstawania.
 
Różnice są nie tylko zewnętrzne. Aby ukryć się w systemie, czit musi korzystać z identycznych technik jak rootkity, czyli dzisiejsze „wirusy”. Antyhack podobnie jak antywirus blokuje „wejścia” do systemu lub sprawdza ich poprawność, legalność. Niestety, dla obu stron, nikt nie ma tu wyraźnej przewagi. PC jest platformą otwartą, ma w sobie elementy pozwalające na pełną kontrolę każdego komponentu. Jest tylko kwestia złożoności programu – antyhack nie może zużywać więcej zasobów niż gra, a jednocześnie nie może generować fałszywych zgłoszeń (podobnie jak antywirus). Czit w pełni obchodzący każdy możliwy element zabezpieczenia to taka ilość pracy, że nie będzie darmowy, a w momencie upublicznienia (lub nawet przypadkowego wykrycia nową metodą), konieczne staje się wykonanie jakiejś jego części od nowa.

W pozwie w sprawie Glidera, Blizzard stwierdza, że zablokowano skutecznie prawie wszystkie nieautoryzowane programy 3rd party, oprócz tego jednego. Czy naprawdę?

Raczej nie! Opisuje to chwilowy stan, który w dowolnym momencie może ulec zmianie. Pozew występuje nie z powodu słabości systemu, lecz z prostego rachunku ekonomicznego – taniej jest uderzyć prawnikami w ten zebrany 1mln$, pogrążyć obecny, drogi kod „ukrywacza” Glidera i zmusić cziterów do wydania na niego pieniędzy ponownie. Chwyt poniżej pasa? Raczej nie, bardziej: oko za oko. Z powodów ekonomicznych Blizzarda obchodzą tylko publiczne czity i szeroko sprzedawane, bo tylko takie mają wpływ na ogólne wrażenie klienta i w konsekwencji straty firmy.
 
Jakie są główne metody, z których może korzystać hack i antyhack?
Najprostszą, bo najbardziej standardową warstwą, do której mają dostęp programy, jest zawsze jakieś API (interfejs dla programisty aplikacji). Dla systemów Windows jest to oczywiście Windows API. Mamy tutaj setki, a może nawet tysiące funkcji, z których tylko kilkadziesiąt jest interesujących dla potencjalnego hakera. Są to oczywiście te funkcje, które manipulują pamięcią i uruchomionymi procesami. Twórcy botów mogą być zainteresowani także przesyłaniem wirtualnych wciśnięć klawiszy, tak jak robi to popularny program w3hph – przed patchem 1.22 używany często do „trzymania” klawiszy. Jak śmiesznie to brzmi, kiedy ludzie wypisują, że nie da się go wykryć, podczas gdy tysiące botów jest banowanych cały czas w WoW. Po prostu boty W3 nie są wystarczająco zaawansowane, ani uważane za problem, żeby ktoś był za coś takiego w tej grze banowany. Jest tylko kilka niesprzętowych (bez klepania w klawiaturę) dróg do „wciśnięcia” klawiszy i są one bardzo dobrze znane wszystkim zainteresowanym.
Wracając do metod używanych w czitach – skoro API jest standardowe, to można po prostu je monitorować, i już mamy antyhack wykrywający w 100% bez fałszywych pozytywów. Niezbyt dobrze, ale przecież wiadomo, że API to tylko napisane przez kogoś funkcje, więc może da się wykonać to samo bez nich? Co jest pod spodem? DOS? Windows 3.11? Czysty sprzęt? Jak to zgrać, żeby się wszystko nie pozawieszało? Pod spodem jest Windows Native API. To jest taka wersja API, która jest niezbyt udokumentowana, używana wewnętrznie przez system operacyjny, zanim jeszcze załadowane są wszystkie funkcje zwykłego API, a później cały czas jest tuż pod nimi. Modyfikując Native API, zmienia się pośrednio także zwykłe, pozbawiając skaner możliwości wykrycia w wyższej warstwie systemu operacyjnego. Oczywiście Native API jest mniej liczne, ale nadal dość proste w użyciu. Różni się znacznie w wersjach systemu, czasem nawet pojedyncza łatka może coś tutaj zmienić. Program z tego korzystający nie będzie więc w pełni kompatybilny, a może nawet stabilny. Wkraczamy tutaj na terytorium, do którego nie zaglądają zwykłe programy. Właściwie tylko sterowniki, wirusy/av i hacki/antyhacki.

Tutaj po raz pierwszy firmy robiące gry zaczynają się denerwować. Jeśli na pudełku napisali, że gra działa na Windows XP/Vista, to ma tak być, nie może wystąpić sytuacja, że jakaś rzecz korzysta z Native API i nagle z jakimś patchem nie działa. Zaczyna się robić drogo, bo trzeba pisać jakby na kilkadziesiąt systemów, zamiast na jeden/dwa.
Na szczęście dla obu stron, interesujące są tylko niektóre funkcje, więc „da się to zrobić”.
 
Co jest dalej? Jeśli chcemy, żeby nasz program działał i operował na programach w systemie Windows, to można zejść niżej, czyli do wewnętrznych struktur systemu i sterowników. Tutaj nie istnieje praktycznie publiczna oficjalna dokumentacja, poza szczątkami. Stabilność i kompatybilność takich rozwiązań jest niska (a może po prostu „droga”). Jednak nadal, „da się zrobić”, jak pokazuje przykład wirusa/trojana Rustock.C. Prawdopodobnie nie wykryty przez 1.5 roku! Mimo tego, że programy AV w tamtym czasie monitorowały już Native API i część wewnętrznych struktur jądra systemu operacyjnego. Przejście na ten poziom pozbawia możliwości prostej detekcji zmian przez skanery oparte na Native API i oczywiście na Windows API.

Czy to jest takie proste? Niestety nie (a może na szczęście?). Wykonanie kompletnego rootkita/niewykrywalnego czita to ogromna praca. Nawet Rustock obsługiwał tylko kilka wersji Windows. Tutaj lekką przewagę mają ukrywający się – wystarcza im obsługa najpopularniejszego, liczy się tylko maksymalny rynek, bo motywacja jest finansowa. Dla producenta gry liczy się też opinia, nie może porzucić wersji SP1 z zainstalowanym KB254334. Przede wszystkim nie może zabanować takich osób, których system znajdzie się w nieobsługiwanej grupie. Brak oficjalnej dokumentacji nie pomaga w jej wyznaczeniu.
 
 
Zeszliśmy już na sam dół, praktycznie nic więcej nie ma. Pominąłem jednak ważną rzecz. W systemie operacyjnym Windows działają dwa rodzaje programów: użytkownika i jądra, czasami określane jako działające w ring3 i ring0. Nazwy pochodzą od wyobrażenia procesora jako centrum dostępu, gdzie najbliższy okrąg (ring0) jest najbardziej uprzywilejowany. Procesory z rodziny x86 oferują kilka poziomów uprzywilejowania, a Windows korzysta tylko z 0 (pełen dostęp) i 3 (niektóre rzeczy niedozwolone). Ogromna większość programów nie wymaga pełnego dostępu, więc można je przenieść poza tryb jądra, zwiększając stabilność systemu. Jak duże ma to znaczenie? Bardzo duże:
Titanic '12 - Hindenburg '36 - Hiroshima '45 - Nagasaki '45 - Chernobyl '85 - Windows '95
Legendarna niestabilność Windows 95, wynikała między innymi z powodu nadmiernego uprzywilejowania programów działających w trybie użytkownika. Obecnie jest on znacznie bardziej restrykcyjny, ale nadal większość zawieszeń wynika z błędów sterowników. Im mniej programów działa w trybie jądra, tym lepiej dla stabilności (kosztem niewielkiej utraty wydajności). Wprawdzie nadal większość ludzi używa konta administratora, umożliwiając każdemu programowi instalację sterownika i korzystanie z pełnych możliwości sprzętu, ale nie oznacza to, że należy się na to godzić.

Z informacji w sieci wynika, że Wardenka działa w pełni w trybie użytkownika – to oznacza, że Blizzard jak do tej pory starał się uniknąć ułatwienia sobie pracy kosztem fałszywych banów i niestabilności, podczas gdy techniki ukrywania czitów już od dawna są oparte na sterownikach.
 
Jakie są „udokumentowane” sposoby działania systemu Warden? A co tam, prosto od producenta:
 

Są dwie główne grupy zdarzeń którym ma zapobiegać:
  1. Emulacja klienta (podstawienie kompletnego „bota” zamiast rzeczywistej gry)

Obejmuje to sprawdzenie autentyczności plików i różnych rzeczy w pamięci, których stan powinien pozwolić przypuszczać, że używany jest oryginał. Ominięcie tego sprawdzenia nastąpiło już kiedyś, po czym Battle.Net został przeciążony botami i Blizzard zaktualizował moduł.
  1. Czity  (np. maphack), w tym klasyczne boty jak w WoW/Diablo 2 – automatyzujące czynności.

Tutaj techniki są oparte głównie na sumach kontrolnych, czarnej liście programów i pojedynczych sztuczkach programistycznych - np. usunięcie sprzętowych pułapek (hardware breakpoints) w celu utrudnienia analizy i modyfikacji kodu. O sztuczkach nie będę dużo pisał, bo wymaga to znajomości programowania. Przede wszystkim rzuca się w oczy zachowawczość użytych technik, co ma prawdopodobnie zminimalizować fałszywe alarmy.
 
Wygląda więc na to, że można wykonać sprawdzanie sum kontrolnych pamięci w najważniejszych rejonach, i sprawa powinna być załatwiona: antyhack wygrywa. Jednak jest jeszcze jedna rzecz, która nie wpisuje się w żadną konkretną warstwę – ukrywanie zawartości pamięci. Jest to dość dobrze znana technika, wymaga użycia sterownika, który będzie podstawiał w momentach odczytu zawartości pamięci przez antyhack starą, niezmienioną zawartość. To jest do wykonania, ale tak jak wcześniej wymaga sterownika, który może być wykryty. Oczywiście można go ukryć, ale zawsze będzie to zabawa w kotka i myszkę, walka na konkretne z grubsza równoważne metody. Upublicznienie każdego hacka daje możliwość jego wykrycia i opracowania ogólnej metody „anty”. Można zrobić losową nazwę sterownika (jak wirusy, albo daemon-tools), ale zawsze powoduje to efekty uboczne, które dadzą się wykryć. Poprzeczka staje się w takim momencie ustawiona tak wysoko, że „domowy” haker miałby problem z opracowaniem czegoś do sprzedania, działającego na większej ilości systemów. Głównie z powodu kosztów pracy, ale także samego poziomu trudności (programowanie sterowników nie jest zbyt popularne). Dla gry takiej popularności jak Warcraft III chyba się to nie opłaca, dla WoW już tak. Lekka przewaga leży więc po stronie producenta hacków w przypadku prywatnych wersji, a duża przewaga po stronie producenta gry w przypadku wersji publicznych. Oczywiście zakładając, że ktoś zaimplementował wszystkie funkcje poprawnie, łącznie z ukrywaniem zawartości pamięci.
 
Jak widać, ogólny zarys działania systemu zajął bardzo dużo miejsca. Trochę przynudziłem, ale zrozumienie powyższego tekstu jest konieczne do dalszego omówienia. Czas na najciekawszą część, czyli porównanie z innymi systemami antyhackowymi, określenie stanu prywatności danych i dziur w samym systemie.
 
Oprócz Wardenki istnieją oczywiście inne systemy, chociaż wyprodukowane przez inne firmy, to działające na podobnych zasadach. Diametralne różnice występują dopiero w podejściu samych producentów.
 
PunkBuster – już sama nazwa brzmi dziwnie. Nie podejmę się całkowitego przetłumaczenia, ale zawsze wydawało mi się, że punk w takim kontekście jest najbliżej polskiego słowa „gnojek”. W każdym razie nie jest to nic dobrego i odpowiednio, cały marketing tego produktu jest dość agresywny. Zamiast skupić się na skuteczności i stabilności produktu, zdecydowano zaimplementować ogromną liczbę funkcji, których istnienie można tłumaczyć tylko chęcią przypodobania się bezmyślnym dzieciakom.
 
Zacznę od sprzętowych banów (hardware ban). Tutaj system Warden stosuje zasadę banowania konkretnego klucza produktu, pozbawiając czitującego gracza drobnej ilości pieniędzy i postaci/konta. Jest to niezły pomysł, ale nie działający sprawnie w przypadku, gdy klucze są bardzo tanie (np. Starcraft, Diablo 2). Punkbuster dla odmiany, podobnie jak warcraftowy DotaClient, wprowadza unikalny identyfikator sprzętu, który może zostać wykluczony z rozgrywek (zabanowany). Jeśli przeczytałeś i zrozumiałeś mój wywód powyżej na temat Windows API, to powinieneś się spodziewać, że łatwo można tą funkcjonalność obejść, kontrolując fragmenty API mogące zwracać charakterystyki sprzętu. Wbrew pozorom jest tego bardzo mało. Typowe jest używanie numeru seryjnego dysku twardego, listy urządzeń PCI, numeru seryjnego karty dźwiękowej, MAC sieciówki itp. DotaClient dodatkowo używa warcraftowego klucza produktu (cd key). Co jest takiego nędznego w tym zabezpieczeniu? To, że obchodzono je i EvenBalance (producent PB) zdecydował się na umieszczenie sterownika (chyba w najnowszej wersji działa już stabilnie, a może go wyłączyli?) w celu utrudnienia fałszowania tych informacji i oczywiście skanowania całej pamięci. Co jest jeszcze gorszego? To, że fałszując te informacje można zabanować kogoś innego. Śmieszne, ale możliwe.
 
Żeby zrozumieć jak może do tego dojść, trzeba wiedzieć, czym są sumy kontrolne (CRC) i/lub funkcje skrótu (hash). Obie te funkcje opierają się na przekształceniu matematycznym danych do skrótowej postaci. Przykładem hashowania może być dzielenie np. mamy dwie liczby i wynik dzielenia jest sumą kontrolną. Czyli: 2/2=1, 4/2=2, 6/2=3 itd.
CRC było pomyślane jako funkcja chroniąca przed błędami w transmisji (a nie celowymi zmianami), więc jest kompletnie nieodporna na kolizje. Co to jest kolizja? Przykład: 2/2=1, 4/4=1 6/6=1 – ten sam wynik sumy kontrolnej, a zupełnie inne wartości wejściowe. Podmiana wartości chronionych CRC na przechodzące dowolne sprawdzenie jest banalna. Dla funkcji hashujących jest to trudniejsze, bo zostały stworzone w celu zapobiegnięcia łatwego wykrycia kolizji. Nie jest to jednak niemożliwe, dawniej popularne md5 jest niemal złamane (kolizje znajduje się szybko, ale nie są one zbyt praktyczne, nadal jest dość ciężko zmienić zawartość chronioną sumą na sensowną np. na inny kod procesora).
Co ma piernik do wiatraka? Funkcja hashująca jest jednostronna, tzn. nie da się wykryć jakie konkretnie liczby/dane zostały do niej wprowadzone, a jednocześnie jest dość unikatowa (podobne dane dają znacznie różniące się hashe). Używa się jej więc do zapewnienia prywatności danych typu MAC i reszta, przesyła się tylko hash (tak jak się zazwyczaj trzyma hasła w bazach danych).
 
Znając funkcję hashującą i charakterystykę sprzętu „ofiary” można się pokusić o podmianę swojego MAC, sfałszowania listy urządzeń PCI i kogoś zabanować za niewinność. Trudne, ale wykonalne. Co gorsza, funkcje te posiadają kolizje z natury, czyli są one nie do uniknięcia. Może wystąpić przypadkowa zgodność. Są na to matematyczne dowody, ale wystarczy zdrowy rozsądek, żeby rozumieć, że funkcja tworząca z długiej liczby krótszą musi mieć część wyników, które się pokryją. Jeśli jest to wykonalne, to mamy kompresję bezstratną (a więc nie jest to funkcja hashująca jednostronna).
 
Następna sprawa: skanowana jest całą pamięć, nagłówki okien i lista procesów. O ile lista procesów jest nie do zmodyfikowania z zewnątrz, to pamięć i nagłówki okien już tak. Można przesłać przez komunikator ciągi znaków pokrywające się z wyszukiwanymi przez system PB, a nawet umieścić zawierający go obrazek na forum. I tak też bywało, jeśli chcesz znać całą historię poczytaj link do forum netcoders na dole artykułu. W przypadku Wardenki nie jest łatwo wyprodukować taki ciąg znaków, bo nie wiadomo dokładnie, czego ona poszukuje (hashuje region pamięci i porównuje z bazą hashy – nie można łatwo odwrócić tego procesu, tj. z hasha wyprodukować kolizji). Co jest najśmieszniejsze, to takie przewinienie było wliczane do kategorii ban, a nie kick, tak jak powinno być (chociaż według mnie powinno być to zaledwie powodem do przesłania dodatkowego modułu sprawdzającego istnienie konkretnego czita). Poszukiwane ciągi znaków były tak krótkie, że istniała całkiem duża szansa, że znajdą się w pamięci komputera przypadkiem.
Rada EvenBalance: nie uruchamiaj innych programów jak grasz w grę chronioną PB :)
 
Kolejną słabą funkcją są zrzuty ekranu. O ile nie jest to złe samo w sobie, to jest łatwe do obejścia, a skutkuje sporym naruszeniem prywatności, jeśli ktoś korzysta w tle z komunikatora.
 
I jeszcze dwie rzeczy (które łatwo można sprawdzić):

Jeśli jakiekolwiek okno zawiera ciąg znaków ollydbg, PunkBuster nadpisze część kodu i zawiesi grę. Dlaczego? OllyDbg to używany powszechnie debugger, program do badania wykonującego się kodu. Dość drastyczny środek zapobiegawczy, szczególnie, że istnieje cała masa takich debuggerów, a przeciętny haker zmienia tytuł tego okna, bo jest to najpowszechniejsza metoda jego wykrycia (nie tylko w przypadku PB).
 
Pewnie te wady, a także umieszczenie tego systemu w dużej ilości gier, co obniża jego skuteczność, Valve zdecydowało się porzucić PB i stworzyć własny: Valve Anti-Cheat (VAC). Może też bali się udostępnić kod firmie EvenBalance w obawie przed kradzieżą ;) Magiczne spojrzenie w przyszłość?
 
Ich system jest bardzo podobny w kwestii sposobu działania. Różnice z PB wskazują, że wyciągnąłem prawidłowe wnioski, co do jego słabości. Brak sprzętowych banów, ogólnie luźniejsze podejście do kwestii skanowania, brak sterownika. Ciekawa jest za to historia wpadek i przypadków, którą można znaleźć na wikipedii.
 
Początkowo uszkodzenie pamięci (błąd sumy kontrolnej) powodował ban – później tylko kick. Nie wzięto pod uwagę, że PC jest platformą bez sprawdzenia pamięci przed uruchomieniem. Zapewnie nie spodziewano się, że uszkodzony RAM będzie miał tak duże znaczenie.
 
Drugi przypadek: ban za używanie WineX/Cedega (emulatora Windows pod Linuksem). Zmieniony na kick, a później cały system przystosowany do obsługi WineX.
 
Trzeci: ban za program integrujący kontrolowanie Winampa z grą. W przybliżeniu to tak, jakby dostać ban za frapsa (wiele osób naiwnie twierdzi, że nie da się go wykryć, a po prostu W3 nie zawiera takiego kodu, bo modyfikacja wyświetlanej grafiki wiele nie daje – nie ma wallhacka, flashhacka itp.) . Poprawiono wykrywacz i usunięto bany.
 
 
System nie ustrzegł się błędów, ale nie było ich nadzwyczaj dużo. Prywatność jest zapewniona przez nie przesyłanie informacji o zawartości okien/listy procesów/pamięci. Zamiast tego jest wykonywane porównywanie haszy z programami/nazwami z czarnej listy i odsyłana jest odpowiedź: czit użyty/nieużyty. Niestety jak wszystkie hasze może się zdarzyć, że nastąpi kolizja i jakaś przypadkowa nazwa wyprodukuje ten sam hasz, co czit. Mało prawdopodobne, ale możliwe. Zapobiegnięcie temu jest dość trudne. Tak samo nie można wyeliminować pomyłek wynikających z niesprawnej pamięci.
 
Skoro to są takie dobre systemy, to czemu jednak czity istnieją? Prawda jest taka, że ciągłe ich obchodzenie, mimo, że skutkuje w dłuższym czasie banem, sprawia wrażenie ich słabości. Zachęca nowe osoby do próbowania, i nie odpędza starych. Niemożliwość zidentyfikowania konkretnej osoby na Internecie prowadzi do śmiesznych pół-rozwiązań jak bany sprzętowe. Są jednak próby kompletnego rozwiązania tego problemu, przez zmiany w samym sprzęcie. Pierwszą taką prawdziwą próbą był Pentium III, gdzie umieszczona została specjalna funkcja procesora, zwracająca jego unikatowy numer seryjny. Krytykowana, została usunięta z Pentium 4 i kolejnych procesorów. Nawet w Pentium III dało się ją wyłączyć przy pomocy ustawienia BIOS (Intel najwyraźniej spodziewał się krytyki i zabezpieczył swoje tyły). Obecnie nie widać na horyzoncie żadnego rozwiązania sprzętowego, które mogłoby pomagać w detekcji czitów w grach. Najbliżej jest TPM (Trusted Platform Module), obecny na większości nowych płyt głównych i laptopach. Jest to jednak zbyt mało dla gier, potrzebne jest coś w rodzaju Intel Anti-Cheat, a może nawet znajdzie się Anti-Cheat Core w nowych procesorach?
 
 
Zakładając, że w końcu powstanie jakaś przewaga antyhacków, co wtedy? Czy oszustwa będą kompletnie wyeliminowane? Niestety nie. Posłużę się tu przykładem gry Warrock, która jest zalana falą czitów, mimo, że używa systemu PunkBuster.
 
Zacznę jednak od Warcraft III, dla porównania - jakie były problemy z grą, czity i bugi? Ogromna większość patchy zmieniała wyłącznie balans gry. Najpowszechniejszym programem jest maphack – obecny niemal od początku, odsłania normalnie ukrytą część mapy (usuwa mgłę wojny). Nie jest to wystarczająco dużo, żeby wygrać, ale daje pewną przewagę. Oprócz tego były, ale zostały naprawione: farmhack (budowanie farm na wszystkim, nawet jednostkach), scrollhack (blokował przewijanie ekranu), drophack/winhack (wygrywa grę przez wykorzystanie błędu w grze), tiehack (remisuje grę, używany w przypadku przegrywania).
 
Obecnie jedynie tiehack jest z pewnością w nowej wersji (są widoczne konta na Battle.Net, które mają podejrzanie dużo remisów i wygranych, a prawie zero porażek). Reszta jeśli istnieje, nie jest publicznie dostępna, a więc prawdopodobnie też droga, niezbyt łatwa do wykonania.
 
Są jeszcze pseudo-czity, takie jak custom kick (wykopuje z własnych gier, jeśli jesteś hostem – to praktycznie nie jest czit, bo można to wykonać przy pomocy zewnętrznych programów Np. tcpview), namespoofer (chyba tylko przeciwko banliście, podmienia nick we własnej grze), lossbot (przegrywa gry w celu uzyskania słabszych przeciwników). Te programiki nie zakłócają raczej innym gry, może tylko trochę lossbot.
 
Lista jest całkiem długa, niektóre pozycje poważne. Czas naprawienia najpoważniejszych (dischack) był dość krótki – nawet do tygodnia, dwóch. Całkiem sprawnie, jeśli chodzi o duże firmy.
 
Spróbujmy więc zhakować grę. Wiadomo, że jest sporo programów łapiących pakiety gry i jakoś działają, więc wyszukuję na google:
http://www.google.pl/search?hl=pl&q=warcraft+III+packet+information&lr=
Już trzeci link prowadzi do bnetdocs, gdzie można znaleźć dalsze linki do ogólnego opisu pakietów gry. Stąd już prosta droga do utworzenia własnego maphacka, a nawet niewykrywalnej wersji. Potrzebny jest po prostu drugi komputer, działający jako router. Na nim łapiemy pakiety gry, określamy co jest gdzie i już można narysować swoją własną mapę. Warden działa tylko na komputerze z uruchomioną grą, więc nie zostaniemy wykryci. Sporo pracy, ale do wykonania, poziom trudności dość niski. Potrzeba tylko drugiego monitora i komputera. Cóż, żeby pozbyć się maphacka, trzeba nie tylko skanować komputer z grą, ale co najmniej szyfrować pakiety (chociaż to zawsze będzie złamane, bo odszyfrowanie musi nastąpić w komputerze gracza), lub przesyłać pozycję tylko widocznych jednostek. To jednak jest zbyt duże obciążenie dla dzisiejszych sieci (procesory może by sobie z tym poradziły, karty graficzne też, ale wymagania sprzętowe wzrosłyby dwukrotnie). Taki czit nie jest tak wygodny jak zwykły, na jednym monitorze z grą. Wystarczy jednak złapać pakiety, by wiedzieć, co zostało zbudowane, jakie jednostki, jakie budynki, ile przeciwnik ma surowców, a to już dość by uzyskać znaczną przewagę w grze, nawet jeśli zaprezentujemy to w postaci tekstu, zamiast odkrytej mapy/minimapy.
 
Zabrzmiało źle? Niestety, takie są ograniczenia dzisiejszego sprzętu. Chcesz zobaczyć coś naprawdę dziwnego? Zajrzyj „jak to robi” gra Warrock. Co jest śmieszne, w poprzednim wyszukaniu widoczny jest program WPE (Winsock Packet Editor) Pro (żaden szanujący się haker nie nazwie swojego programu noob?;). Wyszukuję:
http://www.google.pl/search?hl=pl&q=wpe+pro+hack+warrock&lr=
Oczywiście to nie jest przypadek, ale wyszukajmy jeszcze coś innego:
http://www.google.pl/search?hl=pl&q=packet+hack+warrock&lr=
PACKET HACK? Haha, co to może być? Bzdura totalna? Czy naprawdę da się po prostu zmienić pakiety, żeby wpłynąć na stan gry? Zaglądam na pierwszą stronę wątku, a tam rzeczywiście, packet hack :). Madness? Co by było z W3, gdyby można było po prostu podmieniać pakiety i wysyłać swoje? Jak w ogóle gra może na to zezwalać? Jak klient gry utrzymuje stan, mimo tego, że wysyłanie pakietów go pomija? Spróbuję wyjaśnić tą zagadkę.
Jest tu niekompletna instrukcja do dekodowania pakietów, które najwyraźniej są „zaszyfrowane”. Autor wątku jak „prawdziwy haker” nie chce podać gotowego rozwiązania:

Ok., „simple mathematical formula”, „leeching”, „increase the amount of knowledge aquired” (Spelling Nazi pewnie tutaj umierają z radości – powinno być acquired, takie rzeczy zawsze trafiają się w najbardziej nadętych tekstach), pewnie czytał Mentor’s Last Words. Przyglądając się pakietom, widzimy:
 
Actual packet:
F1 F3 F4 F6 F1 E3 x x x x x x x x x E3 C9
Syntax:
20752 xxxxxxxxx
 
Hmm, jak to jest przeliczone? O co biega? Liczby na górze są w systemie szesnastkowym, na dole zakładam, że w dziesiętnym. Widać, że końcówka pakietu jest zawsze taka sama. Sugeruje to, że pakiety są zupełnie inne niż w Warcraft III. Nie jest użyty typowy binarny protokół, gdzie na początku pakietu jest jego rozmiar i znacznik typu. Z jakim protokołem mamy więc tutaj do czynienia? Dlaczego ktoś by miał tego używać? Hmm, jest jedno logiczne wytłumaczenie – protokół liniowy, tak jak http. Być może gra była wykonana przez programistę www. Oprócz E3 C9 często powtarza się też samo E3 – co to może być?
 
Szyfry mają to do siebie, że nie powinno być w zaszyfrowanych danych widać żadnej reguły, a nawet nie powinno jej się dać wykryć przy pomocy kryptoanalizy. Tutaj nawet ślepy widzi powtórzenia. Jest to rzeczywiście banalny, najpopularniejszy szyfr – XOR. Jest to proste działanie matematyczne, o kilku ważnych właściwościach:
Jeśli: A xor B xor C = D to A xor D xor C = B itd. Można podstawić wynik w dowolne miejsce, żeby uzyskać „brakującą” liczbę. Ta właściwość jest używana w konstrukcji niektórych sum kontrolnych. To oznacza też, że jeśli: A xor B = C, to A xor C = B i C xor B = A. Możemy uzyskać „klucz” szyfrujący przez zgadnięcie czym jest E3 (albo po prostu wypróbowując 256 możliwych kombinacji i sprawdzając ręcznie, czy wyszło coś sensownego). E3 to jest spacja, jak się okazuje. Kod spacji to 32 (szesnastkowo 0x20). Można więc wyliczyć klucz, 0x20 xor 0xE3 = 0xC3. Cała wiadomość jest zaszyfrowana tak samo: F1 xor 0xC3 = 0x32. W tablicy kodów ASCII 0x32 (liczba) = 2 (jako tekst) itd. dla każdej literki. Widać już, że wyszło 20752 (to ta lewa dwójka), ale jako tekst. Protokół nie jest binarny, lecz tekstowy! Teraz naprawdę widać, że robił to programista www :)
 
Widać też najgorsze – straszne marnotrawstwo miejsca! Każdy bajt przetrzymuje tylko jedną cyfrę, spacje oddzielają poszczególne liczby, podczas gdy można było zrobić pakiety jak w W3, i zużywać kilkakrotnie mniej łącza. Gry hostują gracze, więc pewnie producenta to nie obchodzi :) Poziom zużycia łącza jest tak duży, że lag staje się wpisany w rozgrywkę. Nawet wartości puste są przesyłane jako tekst „NULL” (6 bajtów), zamiast 0 (1-4 bajtów w normalnych warunkach – nadwyżka zużycia pasma od ½ do 6x, plus zbędne spacje).
 
Jakby mało było marnotrawstwa, to jeszcze parsowanie linijek nie jest poprawne. Niedawno można było zawiesić grę, przez napisanie niemieckich liter w czacie. Dlaczego? Dokładnie nie wiem, ale prawdopodobnie ma to związek z tym, że narodowe znaki zajmują więcej niż jeden bajt. Być może bufor na tekst był zbyt mały. Ciekawe, czy poprawili tylko ten jeden znaczek, czy wszystkie? Przy ich podejściu, pewnie tylko częściowo. Błąd jest wyjątkowo łatwy do odtworzenia, jednak na poprawkę gracze czekali dwa miesiące, oczywiście od poprzedniej próby poprawienia. Jak wyglądały wcześniejsze próby? Na przykład wyłączenie ctrl+v w oknie czatu (bo przecież nie wszyscy mają klawiatury pozwalające wpisać obcojęzyczne znaki – problem załatwiony dla 90% klientów!).
 
Obecnie pakiety są zbudowane nieco inaczej niż w tym tutorialu. Kodowanie się zmieniło, ale protokół jest nadal taki sam. Spacje oddzielają liczby, koniec „linii” jest oznaczony dwoma charakterystycznymi bajtami.
Na czym polega „packet hack”? Można złapać dowolny pakiet, odesłać go do serwera gry i wywoła to odpowiadającą mu akcję u wszystkich graczy. W tym momencie Warcraft III wita niedoszłego hakera wiadomością o rozłączeniu lub desynchronizacji. Czy to jest takie trudne do zaimplementowania? Raczej nie, ale producent Warrocka poszedł na łatwiznę, każda akcja jest odsyłana od serwera do klientów, i dopiero wtedy staje się aktywna. Tylko część jest sprawdzana na sensowność. Nie dość, że to wywołuje duże opóźnienie, to jeszcze można wkładać pakiety w kliencie, kompletnie pomijając jego kod i gra to połknie. Lista możliwych czitów jest duża, i co najważniejsze, naprawdę śmieszna:

Skrótowe tłumaczenie:
- wchodzenie do pojazdów z każdego miejsca na mapie
- używanie wszystkich broni, nawet tych, które są wyłączone
- zabijanie graczy
- łapanie dowolnej flagi w dowolnym miejscu (prawdopodobnie chodzi o tryb capture the flag)
- nagrywając swój „spawn packet” (pakiet pojawienia się) można zignorować odliczanie i pojawić się w dowolnym momencie
 
Gdyby w W3 dało się teleportować jednostki, albo… odnawiać zdrowie jednostek:

Tłum. ”W każdym razie, utworzyłem filtry, które zmieniają nadchodzące pakiety od innych graczy w nieszkodliwe (niezadające obrażeń) pakiety, które powodują, że gra uważa, że nigdy nie byłem zraniony (…)”
Bez komentarza :), nieco dalej: „(…) robienie tego tym sposobem zapobiega konieczności spamowania serwera pakietami dodającymi zdrowia, co nie tylko tworzy lag, ale czasem oznaczy ciebie jako nie grającego normalnie” (korzystającego z czita). Czasem – a jakoś W3 nie ma z tym problemu w ogóle. Spróbuj spytać o taki czit na jakiejś stronie, zapewniam, że zostaniesz wyśmiany – w końcu takie głupoty nie mają prawa istnieć:

Tłum. „Nie sądzę, żeby jakakolwiek gra była zaprojektowana, aby zezwalać na takie coś”
Tak to tylko w Erze i Warrocku :D Powyższa dyskusja pochodzi z wątku na temat WoWa.
 
Obecnie pakiety mają doklejoną na początku liczbę, która prawdopodobnie określa moment wykonania komendy (czas bezwzględny) lub jej miejsce w kolejce. Podejrzewam, że po odesłaniu komendy przez serwer czasy są porównywane i przez to weryfikowane, czy były włożone przez WPE Pro lub podobne narzędzie, czy też przygotowane przez klienta gry. Oczywiście takie coś nie ma prawa działać, bo można przecież wysyłać pakiety z dobrym numerkiem z przodu, na podstawie starszych pakietów lub zegara (zależy co to naprawdę jest). Działa to jednak na klasyczny „packet hacking”, przez nagranie pakietu bez odszyfrowania :). PunkBuster oczywiście umieścił WPE Pro na czarnej liście już dawno, ale podobnych narzędzi jest cała masa i nie dało to zamierzonego efektu.
 
Podsumowanie.
Obecnie można przyjąć, że posunięcia Blizzarda w implementacji swojego własnego systemu przeciwko czitom są rozsądne. Nie ma się za bardzo do czego przyczepić, a kod gry jest w miarę sprawnie napisany. Oczywiście nie ustrzeżono się bugów, ale wynika to raczej z możliwości ówczesnych technologii pisania programów, niż lenistwa lub rażących błędów w projekcie. Sam element skanujący jest coraz bardziej zaawansowany (przynajmniej dla WoW). Elementy kontrowersyjne, jak skanowanie nazw okien lub sterownik są obecnie nieużywane. Mogło być dużo gorzej, jak pokazuje przykład Warrock i PunkBustera. Żaden system nie pomoże, jeśli problem leży w samym projekcie gry, lub w samej platformie PC.
 
Przy dzisiejszych możliwościach sprzętowych można napisać „statki” nie do zhakowania, ale jeszcze nie RTS. Mam nadzieję, że Starcraft 2 będzie posiadał odpowiednie mechanizmy, jeśli nie włączone na stałe, to opcjonalne, które po prostu nie zezwolą na przesyłanie pozycji jednostek, które nie są widoczne. Jest to możliwe i „na oko” powinno powoli dawać radę na bieżących łączach sieciowych.
 
Dopisano 17.07.2008 – MDY (producent Glidera) przegrał sprawę w sądzie! Oczywiście wyrok dotyczy tylko Stanów Zjednoczonych, ale jak widać Blizzard dobrze wybrał sposób działania – najtańszy środek do osiągnięcia celu w przypadku zaawansowanego ukrywania bardzo rozpowszechnionego programu 3rd party.
Only begun the hax war has :)
 
Źródła do artykułu. Wskazane czytanie ze zrozumieniem, teksty są bardzo subiektywne.
Warden, w większości bardzo techniczne artykuły:
http://www.uninformed.org/?v=9&a=1
http://www.skullsecurity.org/wiki/index.php/Starcraft_Warden
http://www.rootkit.com/blog.php?newsid=358
http://en.wikipedia.org/wiki/Warden_%28software%29
http://forum.valhallalegends.com/index.php?topic=17356.75
http://www.edgeofnowhere.cc/viewtopic.php?t=311208
http://www.edgeofnowhere.cc/viewtopic.php?t=311204&postdays=0&postorder=asc&start=30
http://www.rootkit.com/newsread.php?newsid=360
http://onwarden.blogspot.com/
http://www.javaop.com/~ron/code/
 
Punkbuster:
http://pl.wikipedia.org/wiki/PunkBuster
http://www.mpcforum.com/showthread.php?t=89622
http://forum.netcoders.cc/announcements/14061-unerring-punkbuster.html
 
Valve:
http://www.shacknews.com/onearticle.x/16158
http://www.gamespot.com/pc/action/halflife2/news_6076314.html
http://en.wikipedia.org/wiki/Valve_Anti-Cheat
 
Warcraft III zasady działania:
http://www.nabla.org/wc3host.html
http://www.bnetdocs.org/forums/viewtopic.php?t=12
http://forum.valhallalegends.com/index.php?topic=14970.0
http://forum.valhallalegends.com/index.php?topic=14994.0
 
Inspiracja do artykułu:

 

Zamieścił: pyton, dnia: 20:34:25, Tuesday 15. July 2008

Komentarze:

1: pyton, Support
[14:27:04, Thursday 17. July 2008] , Zgłoś do moderacji

[17:16:19, Thursday 17. July 2008] , Zgłoś do moderacji

3: eVo
[19:07:52, Thursday 17. July 2008] , Zgłoś do moderacji

4: pyton, Support
[19:24:32, Thursday 17. July 2008] , Zgłoś do moderacji

5: eVo
[21:51:22, Thursday 17. July 2008] , Zgłoś do moderacji

6: energetic.vex, Moderator
[22:44:40, Thursday 17. July 2008] , Zgłoś do moderacji

[23:55:58, Thursday 17. July 2008] , Zgłoś do moderacji
spoko art ale jeszcze nie skonczylem :)

w sumie taki blizzard by moglby zarobic 3 wyjsciem: zalozeniem swojego hacka 100% chodzacego :D

8: pyton, Support
[07:57:20, Friday 18. July 2008] , Zgłoś do moderacji

9: fox
[13:15:14, Friday 18. July 2008] , Zgłoś do moderacji
bardzo dobra robota gratz

[12:36:50, Saturday 19. July 2008] , Zgłoś do moderacji
swietna robota, wszystko ladnie opisane :)
przydalby sie jakis art o tym jak wybierac net do gry, z jakich firm sa najlepsze, czemu w innych miastach roznie dzialaja te same internety etc ;p

11: pyton, Support
[14:44:20, Saturday 19. July 2008] , Zgłoś do moderacji

12: MakaO, Moderator
[15:57:37, Monday 21. July 2008] , Zgłoś do moderacji
Szacunek Pyton :)

13: Paz, Redaktor
[15:09:01, Tuesday 22. July 2008] , Zgłoś do moderacji

14: Mefistofeles, Administrator
[13:32:00, Wednesday 23. July 2008] , Zgłoś do moderacji

15: Cron
[14:49:16, Wednesday 23. July 2008] , Zgłoś do moderacji

16: pyton, Support
[15:49:38, Wednesday 23. July 2008] , Zgłoś do moderacji

17: Kay
[21:07:25, Wednesday 23. July 2008] , Zgłoś do moderacji

[00:14:41, Thursday 24. July 2008] , Zgłoś do moderacji

19: pyton, Support
[09:32:05, Thursday 24. July 2008] , Zgłoś do moderacji

[10:05:38, Thursday 24. July 2008] , Zgłoś do moderacji

21: pyton, Support
[11:09:49, Thursday 24. July 2008] , Zgłoś do moderacji

[19:33:00, Friday 25. July 2008] , Zgłoś do moderacji

23: pyton, Support
[20:05:47, Friday 25. July 2008] , Zgłoś do moderacji

[16:26:38, Wednesday 30. July 2008] , Zgłoś do moderacji

25: Zmień Nick, Redaktor
[19:14:48, Saturday 04. October 2008] , Zgłoś do moderacji
sry za dlugi , nie chce sie czytac ; ]

Więcej?

Chcesz znaleźć informacje na konkretny temat? Przejrzyj hasła, których najczęściej dotyczą dodane ostatnio nowości! WC3L, TURNIEJ, WCG, NETWARS, LCW, WORLD CYBER GAMES, TERROR, DOTA, GRUBBY, MYM, PALADYN, WYWIAD, REPPACK, WARCRAFT, BLIZZARD, MOON, PORADNIK, POL-TEAM, BIOT, POLSKA, ESL, KONKURS, LIGA, WORLD ELITE, FUZJA, NGL-ONE, ENC, NGL, TOD, TDEL, SPQR, SLH, MOUZ, PGS, TOUR, GFO, WILQ, BRONZE, KODE5, WILDA, PATCH, TEAM FIGHTING, LADDER, REPREZENTACJA, SILVER, HEADSHOT, EXTREME MASTERS, HEYAH, FLY100%, VOODOO, LYN, KUJA, BIOHAZARD-TEAM, BVG, WICKED, ESWC, ALMOST, TH000, ACIS, KWAKI, CYKLOP, SHOW, KLIMO, REPLAYPACK, INCUP, CLAN BASE, HOORAI, SASE, ELIMINACJE, FINAłY, FNATIC, POLTEAM, SHOWMATCH, WCG 2006, IEST, SRS, FINAł, CYBERSPORT, WE.EU, PLD, SKY, PRAE, REMIND, JAGR, CASIN, LAN, REPLAYS.PL, CHALLENGE, ANIMATOR, 2007, BATTLENET, CARMAC, HAPPY, NATIONS, STARCRAFT, PEDAL, KONKURSIWO, W3ARENA

Copyright © Wszelkie prawa zastrzeżone,
kopiowanie tylko za zgodą właściciela.
2003/2007 by: CyklOP, Muzami, Julas [ Mapa Strony ]
Replayów w bazie: 19538 Kont użytkowników: 11428

Pomysł, oskryptowanie, administracja: CyklOP [jak kupić zagraniczne akcje] [Jak wypełnić W-8BEN] [Jak tanio wymienić walutę] [deutschtests]
Design: Muzami, art w topie strony nadesłał Z4buZa
Skrypt obsługujacy replaye: Juliusz 'Julas' Gonera [ Replay Parser ]
Wykonano w czasie 0.41574788093567 sekund