muo.lv: divpadsmit gadi ar spēli, kuras pirmkoda man nebija
- gada augustā draugs ierosināja izveidot privātu MuOnline serveri, kas konkurētu ar lielāko Latvijā. Programmēšanu uzņēmos es. Mēs atvērāmies 2006. gada 21. februārī; dažu nedēļu laikā tiešsaistē bija 300–400 spēlētāju, un projekts nodzīvoja vairāk nekā desmit gadus un sešas spēles sezonas.

muo.lv vietne 2006. gadā, testa serverī. Ziedojumu rekvizīti un spēlētāju vārdi ir aizmigloti.
Āķis bija tāds, ka spēles serveris bija slēgts binārais fails. Tā kodolu es mainīt nevarēju — tāpēc uzbruku tam no visām pusēm, kur vien varēju piekļūt:
- DLL injekcijas abos galos — spēles klientā anti-cheat vajadzībām un servera procesā, lai pārtvertu tā tīkla slāni;
- proxy servera priekšā, kas redzēja katru paketi;
- trigeri spēles datubāzē, kas saglabāja papildu informāciju, ko pats serveris nekad nepierakstīja;
- logu skenēšana, lai reaģētu uz to, kas notiek spēlē.
Viss, ar ko muo.lv atšķīrās no citiem, tika uzbūvēts ap slēgto kodolu.

muo.lv Season 6 gados (2011. gada ekrānuzņēmums): tēlu reitingi, izvēlne ar kvestiem un tirgu, un kas pašlaik ir vietnē.
Produkts bija vietne. Ap 40 tūkst. PHP rindu uz MS SQL: spēlētāju tirgus (tieši tas pievilināja spēlētājus no konkurenta), priekšmetu un tēlu izsoles, kredītu birža, kvesti, reitingi un tiešsaistes grafiki, ģildes, privātās ziņas, VIP, konta atjaunošana pa tālruni, SMS un PayPal maksājumi — un GM panelis ar ~50 lapām: dupu meklēšana, priekšmetu ģenerators un dekoders, čata un tirdzniecības logi, bani, serveru restarti. Katrs priekšmets saņēma unikālu sērijas numuru un vēsturi, un tas nobeidza priekšmetu dublēšanu.

2008. gada 18. februāris: trijos serveros tiešsaistē 307 spēlētāji, tirgū gandrīz 57 000 priekšmetu, dienā nopirkti 1 080. Kredītu birža vēl tiek izstrādāta: redzamas netulkotas atslēgas un testa piedāvājumi.
Paša anti-cheat (2009). Klienta DLL pārtvēra tīkla izsaukumus, bibliotēku ielādi un OpenGL kadrus: tā atklāja speedhack, salīdzinot divus pulksteņus, bloķēja atmiņas redaktorus un injicētas DLL, ietina tīkla protokolu savā šifrēšanā un sūtīja aparatūras nospiedumu un klienta failu MD5.
Proxy katra spēles servera priekšā. Tā kā serveri mainīt nevarēju, es tā priekšā noliku savu man-in-the-middle C# valodā. Tas atšifrēja anti-cheat slāni, nelaida klāt klientus ar modificētiem failiem, īstenoja banus pēc IP un aparatūras ID, parsēja spēles paketes, logoja čatu, sūtīja globālos paziņojumus no vietnes un noķēra eksploitu priekšmetu izgatavošanas mašīnā, pārbaudot aizliegtas receptes kombinācijas, pirms serveris tās saglabāja.
Ops ar rokām — pirms to sauca par DevOps. Uz katra servera procesa darbojās watchdog aģents, kas restartēja nokritušo un pieņēma komandas pa TCP; ap piecpadsmit procesiem tika orķestrēti no konfigurācijas vietnē. Palaidējs atjaunināja klientu failu pa failam pēc MD5, CPU slodze tika rakstīta datubāzē, un poga „atvienot no vietnes” izmeta iestrēgušu tēlu.
Bots, kas vadīja pasākumus. Vietne lika komandas rindā SQL; watchdog tās ierakstīja īstā spēles klientā ar administratora tiesībām. Stāvokļu mašīna paziņoja par PvP pasākumu globālajā čatā, skaitīja atpakaļ, teleportēja reģistrētos spēlētājus uz nejaušām vietām arēnā un noteica uzvarētāju pēc nogalināšanas logiem.
Ko tas man iemācīja: ja nevari mainīt kodolu, uzbūvē ap to slāni — proxy, hooks, rindas — un taisi produktu tur.