Java: Jak se branit proti crackingu

Jak uz tady nekolikrat padlo, delam s nekolika dalsimi bloggery ve volne case na komercnim pluginu do Eclipse. Java ochrany jsou z vlastni podstaty “mekke” a i pro zacinajiciho programatora je otazkou chvilky dekompilovat a najit spravne misto provadejici kontrolu licence a tu pripadne prepsat, prekompilovat a pak uz se jen smat. Ani sebelepsi obfuscator neobstoji, protoze za

a) zmeny jsou vetsinou trivialni (zmena jmen, hranic u cyklu apod.)

a za

b) podle pravidla kazda svine ma sveho reznika crackerovi pomuze nejake sikovne IDE s refactoringem
pripadne primo deobfuscator.

Ve jmenu “jestli to das, tak si ten soft fakt zaslouzis zadarmo” jsem se rozhodl danemu crackerovi jeho cinnost zneprijemnit.

Stit sestava ze dvou casti – zakryptovana trida (RSA) – rikejme ji Checker a custom SecurityClassLoader, ktery obdrzi jmeno tridy a nami dodany certifikat provede dekryptaci a tridu naloaduje. Checker provede zpetny check validity certifikatu (expiration date) – cimz se snazim zajistit pravidelny upgrade na novou verzi. Dale pak tato trida ob>sahuje aplikacni logiku, tedy vic nez jen pouhy check. Tim se postarame o to, aby vytvoreni fake dvojnika bylo co nejtezsi.

Slabe misto: classloader. Utocnikovi nic nebrani v tom, vzit dany kus kodu, ktery dekryptuje tridu, provest si dekryptaci
sam, vytvorit dvojnika (musi, protoze je tam prave ta aplikacni logika), vesele prepsat classloader a naloadovat si vlastni upravenou classu nebo rovnou dat tu upravenou classu do classpathy a volani classloaderu zrusit.

Protiobrana 1 (slabsi): asi se shodneme, ze nejcastejsim uzitym dekompilerem je jad. Ten v sobe obsahuje chyby, a tak
generuje nevalidni zdrojaky pro inner classy a dalsi. Pokud tyto chyby zname, zamerne dane konstrukce v Checkeru pouzijeme.

Protiobrana 2 (tuzsi): pokud nevyzadujeme portabilitu, tak napiseme Checker nativni napr. v C++ nebo jeste lepe v Delphi, proste v jazyce, ke kteremu tech dekompileru moc neni. Tim crackera prinutime pripadne si i neco nastudovat.

Protiobrana 3 (nejtuzsi) : Vezmeme pajku, nandy, usb konekturek a ten Checker si vyrobime HW.

Zatim to u me vyhrava Stit + Protiobrana 1. Schema mam zatim na papire a castecne rozpracovano, proto budu vdecny
za jakykoliv prinosny komentar. Internetove reseni ala Steam od Valve jsem vyloucil, chtel bych to mit vsechno offline a i tak i to se da cracknout.

Zaverem snad jen tolik, ze sikovny clovek se dostane pres jakoukoliv ochranu, ale proc mu to alespon nestizit a trochu ho nezabavit, hada. 🙂

3 thoughts on “Java: Jak se branit proti crackingu

  1. Dagi

    Tady je IMHO nevyhoda dana systemem classloaderu. Kdyby existoval obecny classloader, ktery by fungoval na principu, ze pri kazdem loadu tridy by kontroloval jeji digitalni podpis. Ale i tak by to slo asi obejit, pokud by ty tridy odebral potencialni utocnik z classpath, pka by se teoriticky mohl zapojit podstrceny classloader. Jinak samzorejme souhasim s poslednim odstaveckem

  2. Opravdový odborník :-)

    Řešíte blbosti, tenhle problém z principu nemá řešení a je to jen ztráta času. Věnujte se raději užitečnějším věcem 😉

Comments are closed.