Ako ušetriť pri programovaní na mieru

Obyčajný pracovný deň. Zrazu požiadavka na program od klienta. Nechcem príliš rozoberať konkrétnosti programu, najmä z dôvodu zachovania anonymity, môžeme si však povedať, ako samotný program fungoval a aké boli jeho špecifikácie. Klient potreboval vytvoriť program, ktorý by sa automaticky prihlásil do iného systému pod konkrétnym menom a heslom a simuloval určité správanie v danom systéme.

FÁZA 1

Prihlasovanie automatom do akéhokoľvek systému je náročná úloha sama o sebe. Sú prípady, kedy sa prihlásenie podarí bez problémov - iba s menom a heslom. Niekedy je to však zložitejšie, pretože aplikácia kontroluje správnosť odoslanej hlavičky požiadavky. A použitie šifrovacieho kľúča či povolenie prihlásenia iba jedného používateľa z jednej IP je už level sám o sebe. A tak to bolo aj v tomto prípade.

Pravdou je, že rozlúsknuť zložité šifrovanie býva zväčša časovo a finančne veľmi náročné. V tomto prípade sa mi to našťastie podarilo veľmi rýchlo a už po hodine sa môj skript do systému úspešne prihlasoval, a to hneď z viacerých IP adries. Potom som iba nasimuloval jednoduché správanie podľa klientovej požiadavky a bolo vybavené. Teda to som si aspoň myslel.

FÁZA 2

Následné testovanie však odhalilo, že moje nasimulované správanie nemalo žiadaný efekt. Zistil som, že systém využíva technológiu WebSocket, vďaka čomu aplikácia udržuje neustále spojenie so serverom. Práve cez toto spojenie prebieha neustála komunikácia v nešifrovanej podobe, avšak iba na prvý pohľad. Pokiaľ by ste sa chceli na túto komunikáciu napojiť, je potrebné vedieť presne aké správy server posiela a aké vyžaduje. Ak sa pomýlite čo i len v jednom znaku, server detekuje hrozbu a okamžite vás odpojí. Síce je možné sa do tejto komunikácie nabúrať, je to však časovo náročné a je teda potrebné zvoliť inú možnosť.

FÁZA 3

Každý programátor vám to potvrdí - jednou z najhorších vecí je niečo vytvoriť, príde zmena zhora a vy zrazu musíte celý projekt prerobiť. V tomto prípade som musel teda celú prácu zahodiť a začať uvažovať inak. Potreboval som sa vyhnúť rozšifrovaniu komunikácie, avšak efektívne a ekonomicky. Po niekoľkodňovom rozmýšľaní som prišiel na jednoduché riešenie. Rozhodol som sa, že sa nebudem snažiť nabúrať komunikáciu aplikácie, túto prácu prenechám prehliadaču. Ja skúsim simulovať správanie užívateľa tak, že budem prehliadač ovládať.

Do prehliadača som naprogramoval jednoduchý plugin, kde sa po kliknutí na ikonku pluginu začína proces simulovania. Užívateľa som prihlásil vyplnením mena a hesla do formulára, nasimuloval som kliknutie “Odoslať” a potom som už sám ovládal stránku a napodobňoval tak aktivitu návštevníka. Dokonca sa mi podarilo vyhnúť aj spomínanej technológii WebSocket. A projekt sa mi podarilo úspešne uzavrieť.