Španělština na háku

Zveřejněno , upraveno - holoubekm Přidat komentář volný čas

Přibližně před rokem mi na ČVUT začalo vadit, že výuka jazyků téměř neexistuje. Samozřejmě, pro člověka, co jazyky vyhledává, se řešení vždycky najde. Ale když bojujete se školou, šetříte si každou minutu pro přítelkyni a kámoše, na jazyky moc času nezbývá.

Ale jaký jazyk a jak se ho budu učit?

Jeden večer mi pod okny zazněla kytara a španělské cantare a bylo vybráno. Španělština mi od začátku zněla. Druhou otázkou bylo, jak se jazyk efektivně učit. Od několika kamarádů jsem dostal doporučení na online kurz duolingo, tak jsem se rozhodl dát mu šanci.

Učení jazyka z parády postele mě nadchlo. Na kurzu je vidět čas a péče, které tým duolinga věnuje celému projektu. Systém vás neustále motivuje pomocí bodů, odměn a postupného odemykání ke stále rychlejšímu tempu studia. Líbil se mi moment, kdy jsem si uvědomil, že závodím sám se sebou. Kurs jsem proběhl během necelých dvou měsíců, ale španělsky jsem neuměl dost sebevědomě pro praktické použití.

Zapsal jsem si proto „špáninu“ na katedře jazyků ČVUT a začal zkoumat další možnosti. Z hledání vypadl kurz wlingua, s radostí jsem se do něj pustil. Nejenom, že má podobné supermotivační schopnosti jako duolingo, ale podporuje navíc i práci s textem, další typy cvičení. Jeho rozsah je navíc ohromný.

Po několika dnech mě ale zarazil email, že můj účet přechází na basic plan. Po přihlášení vyskočilo strohé rozhraní, kde chyběly oblíbené lekce a cvičení. Chvíli jsem pokračoval v „ořezané“ verzi stránek, ale jak jednou okusíte lepší, k horšímu se špatně vrací.

Jak získat plnohodnotný účet wlingua nastálo?

Jako správný technik, jsem zběžně prohlédl kód stránky. Z chrome DevTools jsem vykoukal, že jde o moderní responzivní web v javascriptu, který komunikuje se serverem pomocí dojo. Zaregistroval jsem si druhý free účet, abych měl přístup k plné verzi, cvičením a všemu, co jsem si oblíbil.

Pomocí EasyPHP jsem rozběhl lokální server s databází. V Chrome DevTools jsem si uložil HTTP požadavky a odpovědi při různých akcích a byl jsem připraven na pokusy.

if(isset($_GET)) {
 $url = $_GET["url"];
 $url = str_replace ("/wlingua/", "", $url);
 $src = "http://spanish-course.wlingua.com/1.74/" . $url;
 
 $dir = dirname($url);
 if (!is_dir($dir)) 
 mkdir($dir, 0755, true);
 
 if(!file_exists($url)) 
 file_put_contents($url, fopen($src, 'r'));
 
 header("Location: " . $_GET["url"]);
 die();
}

Kód zajišťující lokální cachování.

Nápad? změnit kód webové stránky

local clone of Wlingua
lokální kopie Wlingua

Celý web jsem si uložil do kořenového adresáře lokálního serveru, vytvořit jsem přesměrovací skript, který chybějící soubory nahrával přímo z wlingua.com. Vlastně se jedná o útok Man in the Middle (MitM), kdy člověk,
který řídí tok mezi klientem a serverem může změnit data bez povšimnutí.

Takhle jsem mohl dělat pokusy přímo na kódu stránky, aniž by to někdo zjistil. Klient v kódu kontroluje typ účtu a podle toho zpřístupňuje různé možnosti. Vyhodil jsem z kódu podmínky na plnou verzi a zkusil své štěstí. Jedinou odpovědí ale byl json, který upozorňuje na nesprávnou verzi účtu. Chjo 🙁

Nápad? upravit požadavky

Trošku jsem zapátral a zjistil jsem si jak zhruba funguje Dojo toolkit. A začal s pokusy o úroveň níž, přímo úpravou requestů. Snažil jsem se přijít na vhodnou kombinaci parametrů, jak ze serveru dostat data, která jsou určena jen pro full účty. Tento útok je spíše o štěstí a hledání neošetřených kombinací. Zhruba po hodině jsem to vzdal s tím, že se k tomu ještě vrátím.

Nápad? použít nový účet

Chtěl jsem vytvořit nový, na 14 dní plnohodnotný, účet a do něj přelít pokrok z původního basic účtu. Server by neměl nic poznal, kromě toho, že na druhé straně španělsky mluvící člověk, který chrlí cvičení šíleným tempem. Po otestování pár požadavků jsem došel k závěru, že by bylo nutné začít od začátku a ukládat si požadavky krok za krokem. V čase založení nového účtu by pak stačilo spustit skript s požadavky a bylo by vystaráno. Problém byl, že já už měl slušně nakročeno a dělat všechno od začátku se mi nechtělo. Navíc by stačila nějaká změna v API serveru a já bych mohl uložené požadavky zahodit. Smůla no 😕

Po půldni trápení jsem se chtěl na všechno vykašlat a jít se věnovat něčemu užitečnému.. no a tak jsem si pustil základní omezený účet a začal se učit. Po dokončení cvičení mi jako vždy systém přidělil body a shodou okolností také novou úroveň. Největší překvapení ale bylo, že se účet přehodil do placeného módu. Chytře tak uživateli jednou za čas podsouvají plnohodnotný účet, aby si připomněl, o jaké výhody přichází.

Oni rozdávají 6h placeného účtu za level!

V tu chvíli bylo jasné, co dělat. Rychle jsem dodělal další úroveň a zároveň jsem ukládal požadavky. Při jejich procházení jsem našel svatý grál, ajax request na 6 hodin prémiového přístupu. Nebylo nic jednoduššího, než ho odeslat podruhé s upravenými hodnotami. Paráááda! Účet prodloužen o 6 hodin.

Jsem lenoch a mám rád funkční věci, proto jsem neustálé ruční prodlužování zavrhl. Protože jsem měl lokální verzi serveru, bylo snadné upravit skripty tak, aby výsledek vypadal takto.

A po použití tlačítka (+6h):

Strávený čas: 7 hodin, profit: minimální, radost: neskutečná.

Vložit komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *