7.10.2005 00:00 | Počítače a tablety

Cracking a ochrana pred ním, 1. časť: pohľad crackera

Nový seriál bude upozorňovať na tradičné chyby pri navrhovaní ochrán proti crackovaniu a predstavovať spôsoby, ako ochranu zlepšiť. V úvodnej časti sa však zameriame na predstavenie programov a techník, ktoré crackeri pri svojej práci najčastejšie používajú.

Straty, ktoré softvérovým firmám spôsobuje nelegálne kopírovanie ich produktov, nie sú zanedbateľné a často presahujú zisk z predaja. Nedostatočná, často úplne chýbajúca ochrana softvéru proti nelegálnemu používaniu je preto až zarážajúca.

Veľa ľudí, s ktorými som na tému crackingu hovoril, obhajovalo absenciu algoritmov proti crackingu v programe tým, že je to zbytočné, keďže program „aj tak niekto crackne.“

Majú pravdu, ale len čiastočne - program, ktorého ochranu nie je možné obísť, síce neexistuje (všetko, čo sa dá spustiť, sa dá aj cracknúť), otázkou však je, koľko cracknutie potrvá a aké skúsenosti sú na prekonanie ochrany potrebné.

Crackovanie je často rutinou
Po preštudovaní množstva tzv. „cracking tutorialov” (návodov na obchádzanie ochrany istých programov) som prišiel na to, že veľká väčšina crackerov sa do svojej práce vyzná len minimálne a aplikujú určitý postup, ktorým dokážu väčšinu programov cracknúť bez nejakej obzvlášť veľkej námahy.

Z odbornej stránky však často ani netušia, prečo ten postup funguje a ich znalosti programovania v Assembleri (programovacom jazyku najnižšej úrovne, jazyku symbolických inštrukcií) sú minimálne. Akýkoľvek väčší odklon od tradičného spôsobu generovania a overovania sériových čísel, prípadne použitie drobných trikov, ich preto môže vyradiť z hry.

Cieľom tohto seriálu nebude naučiť programátorov navrhovať ochrany, ktoré nikto nedokáže obísť. Skôr sa zameriame na tradičné chyby pri navrhovaní ochrán a predstavíme si spôsoby, ako ochranu zlepšiť. Jadrom úvodnej časti však bude predstavenie programov a techník, ktoré crackeri pri svojej práci najčastejšie používajú.

Analýza programu pred crackovaním
Keď sa crackerovi dostane do rúk jeho ďalšia obeť, začína krátkou analýzou programu. Analýza mu dá odpovede na základné otázky, bez ktorých by nevedel pokračovať. Zisťuje typ programu (demo/shareware), spôsob registrácie či obmedzenia demonštračnej verzie. Skúša zadať rôzne registračné čísla a všíma si reakcie programu na ne. Zapisuje si každý drobný detail, ktorý by mu mohol pomôcť ďalej, či už je to nadpis registračného dialógu, alebo text, ktorý program vypíše po zadaní nesprávneho registračného čísla. Tieto informácie vo väčšine prípadov stačia a cracker sa môže pustiť do ladenie programu (debugovania).

Program na ladenie aplikácií (debugger) je známy snáď každému programátorovi. Tento užitočný pomocník umožňuje zastavenie výkonu programu na určitom mieste, krokovanie, prehliadanie obsahu pamäte či jej modifikáciu. V rukách crackera sa však z debuggera stáva veľmi účinná zbraň. Schopnosti debuggera, ktoré boli také neoceniteľné počas vývoja aplikácie, sa teraz stávajú programátorovou nočnou morou.

Používané debuggery
V zásade poznáme dva typy debuggerov: kernel mode a user mode debuggery. Kernel mode debuggery umožňujú (ako už názov napovedá) ladiť úplne všetko, čo sa v počítači deje: od činnosti jadra systému, cez ovládače, až po jednotlivé aplikácie. Snáď najpoužívanejším kernel mode debuggerom je SoftICE, druhý v poradí je TRW2000.

Prílišná previazanosť so systémom však mnohým ľuďom nevyhovuje a možno aj to je dôvod, prečo sa medzi crackermi začínajú čoraz viac používať na väčšinu činností user mode debuggery.

Na rozdiel od ladiacich programov pracujúcich na úrovni ovládačov, user mode debuggery sú úplne obyčajné programy, ktoré často netreba ani inštalovať. V porovnaní s kernel mode debuggermi sú o čosi slabšie (neumožňujú ladiť kód najvyššej úrovne), ale na crackovanie bežných aplikácií ich funkcie stačia. Asi najznámejším je W32Dasm, avšak v súčasnosti sa stále viac presadzuje shareware OllyDbg.

Teraz sa bližšie pozrieme na to, čo vlastne cracker potrebuje urobiť na prelomenie ochrany programu.

Hľadanie zaujímavých miest v programe
Keď cracker otvorí analyzovaný program v debuggeri, je doslova zasypaný výpisom programu v assembleri. Takýto výpis bežne dosahuje niekoľko desiatok tisíc riadkov a orientácia v ňom je na prvý pohľad veľmi zložitá. Práve preto si cracker počas prvotnej analýzy programu vytipuje veci, ktoré by mu pomohli nájsť miesta v programe, ktoré ho zaujímajú.

Textový reťazec typu „Zadané registračné číslo je nesprávne“ je relatívne spoľahlivé vodítko k jadru ochrany proti kopírovaniu. Väčšinou crackera tento text zavedie presne na miesto, kde sa vykonala kontrola správnosti zadaného sériového čísla. Veľmi často sa stáva, že ani nie 20 inštrukcií od tohto miesta je ďalší textový reťazec, v ktorom autor programu ďakuje za kúpu svojho produktu - v reakcii na zadanie správneho čísla. Cracker teda rýchlo prezrie tento fragment programu, upraví na správnom mieste nejakú inštrukciu (väčšinou upraví funkciu, ktorá overuje správnosť čísla) a ochrana proti kopírovaniu je vyradená.

Keygen
Samozrejme, vytvorenie cracku (malého programu, ktorý vykoná túto zmenu na počítači užívateľa) nie je jedinou možnosťou, ktorú cracker má. V prípade, že je funkcia na overovanie správnosti čísla dostatočne triviálna, môže ju preštudovať a naprogramovať takú istú. Takto vznikne tzv. keygen, teda generátor správnych registračných čísel. Užívateľ tento generátor registračných čísel spustí, napíše doň svoje meno a keygen mu vygeneruje správne registračné číslo.

Často je možné na keygen prebudovať samotnú aplikáciu. Využíva sa na to chyba, ktorej sa programátori bežne dopúšťajú: porovnávajú vygenerované správne číslo so zadaným. Drobná úprava aplikácie môže toto vygenerované správne číslo vypísať na obrazovku užívateľa.


Asi najrozšírenejšie je nelegálne obchádzanie ochrany pomocou tzv. serials – registračných čísel k programu, ktoré sa dajú nájsť na rôznych špecializovaných stránkach. Pre crackera je vytvorenie daného čísla v niektorých prípadoch otázkou zopár minút. Postupuje podobne ako pri predošlých riešeniach, ale v okamihu, keď sa porovnáva správne číslo so zadaným, cracker ho odpíše a serial je na svete.

Úvodné rady k programovaniu ochrán
Pred tým, ako sa pustíme do detailného opisu jednotlivých programovacích techník, preberieme si zopár všeobecne platných odporúčaní.

Napriek tomu, že informácia o zadaní nesprávneho registračného čísla, prípadne ďakovanie za registráciu je prakticky štandardnou súčasťou shareware programov, z hľadiska ochrany programu ide o veľkú chybu. Ako sme už spomínali, je to brána k jadru overovacieho algoritmu.

Aj keď to môže byť pre užívateľa zvláštne, z hľadiska ochrany je ideálne nezobrazovať pri pokuse o registráciu žiadne správy - ak sa zadá správne číslo, program sa odomkne, ak nie, po zadaní sa nič nestane.

Pri programovaní aplikácie je tiež vhodné zvážiť, nakoľko je potrebné daný program chrániť. Ak robíte program, ktorý bude používať len zopár ľudí a jeho registrácia je otázkou len pár sto korún, je zbytočné pracovať na ochrane dva týždne. Často stačí len dodržať pár konvencií, ktoré crackovanie trochu sťažia.

Prílišná dôvera operačnému systému
Chybou je i príliš veľká dôvera operačnému systému. Ak program v neregistrovanej verzii napríklad nemá mať možnosť ukladať dáta, programátor to často rieši tak, že príslušný prvok v menu programu nechá zašednutý a ďalej sa o nič nestará. Po registrácii programu jednoducho túto položku aktivuje a ukladanie zrazu funguje. Toto je síce elegantné riešenie, ale len do momentu, kým si človek uvedomí, ako vo Windows fungujú jednotlivé ovládacie prvky.

Nebudeme zachádzať do detailov, stačí povedať toľko, že podobne, ako je jednoduché pre programátora nejaký ovládací prvok deaktivovať, je pre crackera ľahké tento prvok znova zapnúť. Dokonca existujú špeciálne programy, ktoré daný ovládací prvok znova aktivujú a užívateľ ani nemusí byť cracker na to, aby daný program vedel použiť. Preto je dôležité si pamätať, že ak má program mať niektoré funkcie obmedzené, tieto funkcie by mali byť skutočne vypnuté a nie len neprístupné cez užívateľské rozhranie.

V nasledujúcom dieli sa pozrieme na to, ako navrhnúť dobrý generátor registračných čísel a ako tieto čísla overovať.

Diskusia 0 Príspevkov