Zaštita programskih proizvoda

Izvor: SIS Wiki
Skoči na: orijentacija, traži

Sadržaj


Uvod

„Sam pojam intelektualnog vlasništva označava posebna, specifična, prava koja imaju autori, izumitelji i ostali nositelji intelektualnog vlasništva. Intelektualno vlasništvo, znači, nije neko konkretno, materijalno vlasništvo nad nekim predmetom, već pravo odnosno skup ovlaštenja koje pravni poredak zemlje priznaje nositelju intelektualnog vlasništva.“ [1]
Intelektualni kapital je ukupnost intelektualne imovine (nematerijalne imovine) i intelektualnih potencijala tvrtke koje ona koristi za stvaranje novih vrijednosti.
Intelektualna imovina zajedno sa intelektualnim kapitalom je kumulativno znanje u posjedu tvrtke, a jedan dio te imovine je u patentima i softveru.
Rad je fokusiran na zaštitu dijela intelektualne imovine koja se odnosi na softver. S obzirom da je danas neovlašteno korištenje i neovlaštena distribucija programskog koda ogroman problem za sve proizvođače softvera, u ovom radu biti će prikazani oblici borbe protiv tog problema, od normativne zaštite, biti će obrađene tehnike reverznog inženjerstva u svrhu razumijevanja problema s tehničke strane i težine implementacije zaštite, do softverskih i fizičkih metoda sprječavanja reverznog inženjerstva, kopiranja, piratiziranja i ostalih zlouporaba.
Područje koje obuhvaća ova tematika je ogromno i problem ga je cjelovito i potpuno obuhvatiti a ne zastraniti u opsegu rada.
Razvoj brzog Interneta u svemu tome samo „pogoršava“ situaciju, procjene su da je broj ilegalnih prema legalnim kopijama softvera na tržištu u odnosu četiri prema jedan i to su podaci nad kojima se treba zamisliti.

--Mladen Hosni

Normativna zaštita

Preduvjet za kvalitetnu zaštitu softvera je definiranje zakonske osnove koja regulira autorska prava i prava korištenja autorskih djela. U nastavku su prikazani oblici pravne zaštite sa zakonima koji definiraju to područje, gdje su navedeni i pojedini članci zakona koji konkretiziraju problematiku. --Mladen Hosni

Oblici pravne zaštite softvera su :

Pravna teorija i legislativa ne prati razvoj tehnologije dovoljnom brzinom i prilagođavanje zakona novonastalim problemima je sporo. Pravni propisi su općenito definirani i teško je uklopiti specifične probleme u brzo razvijajućoj informatičkoj industriji u njih, tako da dio problema proizlazi i iz toga.

--Mladen Hosni

Reverzno inženjerstvo

„Reverzni je inženjering proces otkrivanja tehnoloških principa uređaja, objekta ili sustava kroz analizu njegove strukture, funkcije i operacije. Često uključuje podršku (npr. mehaničkih uređaja, elektroničkih komponenti ili programa) odvojeno i analiziranje njegovog rada u detalje kako bi se koristili u održavanju, ili pokušati napraviti novi uređaj ili program koji obavlja isti zadatak, bez kopiranja bilo čega od originala.

Reverzni inženjering potječe iz analize hardvera za komercijalne ili vojne potrebe. Svrha je utvrditi odluke o dizajniranju završnih proizvoda sa malo ili bez dodatnog znanja o postupcima uključenima u proizvodnju originala. Iste tehnike se trenutno istražuju za sustave aplikacija za naslijeđivanje, ne za potrebe industrije ili vojske, nego radije da bi se zamijenila netočna, nepotpuna ili na bilo koji način nedostupna dokumentacija.“[2]

Reverzno inženjerstvo kao proces ima široku definiciju primjene, od hardvera do softvera, a o ovom radu je isključivo promatrano s aspekta softvera, mogućih koristi u zaštiti programskih proizvoda i zlouporaba koje se svakodnevno dešavaju.

Proces reverznog inženjerstva definiran je našoj zakonskoj regulativi i to u Zakon o autorskom pravu i srodnim pravima – (NN 167/03) članak 110. :

Tu je definirano u članku 111. i dekompajliranje za određene potrebe. Svaki binarni zapis koji možete pokrenuti je čitljiv i u konačnici razumljiv (u protivnom ga računalo ne može izvršavati). Reverzno inženjerstvo je proces rada sa binarnim programskim kodom u svrhu razumijevanja programske logike i podataka, koji se često zloupotrebljava u svrhu postizanja bilo materijalne koristi posjedovanjem vašeg intelektualnog vlasništva bilo nanošenja štete. Pozitivne strane reverznog inženjerstva su:

Najčešće vrste zlouporaba softvera su:

Otvorena priroda konvencionalnih računalnih okruženja dozvoljava lako promatranje i izmjenu koda koji se izvršava. Za rješavanje tog problema razvijaju se različite tehnike koje otežavaju i onemogućavaju razumijevanje i promjenu izvršnog koda. Usprkos ogromnim naporima i sredstvima u zaštiti, ne postoje potpuno učinkovite metode i tehnologije koje rješavaju taj problem, već se sve svodi na donekle uspješne pokušaje zaštite, dok s druge strane reverzni inženjering pokazuje zavidne rezultate u svojim ciljevima i tu je jedino upitna motivacija, količina vremena, novca i tehnologije koji netko želi izdvojiti.

U nastavku će biti prikazane najčešće korištene tehnike reverznog inženjerstva i odgovori na te sve češće i žešće napade. Činjenica je da ima platformi i programskih jezika koji su lakši i jednostavniji za analizu i napade od drugih, a i određene platforme su češće meta napada od drugih. --Mladen Hosni

Tehnike reverznog inženjerstva

Samo reverzno inženjerstvo u ovom kontekstu je proces rada na binarnom ili prevedenom (kompajliranom) kodu programa u svrhu razumijevanja, poboljšavanja, promjene ili zlouporabe logike i/ili podataka.

Alati pomoću kojih se reverzno inženjerstvo izvodi je skup specijaliziranih softverskih programa kao što su debuggeri, disasembleri i dekompajleri pomoću kojih se ispituju sekvence instrukcija koje se izvršavaju u računalu. Ti alati i tehnike se mogu podijeliti u dvije glavne kategorije i to u alate za dinamičku analizu koja se radi kod softvera u vrijeme izvršavanja u računalu i statičku analizu koja se izvodi nad spremljenom kopijom podataka i izvršnog koda. Isto tako možemo podijeliti i set tehnika i alata koji su usmjereni na sprječavanje reverznog inženjerstva.

Osnovna podjela tehnika reverznog inženjerstva je slijedeća :

U nastavku biti će nekoliko riječi o svakoj od spomenutih tehnika.

Alati za dinamičku analizu

Debugeri

Najčešće korišteni alat u dinamičkoj analizi je debuger, koji je u ustvari alat za otkrivanje i uklanjanje grešaka za vrijeme testnog izvođenja programa. Upravo zbog njegove mogućnosti provjere memorije, podataka i datoteka koje program koristi, idealan je za reverzno inženjerstvo.

Postavljanje kontrolnih točaka (breakpoint) na kojima se izvođenje programa zaustavlja, izvođenje pojedinačnih instrukcija (stepping) kod izvođenja daje nam uvid u stanje varijabli i logiku programa nakon proizvoljnog seta instrukcija, te se na taj način relativno lako može otkriti i ugrađeni zaštitni mehanizam. Obzirom da današnji programi koriste ogroman broj instrukcija, korištenje debagera ipak traži dosta vremena za otkrivanje ranjivosti.

Damperi

Damper je vrsta softvera koja pokupi sadržaj radne memorije koji koristi određeni program nad kojim radimo analizu, te taj sadržaj spremi na disk za daljnje proučavanje. Na taj način, u kombinaciji sa ostalim alatima za reverzno inženjerstvo, može se doći do vrijednih informacija o radu programa.

Virtualni strojevi

Softverska implementacija hardvera naziva se virtualni stroj. On predstavlja izoliranu i kontroliranu okolinu u kojoj se vrlo uspješno može vršiti ispitivanje i reverzni inženjering osobito kod programa koji imaju ugrađenu zaštitu protiv debugiranja.

Ostali alati

Uobičajena je primjena u reverznom inženjerstvu i alata za praćenje registrija (kod Windows OS-a) i datotečnog sustava, mrežnog prometa, ulazno/izlaznih jedinica itd., gdje također se može doći do informacija o programskoj logici, podacima koji se spremaju, te korištenju određenih algoritama zaštite. Često se koriste i heksadecimalni editori za lakše čitanje binarnog koda itd...

Alati za statičku analizu

Disasembleri i dekompajleri

Disasembler je vrsta softvera koja čita kopiju programa spremljenog na disk i prevodi ga u asemblerski kod. Asemblerski kod je lakši za razumijevanje i analizu od heksadecimalnog ili binarnog koda. Većina debagera u sebi sadrži i opciju disasembliranja sa ili bez određenih optimizacija koda.

Dekompajler slično kao i disasembler ima funkciju prevođenja strojnog koda ali u viši programski jezik. Najčešće taj kod nije sličan originalnom kodu, ali je bit u vraćanju funkcionalnosti napadnutog programa i otkrivanju ranjivosti.

Ostali alati

Prije spomenuti heksadecimalni editori su jedan od alata koji je redoviti pratilac svih pokušaja reverznog inženjerstva. Pogodni su za traženje određenih sekvenci u izvršnom kodu, traženje stringova i ostalih interesantnih detalja za napadača. Ima tu još čitav niz alata za analizu instalacijskih paketa softvera, traženje ključeva, brute force probijanja zaštita, generatora ključeva... čije bi analiziranje odnijelo puno vremena i prostora. Može se generalno reći da je tu mašta, onih koji rade reverzno inženjerstvo, na zavidnom nivou.

Tehnike onemogućavanja reverznog inženjerstva

Osnova onemogućavanja dinamičkog reverznog inženjerstva je bazirana oko detekcije debagera, detekcije virtualnih strojeva te zaštite memorije. Kod statičkog reverznog inženjerstva zaštita se bazira oko enkripcije, maskiranja i raznih vrsta transformacija.

Onemogućavanje se može implementirati direktno, programiranjem, ili korištenjem specijaliziranih alata nezavisnih proizvođača namijenjenih zaštiti od reverznog inženjerstva.

Osnovna podjela tehnika onemogućavanja reverznog inženjerstva je slijedeća[3]:

U nastavku će biti iznijet kratak pregled nabrojenih tehnika zaštite.

Sprječavanje dinamičke analize

Detekcija debagera

Jedna od zaštitnih mjera protiv dinamičke analize programa je detekcija debagera i poduzimanje odgovarajućih protumjera. Poželjno je kod pokretanja programa provjeriti da li je debager aktivan i u tom slučaju poduzeti neke korake.

Tehnike detektiranja debagera su izvrsno dokumentirane na slijedećoj adresi [4] i njihovo detaljno opisivanje bi uzelo previše prostora. Kao protumjere, može se poduzeti niz radnji, od upozorenja, prestanka rada programa, pa do izmjene načina ponašanja programa. Detektiranje debagera je zavisno od operacijskih sustava i potrebno je dobro proučiti načine detekcije te u obzir uzeti i promjene kod novijih verzija operacijskih sustava.

Sprječavanje statičke analize

Enkripcija

„Enkripcija (engl. encription) ili šifriranje je proces u kriptografiji kojim se vrši izmjena podataka tako da se poruka, odnosno informacije, učine nečitljivim za osobe koje ne posjeduju određeno znanje (ključ).“ [5]

Enkripcijom se može dio koda zaštititi na način da se pretvori u nešto nečitljivo za svakoga tko pokuša vidjeti ili promijeniti taj dio koda. Tehnike koje se koriste su najčešće interne procedure za enkripciju/dekripciju koje su aktivne tijekom izvršavanja programa i rade dekripciju ili cijelog programa u memoriju prilikom izvršavanja ili dekriptiraju samo potrebne dijelove. Ostaje opet problem ranjivosti kod dinamičke analize a i značajna je degradacija resursa zbog intenzivnih operacija enkripcije/dekripcije.

Obsfukacija

„Obfuskacija je tehnika zaštite izvornog koda programa koja ga izmjenjuje tako da on bude teško razumljiv. Obfuskacijom, programski kod mijenja svoj izgled i postaje nerazumljiv, a funkcija mu ostaje očuvana.“ [6]

Maskiranje ili obsfukacija je tehnika kojom pokušavamo učiniti dijelove programskog koda manje razumljivima u svrhu ometanja napadača. Tu tehniku možemo raščlaniti na tri podkategorije i to leksičke transformacije, transformacije kontrolnog tijeka i transformacije podataka.

Slijedeći primjer najbolje ilustrira navedenu tehniku:

Slika 1 obsfukacija.png

Slika 1. Primjer obsfukacije (izvor: [7], strana 7)

Postoji čitav niz alata za obsfukaciju tako da se programer može koncentrirati na svoj dio posla, a na alatima je da odrade ostalo.

Leksičke transformacije

Tehnika kojom se skrivaju razni identifikatori, imena rutina, varijabli, skrivanje tekstualnih dijelova unutar programa, a sve u svrhu otežavanja analize i nalaženja ranjivosti.

Transformacije kontrolnog tijeka

Kontrolni tijek ili logika određenog dijela programa se može učiniti namjerno komplicirana ili nerazumljiva, a sve u svrhu zaštite. Razna grananja, puno petlji sa kompliciranim izračunima relativno jednostavnih matematičkih uvjeta, uvjetni skokovi bez direktnih adresa i njihovo izračunavanje i modificiranje, te razbijanje logičkih dijelova može otežati reverzni inženjering.

Transformacije podataka

Različita maskiranja i promjene načina zapisivanja (ili čak enkripcija) ulazno/izlaznih podataka ima također za cilj „zbuniti protivnika“ i ako ne onemogućiti, a ono bar usporiti pokušaje razbijanja zaštita.

Na sreću, na tržištu postoji čitav niz alata za zaštitu programskih proizvoda koji mogu ubrzati i automatizirati procese zaštite, jer ručno pisanje i implementacija zaštite traži često puno vremena. No, treba imati na umu da je većina tih alata dobro poznata i nad njma je također izvršen reverzni inženjering...

Sve te naprijed navedene tehnike se mogu koristiti pojedinačno i/ili zajedno na neograničen broj kombinacija. Izdavanje čestih novih zakrpa programa također može biti jedan od faktora koji usporava pokušaje probijanja zaštite. Uz sve to postoji i čitav spektar tehničkih mjera i uređaja za zaštitu programskih proizvoda koje treba obavezno primjenjivati. Treba uzimati u obzir i degradaciju performansi računala kod složenih modela zaštite.

U cijeloj borbi oko zaštite ostaje još jedan veliki problem, a to je dinamička analiza. Nemamo još uvijek nikakve garancije da smo time uspjeli zaštititi naš proizvod na tržištu. --Mladen Hosni

Metode zaštite softvera

Kod zaštite softvera je najveći problem primjenjivost zakonskih mjera u praksi. Neovisno kako je softver zakonski zaštićen, u praksi je teško otkriti prekršitelje i još teže dokazati krivicu. Zbog takve situacije je razvijateljima softvera lakše i „bezbolnije“ spriječiti piratstvo ugradnjom tehnoloških zaštitnih mjera u svoj softver, nego kasnije pokušavati goniti prekršitelje licenčnog sporazuma. Kod zaštite softvera koriste se različite hardverske i softverske metode. Zadaća svih tih metoda je da od korisnika zahtijevaju neku vrstu autentikacije prije nego što mu se omogući korištenje istog. Korisnik mora imati poseban hardver koji se spoji na neki od komunikacijskih portova računala (LPT, CIM ili USB) ili neku vrstu registracijske datoteke ili registracijsku šifru koju mora upisati tijekom instalacije programa. U svim tim načinima zaštite pokušava se šifrirati ili zakomplicirati izvršni kod programa tako da se onemogući razbijanje zaštite. Opisat ćemo neke od hardverskih, ali i softverskih načina zaštite programskih proizvoda.

Zaštita pomoću sklopovskog ključa (Dongle)

Zaštita pomoću sklopovskog ključa rjeđe se koristi, jer je skuplja u odnosu na programske metode zaštite. Sastoji se od toga da se sa svakom kopijom programa pakira i poseban uređaj koji se mora priključiti na neki I/O port na računalu (najčešće USB) kako bi se program mogao pokrenuti. Princip rada više-manje je jednostavan: program prilikom pokretanja šalje poruke na računalni ulaz na kojem se treba nalaziti sklopovski ključ, i ukoliko ne dobije odgovor s tog ulaza, neće se pokrenuti. Preporučljivo je kriptirati poruke koje šalju program i sklopovski ključ jedan drugome. Nešto bolja izvedba je da se na ključ stavi EPROM čip, na kojem je upisan dio kôda neophodan za rad programa, što čini bilo kakav pokušaj probijanja zaštite gotovo nemogućim, jer je u takvom slučaju (gotovo) nemoguće pokrenuti program bez odgovarajućeg ključa. Osobe koje se bave probijanjem zaštite obično su unaprijed upoznati s programskim podrškama i API pozivima, pa je puno bolje koristiti vlastiti programski kôd za ostvarivanje komunikacije sa sklopovskim ključem. Problem je s ovim načinom zaštite što postoje razni programi imitatori koji glume sklopovske ključeve (eng. emulator) za pojedine vrste. Oni imitiraju prisustvo sklopovskog ključa, te mogu prevariti program. Ukoliko ne postoji dostupan imitator, još jedan način probijanja je ubacivanje imitacijskog kôda izravno u program. Ovo se može spriječiti višestrukim CRC provjerama protiv izmjena u programu i u datoteci i u memoriji.

Funkcije u EPROM-u su enkriptirane i dekriptiraju se direktno u radnu memoriju kod izvršavanja programa. Na taj način je bez originalnog „donglea“ praktički nemoguće probiti zaštitu jer dio koda jednostavno nedostaje. Usprkos opisanim prednostima, dongle uređaji se danas skoro više uopće ne koriste, a razlozi su:

Cd protect.JPG

Slika 2. skinuta sa [8]

Zaštita pomoću instalacijskog medija

Način zaštite aplikacije gdje se softver distribuira na mediju na koji je moguće pisati podatke kao što je meki ili tvrdi disk ili izbrisivi optički disk (CD-RW). U posebnoj datoteci na instalacijskom mediju je zapisan brojač instalacija programa. Nakon svake uspješne instalacije brojač se poveća i ponovno zapiše u istu datoteku. Kad se dostigne određeni broj instalacija, program više nije moguće instalirati s tog medija. Za ispravan rad ove zaštite, datoteka s brojačem mora biti enkriptirana tako da joj je što teže promijeniti sadržaj, a sam medij mora biti što teže kopirati. Možemo reći da se ipak radi o zastarjelom pristupu zaštite te se rijetko koristi, ali ga je ipak vrijedno spomenuti.

Zaštita optičkih medija protiv neovlaštenog kopiranja

Koristi se više vrsta zaštite CD/DVD medija protiv kopiranja i svi programi koji se isporučuju na tome mediju koriste takvu zaštitu. Najjednostavniji oblik zaštite je u obliku provjere da li se ispravan medij nalazi u optičkom čitaču. Tako se može spriječiti kopiranje i pokretanje programa s tvrdog diska računala, ali je također nemoguće razlikovati originalni od ilegalno kopiranog medija. Čak i takva jednostavna zaštita je korisna jer onemogućava softverske pirate da rade tzv. „ripanje“ originalnog programa. Kompliciranije zaštite protiv kopiranja optičkih medija se obično rade tako da se na originalni medij snimi informacija koju je nemoguće kopirati pomoću komercijalno dostupnog softvera za kopiranje istih. Veliki dio softvera provjerava „labelu“ medija koji se trenutno nalazi u čitaču. Ako se za „labelu“ medija koriste nestandardni znakovi, to može zbuniti većinu softvera za kopiranje optičkih medija. Zaštita medija se često izvodi tako da se provjeri da li su na prisutne sve datoteke. Posebno se provjeravaju datoteke koje se najčešće uklanjaju prilikom „ripanja“ CD-a. Do sada se takvi način zaštite nisu pokazali posebno efikasnima. Bio je primjer zaštite medija koji je proglašen kao najjači. Da bi slučajno uklanjanje bilo omogućeno jednostavnim lijepljenjem naljepnice na određenom mjestu, a što kreator nije računao kao opciju, već se isključivo orijentirao na softverski pristup razbijanje zaštite.

Dongle usb.JPG

Slika 3. skinuta sa: [9]

Zaštita upotrebom registracijskog ključa

Najrašireniji način zaštite računalnih programa danas je zaštita pomoću registracijskog broja/ključa, odnosno serijskog broja. Programeri koriste zaštitu s registracijskim ključem na više načina, ovisno o potrebi, neki od kojih su:

Fiksna registracijska šifra

Ovo je najjednostavniji način zaštite s registracijskim ključem, iako se generalno ovaj tip zaštite kombinira s nekim drugima, koji će biti objašnjeni kasnije. Prednost je ovog načina zaštite što ispravan registracijski broj ne mora biti čuvan u memoriji za usporedbu s unesenim registracijskim brojem, jer je integriran s programskim kodom. Međutim, ovo olakšava posao probijanja, jer sve što je potrebno je saznati taj jedan i jedini, jedinstveni, registracijski ključ. Zbog toga se ovom metodom ne zaključava program u cjelini, već se zaključavaju pojedine njegove funkcije, tako da pri samom upisu registracijskog ključa točno upisan ključ ne otključava odmah cijeli program, već da se pojedini dijelovi programa otključavaju što kasnije, po mogućnosti pri pokretanju programa, ili, još bolje, tek kad se pojedina od tih funkcija koristi. Ako se funkcija dodatno enkodira nakon korištenja, onda program neće nikad biti dekodiran u memoriji u cijelosti, pa izravno dohvaćanje segmenata iz memorije pri pokušaju probijanja zaštite neće puno pomoći.

Enter key.png

Slika: primjer unosa registracijskog ključa

Promjenjiva registracijska šifra

Za razliku od prethodne metode, ovdje ne postoji jedinstveni registracijski ključ, već programer smišlja matematički algoritam kojem se kao varijable predaju informacije o korisniku koje je prethodno unio, a algoritam izračunava iz tih podataka registracijski ključ, koji se onda u memoriji uspoređuje s registracijskim ključem koji je korisnik upisao na upit. U ovom slučaju, dakle, jedinstven je matematički algoritam koji računa registracijski broj, dok je registracijski broj varijabilan. Jačina zaštite uglavnom će ovisiti o znanju programera i kompleksnosti algoritma, no ipak, ova metoda probija se relativno lako praćenjem aktivnosti memorije (jer se izračunati registracijski ključ sprema u memoriju radi usporedbe) i praćenjem izvođenja programa liniju po liniju koda, te praćenjem stanja memorijskih resursa, registara i stanja stoga. Za postizanje snažnije zaštite, može se algoritam izraditi tako da korisničko ime i registracijski broj moraju kombinirani davati određeni rezultat. Međutim, bez provjere registracijskog broja, postoji cijeli niz mogućih kombinacija koje daju traženo rješenje, pa se to može iskoristiti prilikom probijanja zaštite i izmisliti registracijski broj po vlastitoj želji. Jedno od mogućih rješenja ovog problema je da se u program implementira skriveni dodatni algoritam koji će naknadno provjeravati točnost registracijskog broja.

Serijski broj ovisan o hardveru

Ova metoda poprilično je neugodna za probijanje, jer je zavisna o računalu na kojem se instalira program, pa čak i da se uspije probiti zaštitu i napraviti piratsku verziju programa, ta piratska verzija neće moći raditi niti na jednom računalu osim onog na kojem je program probijen. Pri registraciji programa dohvaća se dodatno neki podatak s računala domaćina koji je jedinstven baš za to računalo, primjerice serijski broj tvrdog diska i sl., te se to kombinira dodatno s korisničkim imenom, nazivom kompanije itd. (da bi program smjela koristiti samo jedna osoba), i izračunava se registracijski broj pomoću posebnog algoritma, te uspoređuje s upisanim registracijskim brojem (kao u prethodnoj metodi). Veoma je bitno da se sakrije dio kôda u kojem se dohvaćaju sistemske informacije, kao i dio gdje se provjerava ispravnost registracijskog broja.

Zaštita programa pomoću registracijske datoteke

Registracijske datoteke imaju istu ulogu kao i registracijske šifre, a prednost im je količina informacija koju je moguće spremiti u njih. Registracijska datoteka može sadržavati informacije o korisniku, registracijsku šifru za autentikaciju korisnika, ključeve za dekriptiranje enkriptiranih dijelova izvršnog koda aplikacije i sl. registracijska datoteka je obično enkriptirana tako da je nemoguće pročitati i promijeniti njen sadržaj. U takvoj datoteci može biti zapisan dio izvršnog koda aplikacije tako ako datoteka ne postoji ili je neispravno dekriptirana, aplikaciji nedostaje dio koda i ne može ispravno raditi. U registracijsku datoteku je moguće pohraniti podatke o hardveru korisnikovog računala i na taj način je potrebna jedinstvena datoteka za svako računalo. Kao i kod registracijskih šifri, iz aplikacije je moguće ukloniti dio koda koji provjerava ispravnost registracijske datoteke. Kako bi se to otežalo, provjera ispravnosti datoteke se ugrađuje u više mjesta u programu i informacije u datoteci se koriste za šifriranje dijelova izvršnog koda.

Provjera ključa putem Interneta

Noviji programi koriste ovu moderniju i sofisticiraniju varijantu provjere ispravnosti registracije. Program prikuplja registracijske informacije od korisnika, zatim ih šalje na poslužitelj putem Interneta, poslužitelj provjerava podatke (uspoređuje ih s podacima u bazi podataka), te šalje izvještaj u kojem piše da li su podaci točni ili ne natrag klijentu. Nešto naprednije od ovoga je konstantna slučajna provjera registracije (što naravno zahtijeva stalnu vezu prema Internetu). Ukoliko program „sazna“ da je ilegalno registriran, šalje poruku s podacima o korisniku proizvođaču programa putem Interneta. Ovakvu verifikaciju nije uputno koristiti za bilo koji program. Pošto je za ovakvu vrstu provjere potrebna stalna veza prema Internetu, preporučljivo je ovaj tip zaštite koristiti s programima koji koriste Internet vezu u svom radu. Ovakva zaštita međutim može se probiti ako se može „uvjeriti“ program da je poslužitelj potvrdio registraciju. To bi značilo da osoba koja probija zaštitu presretne komunikaciju između programa i poslužitelja, te programu da lažne informacije. Ispravak ovog nedostatka može biti, recimo, da server uz potvrdu o uspješnoj registraciji šalje i djelić kôda potreban za rad neke enkodirane funkcije programa, ili primjerice ključ za dekodiranje tih određenih zaključanih funkcija. Ovaj tip zaštite preporučljivo je kombinirati sa zaštitom korištenjem sistemskih informacija (npr. serijski broj tvrdog diska, MAC adresu mrežne kartice, temeljem serijskog broja matične ploče...), tako da svako računalo ima svoj registracijski broj, kako se prilikom pokušaja probijanja zaštite ne bi mogao iskoristiti točan registracijski broj za otključavanje zaključane funkcije. Dobar je način da se ograniči broj upotreba registracijskog ključa na jednu.

Programi za automatsku zaštitu

Uz programersku zaštitu, koju piše i postavlja sâm programer programa koji se zaštićuje, danas postoji niz komercijalnih programa za automatsku zaštitu (trenutno na tržištu postoji preko stotinu takvih programa dostupno), koji integriraju svoje funkcije sa ciljnom aplikacijom i implementiraju generičku zaštitu, a te funkcije uključuju sve od kompresije ciljnog programa i instalacijskog paketa, kontrolirane dekompresije, enkodiranja zasebnih funkcija ili cijelog programa, automatske zaštite registracijskim ključem, kriptiranja ključa, vremenskih ograničenja, pa do korištenja trikova sprečavanja praćenja izvođenja programa (eng. antidebugging) i sprečavanja dohvaćanja asemblerskog kôda iz izvršne datoteke (eng. antidisassembling). Ovakvi programi namijenjeni su programerima koji nisu dovoljno vješti u implementiranju vlastite programske zaštite, ili jednostavno nemaju vremena ili volje truditi se previše oko ovog segmenta razvoja programskog proizvoda. Jasna je stvar da je i dalje najbolja zaštita originalna zaštita izrade od strane programera, uz pretpostavku da je programer dovoljno vješt u području zaštite i da zna što radi (što najčešće nije slučaj). Razlog tomu je što je dosta ljudi iskusnih u probijanju zaštite često upoznato s funkcionalnostima postojećih komercijalnih programa za automatsku zaštitu, pa uz informaciju koji je program korišten za svrhu zaštite, znaju gdje potražiti slabu točku. Ujedno, po Internetu kruže i programi za automatsko probijanje ovakve zaštite, pa i to predstavlja svojevrstan problem. No, opet, kakva god bila situacija, među velikim brojem ovih programa, postoje neki koji, uz pametno korištenje, nude vrhunsku zaštitu koju je iznimno teško probiti. Neki od programa za zaštitu su „SafeNet“, „ExeShield“, „StarForce“... --Dejan Drabić

Zaključak

Krađa softvera usporava IT inovacije, otvaranje novih radnih mjesta i ekonomski rast. Neovisno o tome što je zakonski definirano intelektualno vlasništvo te što je normativno kao takvo zaštićeno, a kako je izuzetno teško ući u trag kradljivcima, razvijateljima ostaju jedino mogućnosti primjene metoda i tehnika zaštite svojih programskih proizvoda. Same tehnike svode se na već poznata rješenja, kako hardverska, tako i softverska. No, odabir istih vezan je ponajviše uz financijsku isplativost, potrebom obzirom na raširenost softvera ili autorovim nadahnućem, odnosno željom da utroši više resursa na zaštitu. Kako su metode „krekiranja“ sve lakše, a dostupnost putem Interneta doista sveprisutna, ostaje ipak pozitivna činjenica novih mogućnosti korištenja tih tehnologija i u sferi zaštite. Tako će autori koja svoja rješenja nude putem oblaka imati ipak lakšu kontrolu i manju potrebu zaštite, a obzirom na uslužni aspekt, tako će oni drugi koji izdaju instalacije imati prigodu iskoristiti internet kao komunikacijski alat zaštite svojih programa. Sama hardverska zaštita jest dobra, ali ipak za usko specijaliziran softver, obzirom da je autorima uvijek interes što lakše distribucije proizvoda, pa time takav vid zaštite rjeđe susrećemo. Kombinacija korištenja web servisa također je dobar dio moguće implementacije zaštite, jer tako se jedan dio funkcionalnosti može uvijek držati na strani autora, a koji je neophodan korisniku kako bi aplikacija funkcionirala. Tako ukraden softver ne bi ispravno funkcionirao. Što opet nije praktično za aplikacije tipa AutoCad i slično. Iz svega vrijedi zaključiti kako ne postoje apsolutne tehnike zaštite programskih proizvoda te kako je i svijest potrošača bitan faktor u sprečavanju krađe. --Dejan Drabić

Literatura

Autori

Mladen Hosni Dejan Drabić

Osobni alati
Imenski prostori
Inačice
Radnje
Orijentacija
Traka s alatima