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. 🙂
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
Ř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 😉
🙂 venuju. Prece jen je to uz 7 let.