IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Hackování webových her pomocí JavaScriptu

Většina z nás určitě vždy chtěla udělat nějaké hacky nebo boty do her. A tak jsem se rozhodl, že ukáži, jak na to bez použití makro a jiných věcí, které z 99% nefungují.

Bohužel jsem článek mohl vydat až teď, jelikož majitel mi nechtěl umožnit publikaci během toho, co jsou tyto skripty funkční. Budeme používat API her proti nim a tím si vytvoříme automatizované programy a vylepšení. Budeme používat:

Pokud netušíte, o co se jedná, přečtěte si něco z kurzů o těchto jazycích zde na ITnetwork ;)

Úvod do hackování her

V úvodu bych rád vysvětlil základní principy botování her. Z většiny nám jde o to, abychom si ušetřili spoustu času, který nám hra užírá repetitivními akcemi. A v každé hře je nějaká repetitivní funkce. Ovšem nemůžeme říci, že bot může dělat jen repetitivní akce. Bot je chytrý tak, jak si ho uděláme.

JavaScript

Webové hry mají obrovskou slabinu v JavaScriptu. To je jazyk, který není pouze na serveru, ale hra ho používá běžně na klientově straně (tedy u nás v počítači). Navíc většina informací je uložena přímo ve struktuře HTML stránky. Kdo je bystřejší, určitě přišel na to, na co narážíme. Jedná se o propojení HTML DOM s JavaScriptem způsobem, že z DOM čteme data a JavaScript za nás provádí činnosti, které bychom jinak museli dělat manuálně jako hráči.

Kde si vyzkoušíme našeho bota, kterého si sestrojíme v průběhu těchto článků? Každý nejspíše zná proslulé Gameforge, které bohužel už není tak slavné, jako bylo. A jedna ukázková hra, do které mě spíš bavilo psát bota, než ji hrát, je Gladiatus. Kdo by také chtěl stále klikat a pak čekat X minut, než se něco stane? Na tohle můžeme mít přeci počítač.

Jako nadšenec do hacků her jak webových tak i stolních jsem i hry dělal a vím, jak je těžké hru zabezpečit. Ti z vás, kteří si myslí, že to je lehké, jste mírně na omylu.

Použité nástroje

Na používání a psaní botů v JavaScriptu používám WebStorm a CustomStyleScript (Addon) v Mozilla Firefox. Prohlížeč můžete nechat běžet 24/7 a pokud je skript napsaný dobře, nemusíte na něj sáhnout.

Příklad extrakce hodnoty s použitím id

Pro extrakci dat pro bota je užitečné jQuery. Bohužel ne všude funguje a tak použijeme defaultní funkce JavaScriptu jako document.getElementById().

Začněme tedy s extrakcí zbývajícího času ve hře Gladiatus pomocí této funkce z tohoto pole:

JavaScript zdrojákoviště - Základní konstrukce jazyka

Kód funkce je následující:

function tiam() {
   var time = document.getElementById("cooldown_bar_text_expedition").innerHTML; // Extrakce hodnot v tvaru hodiny:minuty:sekundy
        var tt = time.split(":"); // Rozdělení hodnot na jednotlivé
        return parseInt(tt[0]) * 60 * 60 + parseInt(tt[1]) * 60 + parseInt(tt[2]); // Parsování hodnot na čísla pro číselné operace
}

Takto můžeme velmi jednoduše v nějakém časovém intervalu sledovat, jak čas postupuje, a až dosáhne kýžené hodnoty, můžeme automaticky na něco kliknout, aniž bychom my seděli u počítače. Jak provést takovou akci si ukážeme za okamžik. Hra tak může běžet stále v pozadí a my budeme ihned na vše reagovat.

Ukládání dat botovi

Co když si naopak chceme něco uložit?

Pro ukládání dat botovi použijeme cookies. Nesmíme ale zapomenout, že bot musí být spuštěný hned při načtení stránky. Spuštění skriptu při načtení stránky zajistíme takto:

window.addEventListener('load', function() { // Spuštěné funkce při načtení

runRoutine(); // Naše rutina, co se bude provádět po načtení

if (getCookie("Ch")=="nejakeData") {
    setCookie("Ch",0);
}


})

Provedení akce - Sbírání denní odměny

V tomto příkladu si ukážeme jen základ a to, jak například udělat, aby nám bot sbíral každý den denní odměnu. Zmínili jsme, že při načtení se spustí funkce runRoutine(), tak ji použijeme:

function runRoutine() {
        if (document.getElementById("header_LoginBonus")) {
        document.getElementById("linkLoginBonus").click();
    }
}

Jen jsme vybrali element a jednoduše na něj klikli metodou click().

Kompletace pro finální použití

Původně jsem chtěl ukázat sběr dárků pomocí skriptu, kde skript sleduje, zda tlačítko existuje a klikne na něj. Kód přikládám stejně pro případ, že by to znovu přidali, jako příklad, jak jdou tyto situace řešit. Dárky ale ve hře již odebrali a tak sem dávám příklad s útokem.

Pokud naše funkce tiam() pro zbývající čas výše navrátí nulu, můžeme znovu zaútočit. Nebudeme ovšem používat klasický přístup přes tlačítko, protože by to bylo zbytečně složité. Když nahlédneme do zdrojového kódu stránky, objevíme, že se po stisku volá funkce:

attack(null, '0', 1, 0, '')

Na to jsme přišli tímto způsobem:

JavaScript zdrojákoviště - Základní konstrukce jazyka Samozřejmě každá hra je naprogramovaná jinak a obslužná funkce tam nemusí být takto jednoduše viditelná. Pak je snazší tlačítko vybrat a zavolat click(), jak jsme si již také ukazovali.

Ale zpátky k funkci attack(). Všimněte si jejích parametrů. Vývojáři se nesnažili zakrýt funkčnost, ale i tak nám nechali prakticky API pro našeho bota.

Když budeme s parametry trochu experimentovat, můžeme střídat útoky na nepřátele nebo i jiné lokace:

function runRoutine() {
        if (tiam() <= 0) {
        attack(null, '0', 1, 0, '');
    }
}

window.addEventListener('load', function() { // Spuštěné funkce při načtení

runRoutine(); // Naše rutina, co se bude provádět po načtení

});

Jakmile naše funkce uvidí, že čas pro další útok vypršel, zavolá funkci attack() hry a začne další. Právě jsme si ušetřili 90% herního času a smyslu hry:

JavaScript zdrojákoviště - Základní konstrukce jazyka

Toto byla jen jednoduchá ukázka fungování botů skriptování v JavaScriptu.


 

Všechny články v sekci
JavaScript zdrojákoviště - Základní konstrukce jazyka
Článek pro vás napsal Jiri Otoupal
Avatar
Uživatelské hodnocení:
Ještě nikdo nehodnotil, buď první!
Autor se věnuje Zabezpečení Softwaru, Inovaci v sítích , Správa Serverů,Malware,Exploiting, Penetration Testing
Aktivity