osmišljavanje i realizacija zaštite softverameđu njima postoji nekoliko tipova hardverskih...

35
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA DIPLOMSKI PROJEKT Osmišljavanje i realizacija zaštite softvera Nikola Brežnjak Voditelj: prof.dr.sc. Nikola Bogunović Zagreb, siječanj, 2010.

Upload: others

Post on 26-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

SVEUČILIŠTE U ZAGREBUFAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

DIPLOMSKI PROJEKT

Osmišljavanje i realizacija zaštite softvera

Nikola BrežnjakVoditelj: prof.dr.sc. Nikola Bogunović

Zagreb, siječanj, 2010.

Page 2: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

Sadržaj1. Uvod...................................................................................................................................2

2. Vrste zaštita.......................................................................................................................32.1. Zasnovana samo na softveru................................................................................................32.2. Mrežno licenciranje...............................................................................................................42.3. Hardverska zaštita ...............................................................................................................4

3. Razvoj koncepta zaštite softvera.......................................................................................63.1. Scenarij namjene zaštite.......................................................................................................63.2. Idejni koncept zaštite............................................................................................................6

4. Implementacija zaštite.......................................................................................................84.1. Desktop aplikacija.................................................................................................................8

4.1.1. Aktivator........................................................................................................................................94.1.2. Fizički broj tvrdog diska...............................................................................................................114.1.3. Kriptiranje i dekriptiranje podataka..............................................................................................124.1.4. Pisanje i čitanje iz DLL datoteke.................................................................................................134.1.5. Dodatne funkcije.........................................................................................................................15

4.2. Ugradnja u postojeću aplikaciju..........................................................................................164.3. Web aplikacija....................................................................................................................17

4.3.1. Aktivacija ....................................................................................................................................184.3.2. Administracija..............................................................................................................................21

5. Pokretanje programa.......................................................................................................255.1. Instalacija XAMPP-a...........................................................................................................255.2. Otpakiravanje ....................................................................................................................295.3. Rezervacija poslovnice.......................................................................................................30

6. Zaključak..........................................................................................................................33

7. Literatura..........................................................................................................................34

Page 3: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

1. UvodBorba između zaštite softvera (engl. Software protection) i piratstva (engl. piracy) postoji

oduvijek, te čim netko objavi neku novu tehnologiju zaštite softvera, ostaje samo pitanje vremena

kada će ta nova tehnologija biti probijena (engl. cracked). Nažalost, to je stvarnost u kojoj danas

živimo i apsurdno je reći da je neki softver, tj. njegova zaštita neprobojna. Međutim, ni jedna od

zaraćenih strana se ne predaje, te se stalno osmišljavaju nove zaštite koje opet, prije ili kasnije,

bivaju probijene i tako u nedogled. Jedini zadatak koji preostaje softverskim programerima je da

poboljšavaju zaštitu svojeg softvera, te ga tako učine težim za probijanje. Postoji ravnoteža između

zaštite softvera i piratstva. Naime, ukoliko cijena probijanja neke zaštite prelazi cijenu samog

softvera tada probijanje postaje besmislen posao, jer nikome nije u interesu probijati softver čija je

cijena npr. 20 kuna.

Gledajući s druge strane, možda ne bismo trebali dopustiti da piratstvo totalno nestane.

Naime, piratiziran softver na neki način omogućuje prodavačima softvera da kultiviraju tržište. Npr.

treba postaviti pitanje tko je kupac skupog softvera (Catia, Autocad, Maya, itd.) koji se koristi u

specijaliziranim industrijskim poslovima. Da li je to neka tvrtka, institut, sveučilište, fakultet ili

samo siromašni student programer? Odgovor je jednostavan. Pravi kupci su oni ljudi koji mogu

kupiti softver, tj. koji si ga mogu priuštiti, dok oni koji si ga ne mogu priuštiti predstavljaju samo

potencijalne kupce. Dopuštati takvim ljudima da koriste piratiziran softver i nije tako loša odluka,

jer bi ga oni mogli kupiti u budućnosti. Bilo kako bilo, činjenica je da je piratizacija veoma ozbiljan

problem, što potkrepljuje podatak da su gubici industrije zbog softverskog piratstva u Hrvatskoj

tijekom 2008. porasli na 427 milijuna kuna.

U ovom radu su prvo opisane neke danas poznate vrste zaštita, dok su u sljedećim

poglavljima opisani osnovni koncepti moje implementacije zaštite softvera sa popratnim

objašnjenjem same implementacije. Nadalje, opisane su detaljne upute za korištenje moje

implementacije zaštite softvera, te je na kraju dan zaključak i popis literature.

2

Page 4: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

2. Vrste zaštitaGlavna namjena zaštite softvera je da se onemogući neautorizirano korištenje softvera, pa

stoga možemo reći da je bilo koja metoda ili akcija u cilju sprječavanja neautoriziranog korištenja

softvera u biti zaštita softvera. Zaštita softvera se može podijeliti u tri glavne skupine:

● zasnovana samo na softveru (engl. Software based)

● mrežno licenciranje (engl. On-line license)

● hardverska zaštita (engl. Hardware dongle)

2.1. Zasnovana samo na softveruOva vrsta zaštite je zasnovana samo na softveru, bez dodatnih meta podataka, i sva logika

provjere se nalazi u dotičnoj aplikaciji. Tipični predstavnici ovakvih tipova zaštita su serijski

brojevi (engl. Serial numbers) i softverske omotnice (engl. Software packers).

Kod zaštite serijskim brojevima korisnici mogu koristiti softver samo u slučaju da posjeduju

ispravan serijski broj. Prednost ovakve zaštite je jednostavnost implementacije i niska cijena, a

nedostatak je taj da njezino probijanje predstavlja lagan posao za hakere. Ukoliko haker pronađe

autentifikacijski kod, može ga invertirati (engl. Reverse) i napraviti generalni program za probijanje

zaštite (engl. Cracker).

Softverske omotnice su također česti oblik zaštite softvera, jer se lako implementiraju bez

dodatnog programiranja. Softverski inženjeri moraju provući svoj program kroz program softverske

omotnice i na taj način u samo nekoliko klikova mišem dobivaju zaštićen softver. Na Internetu

postoje besplatni programi (npr, .NET Reflector, http://www.red-gate.com/products/reflector/) koji

omogućuju dekompajliranje (engl. Decompilation) izvršnih datoteka, čime je moguće dobiti potpuni

uvid u cijeli izvorni kod programa. Stoga u ovu kategoriju spadaju i takozvani obfuskatori (engl.

Obfuscators) koji posebnim algoritmima otežavaju čitanje izvornog koda programima za

dekompajliranje. Visual Studio programska okolina dolazi sa ugrađenim obfuskatorom, međutim ta

se zaštita također na veoma lak način zaobilazi. Postoje i neka komercijalna rješenja implementacije

obfuskatora, od kojih je najpoznatiji program .NET Spices (http://www.9rays.net).

Prednost zaštite temeljene samo na softveru je cijena, jer je generalno gledano relativno

jeftina. Dok je, s druge strane, očevidan nedostatak jednostavnost probijanja takve zaštite. Kao što

je već spomenuto, ni jedna zaštita nije neprobojna, te ako se sva zaštita softvera ostavi na strani

Page 5: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

Osmišljavanje i realizacija zaštite softvera

krajnjeg korisnika u aplikaciji koju on koristi, tada je sve otvoreno za hakere, kojima je potrebno

samo vrijeme da probiju tu zaštitu. U tablici 2.1 su sažeto prikazane dobre i loše strane zaštite

zasnovane samo na softveru.

Tablica 2.1. Dobre i loše strane zaštite zasnovane samo na softveru

Dobro LošeJednostavna implementacija Jednostavno probijanje

Jeftin razvoj Slaba kontrola licenci- Jednostavno piratiziranje

2.2. Mrežno licenciranjeZaštita temeljena na mrežnom licenciranju ima širok spektar primjene, kao npr. kod mrežne

aktivacije (engl. On-line activation) Windows XP operacijskog sustava. Ovakva vrsta zaštite mora

imati implementiran poslužitelj za licenciranje (engl. License server), koji sadrži bazu podataka sa

licencama, odnosno aktivacijskim ključevima. Poslužitelj za licenciranje predstavlja glavno središte

licenciranja. Zbog potrebe za dodatnim poslužiteljem, potreban je i početni budžet koji će pokriti

troškove nabave tog poslužitelja.

U usporedbi sa zaštitom zasnovanom samo na softveru, mrežno licenciranje je bolje jer

pruža bolju sigurnost i prikladnije opcije licenciranja. Međutim, cijena implementacije je veća kod

mrežnog licenciranja, a uz to inicijalna investicija u poslužitelj je obavezna. Ovaj oblik zaštite je

dobar za velike softverske kuće, koje prodaju više od 5000 kopija na godinu i koje trebaju visok

stupanj kontrole nad licencama. U tablici 2.2 su sažeto prikazane dobre i loše strane zaštite

zasnovane na mrežnom licenciranju.

Tablica 2.2. Dobre i loše strane mrežnog licenciranja

Dobro LošeJednostavna implementacija Jednostavno probijanje

Relativno jeftin razvoj Rigidne sheme zaštiteCentralizirana kontrola licenci Relativno visok početni ulog

2.3. Hardverska zaštita Ova vrsta zaštite je najbolja, ali ni ona nije neprobojna. Postoji nekoliko vrsta zaštitnih

shema kod hardverske zaštite:

4

Page 6: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

2. Vrste zaštita

● moduli (npr. kod Office paketa možete kupiti samo Word)

● vrijeme trajanja (npr. sat vremena program nudi sve funkcije, a nakon toga treba

kupiti program)

● broj pokretanja (npr. program se može pokrenuti 10 puta, a nakon toga treba kupiti

program)

● prisutnost hardverskog ključa (npr. provjera da li se USB hardverski ključ nalazi u

USB utoru računala)

Postoji oko 20 proizvođača koji nude hardversku zaštitu, a neki od poznatijih su Aladdin

(http://www.Aladdin.com), WIBU (http://www.WIBU.com), UniKey (http://www.eSecuTech.com).

Među njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako

imamo:

● LPT – paralelni port računala

● PS/2 – priključak za miš

● Serijski priključak

● USB – najčešća verzija

● PCI kartica

Uz sve prednosti koje nudi hardverska zaštita softvera, ipak je upitna njezina upotrebljivost

zbog visoke cijene (oko 500 kn) naprema cijeni softvera i broja raspoloživih USB utora na

korisnikovom računalu. U tablici 2.3 su navedene dobre i loše strane hardverske zaštite.

Tablica 2.3. Dobre i loše strane hardverske zaštite

Dobro LošeRelativno dobra zaštita Visoka cijena

Veći prihodi Dulje vrijeme isporukeFleksibilne sheme zaštite Potrebno znanje programiranja

5

Page 7: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

3. Razvoj koncepta zaštite softvera3.1. Scenarij namjene zaštitePrije nego krenem sa objašnjavanjem svojeg koncepta zaštite softvera, potrebno je napraviti tzv.

"scenarij" za koji je ova zaštita zamišljena:

"Pretpostavimo da radimo zaštitu za neku tvrtku (naziva npr. Ctim), koja nudi svoje

softversko rješenje za upravljanje radom kladionice. Kada neka kladionica kupi njihov

softver, tada se dotična kopija softvera na neki jedinstven način mora povezati sa brojem

poslovnice. Dodatno, dopušteno je da se softver instalira na zadani broj računala unutar

jedne poslovnice. Zaštita mora imati implementirano grafičko sučelje dostupno putem Web

preglednika, pomoću kojeg se na jednostavan način dodaje nova poslovnica i broj

dopuštenih računala u poslovnici. Nakon uspješne instalacije kladionica mora aktivirati

kupljeni softver unošenjem broja poslovnice čiji se rad želi aktivirati. Broj poslovnice, koji

je prethodno dogovoren elektroničkom poštom, unosi administrator tvrtke Ctim putem Web

sučelja zaštite. Pretpostavlja se da tvrtka Ctim posjeduje dodatni poslužitelj pomoću kojega

će se ostvariti koncept poslužitelja za licenciranje."

3.2. Idejni koncept zaštitePrema navedenim zahtjevima odlučio sam napraviti zaštitu temeljenu na modelu mrežnog

licenciranja opisanog u poglavlju 2.2. Zaštita se sastoji od dva dijela. Prvi dio je izrada desktop

aplikacije koja će generalno služiti za unos broja poslovnice u cilju aktivacije softvera nakon

instalacije. Također, desktop aplikacija će u svojoj pozadini sadržavati svu logiku za dohvaćanje

jedinstvenog broja računala koji će se koristiti za praćenje računala na kojima je instalirana pojedina

kopija softvera. Zbog toga što je pojedina kopija softvera uparena sa određenim brojem poslovnice i

brojem računala u poslovnici na koji je dozvoljeno instalirati softver, nije moguće instalirati softver

u drugoj poslovnici.

Drugi dio je izrada Web aplikacije kojom se ostvaruje implementacija koncepta poslužitelja

za licenciranje. Naime, preko Web sučelja administrator tvrtke Ctim će biti u mogućnosti

pregledavati postojeće aktivacije, unositi i mijenjati zapise o pojedinoj aktivaciji softvera, broju

dopuštenih računala unutar jedne poslovnice i sl.

6

Page 8: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

3. Razvoj koncepta zaštite softvera

Idejni koncept zaštite je prikazan na slici 3.1. Windows aplikacija koja se želi zaštititi (u

našem slučaju softver za upravljanje radom kladionice) prije samog pokretanja poziva aktivator

formu koja putem Interneta na poslužitelj za licenciranje šalje kriptirani broj poslovnice (brP),

kojeg unosi tehničar koji vrši instalaciju softvera u poslovnici, i kriptirani fizički broj tvrdog diska

(fbHDD) koji predstavlja jedinstvenu identifikaciju računala. Aplikacija na poslužitelju prihvaća

podatke, dekriptira ih i provjeri da li u bazi postoji odgovarajući zapis, te vraća MD5 zapis od

primljenog dekriptiranog broja poslovnice i fizičkog broja diska. Aktivator forma nakon toga

provjerava primljeni MD5 zapis sa zapisom koji je aplikacija sama izračunala i ako se oni

poklapaju, tada se još jedanput šalje par brP i fbHDD na poslužitelj, gdje se ažuriraju potrebne

tablice i vraća zapis "success" ako je aktivacija uspješno provedena. Nakon toga se stvara

odgovarajuća DLL (Dynamic Link Library) datoteka u kojoj su zapisani potrebni podaci (brP i

fbHDD) i softver nastavlja s normalnim izvođenjem. Nakon nekog novog pokretanja provjerava se

da li postoji odgovarajuća DLL datoteka sa potrebnim podacima, a kao dodatak na svaki deseti klik

odabrane funkcijske tipke logika aplikacije radi tako da se spaja na poslužitelj za licenciranje i

provjerava valjanost korištenog softvera, čime je još dodatno pojačana zaštita.

7

Slika 3.1. Idejni koncept zaštite

WINDOWS APLIKACIJA

WEB SERVERaktivacija.php

MD5

kriptirani brPi fbHDD

success

aktivacijaUspjela.php

kriptirani brPi fbHDD

Page 9: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

4. Implementacija zaštite4.1. Desktop aplikacija

Sadržaj priloženog C# projekta nbZastita je prikazan na slici 4.1.

Objašnjenje pojedinih datoteka:

● Form1.* – datoteke koje definiraju početnu formu glavnog programa – potrebno je

napomenuti da je ova forma uključena u projekt zbog demonstracije samog

korištenja i implementacije zaštite, te kao takva ne sadrži nikakvu drugu "korisnu"

funkcionalnost

● Aktivator.* – datoteke koje sadrže svu logiku aktivatora

● ProvjeriAkt.cs – klasa za dodatnu provjeru zaštite

● Konfiguracija.cs – klasa koja služi za pisanje i čitanje postavki iz XML (eXtended

Markup Language) datoteka

● RC4* – klase implementacije RC4 kriptografskog sustava

8

Slika 4.1. Sadržaj projekta nbZastita

Page 10: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

4. Implementacija zaštite

● DriveInfoEx.dll – biblioteka koja služi za dohvaćanje fizičkog broja diska

(objašnjenje na http://www.codeproject.com/KB/mcpp/DriveInfoEx.aspx)

● GlassButton.dll – biblioteka kojom se ostvaruje lijep izgled funkcijskih tipki

4.1.1. AktivatorIzgled aktivator forme je prikazan na slici 4.2.

Cijeli postupak aktivacije se pokreće klikom na funkcijsku tipku Aktiviraj!. Da se

cijelo korisničko sučelje ne bi zablokiralo prilikom procesa aktivacije, sav je programski kôd

stavljen u backgroundWorker objekt čiji su opis i implementacija dostupni na Internet stranici

http://nerdparadise.com/tech/coding/csharp/backgroundworker/.

C# kôd koji se obrađuje nakon klika na tipku Aktiviraj! je sljedeći:

List<string> fbHDDs = dohvatiFbHDD();string brP = tbBrPoslovnice.Text.Trim();if (brP == null)return; //pogresno unesen broj poslovnice

// ako i jest više diskova, MD5 se generira samo za slučaj diska[0] string ukupniSerijskiBroj = fbHDDs[0] + brP; string generiraniMD5 = generirajMD5(ukupniSerijskiBroj); //kriptirati dobivene brojeve i takve ih poslati na server string kljucZaRC4 = "c01t.,I{M}"; string fbHDDkript = kriptiraj(kljucZaRC4, fbHDDs[0]); string brPkript = kriptiraj(kljucZaRC4, brP); string primljeniMD5 = posaljiNaServer(fbHDDkript, brPkript); if (primljeniMD5 == generiraniMD5) { string serverReturn = posaljiNaServerUspjelo(fbHDDkript,brPkript); if (serverReturn == "success") { this.DialogResult = DialogResult.OK; if (writeToDll(FILE, '1'))

MessageBox.Show(new Form() { TopMost = true }, "Zahvaljujemo Vam na kupnji!", "Aktivacija aplikacije",MessageBoxButtons.OK, MessageBoxIcon.Information);

} else { MessageBox.Show(new Form() { TopMost = true }, "Greška prilikom

provjere aktivacije, molimo Vas da nas kontaktirateputem maila.", "Aktivacija aplikacije", MessageBoxButtons.OK,MessageBoxIcon.Error);

9

Slika 4.2. Izgled aktivator forme

Page 11: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

Osmišljavanje i realizacija zaštite softvera

} this.Close(); } else { if (primljeniMD5 == "1") { MessageBox.Show(new Form() { TopMost = true }, "Pogrešno unesen broj

poslovnice, molimo pokušajte ponovno.", "Aktivacija aplikacije", MessageBoxButtons.OK, MessageBoxIcon.Error);

} else if (primljeniMD5 == "2") { MessageBox.Show(new Form() { TopMost = true }, "Preveliki broj

pokušaja instalacije, molimo javite nam se mailom!", "Aktivacijaaplikacije", MessageBoxButtons.OK, MessageBoxIcon.Error);

} else if (primljeniMD5 == "3") { MessageBox.Show(new Form() { TopMost = true }, "To računalo je već

prijavljeno!", "Aktivacija aplikacije", MessageBoxButtons.OK,MessageBoxIcon.Error);

} else { MessageBox.Show(new Form() { TopMost = true }, "Greška broj 666.

Molimo javite nam se mailom u vezi ove greške!", "Aktivacijaaplikacije", MessageBoxButtons.OK, MessageBoxIcon.Error);

Application.Exit(); } }

Objašnjenje koda po koracima:

1. u varijablu fbHDDs se spremi fizički broj diska

2. u varijablu brP se spremi uneseni broj poslovnice

3. napravi se varijabla ukupniSerijskiBroj koja sadrži spojene vrijednosti

varijabli fbHDDs i brP4. generira se MD5 varijable ukupniSerijskiBroj, i sprema u varijablu

generiraniMD55. varijable fbHDDs i brP se kriptiraju RC4 algoritmom, te šalju na poslužitelj za

licenciranje pomoću funkcije posaljiNaServer, a povratna vrijednost te

funkcije se sprema u varijablu primljeniMD56. ako se MD5 vrijednost kojeg vrati poslužitelj poklapa sa vrijednošću MD5 zapisa

kojeg je izračunala aplikacija, tada se podaci (kriptirani fbHDDs i brP) još jedanput

šalju na poslužitelj funkcijom posaljiNaServerUspjelo, čime je

implementiran takozvani protokol rukovanja (engl. Handshake protocol)

7. ako funkcija posaljiNaServerUspjelo vrati zapis "success" program

izrađuje DLL datoteku u koju zapisuje fizički broj diska i podatak o aktiviranosti

10

Page 12: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

4. Implementacija zaštite

4.1.2. Fizički broj tvrdog diskaKod bilo koje implementacije zaštite softvera potrebno je na neki način povezati jednu

kopiju softvera sa jednim računalom, te je stoga potrebno pronaći jedinstveni identifikacijski broj

računala koji će se povezati sa tom dotičnom kopijom softvera. U većini slučajeva je taj

identifikacijski broj uzet od tvrdog diska (engl. Hard disk). Postoji nekoliko brojeva koji se mogu

dobiti od samog tvrdog diska, ali nas zanima samo onaj broj koji se ne mijenja čak niti prilikom

formatiranja cijelog tvrdog diska. Taj broj je poznat pod nazivom fizički broj tvrdog diska.

Na Internetu postoji nekoliko slobodno dostupnih biblioteka za dohvaćanje fizičkog broja

tvrdog diska, međutim sve biblioteke ne podržavaju sve Windows operacijske sustave, pa sam stoga

uz korištenu slobodnu biblioteku napisao svoj dio kôda koji provjereno radi na Windows

operacijskim sustavima Windows 98, Millenium, XP, Vista i Windows 7. Kôd funkcije za

dohvaćanje fizičkog broja tvrdog diska je sljedeći:

private List<string> dohvatiFbHDD(){

List<string> serijskiBrojevi = new List<string>(); DriveListEx driveInfo = new DriveListEx(); driveInfo.Load(); if (driveInfo.Count == 0) //drugi nacin, ali mora biti administrator! {

String query = "SELECT * FROM Win32_DiskDrive"; foreach (ManagementObject item in new ManagementObjectSearcher(query).Get()) {

string serialNumber = Convert.ToString(item["SerialNumber"]); if (serialNumber.Length > 2) { serialNumber = srediSerijskiDiska(serialNumber); serijskiBrojevi.Add(serialNumber.Trim()); } } } else { // ovaj dio koda radi pod xp-om, ali ne i na visti... string serijskiBroj = string.Empty; foreach (DriveInfoEx drvInfo in driveInfo) { serijskiBrojevi.Add(drvInfo.SerialNumber.Trim()); } } // prije toga iz liste izbaciti prazne brojeve serijskiBrojevi.Remove(""); //za svaki slucaj ako se ne nadje nikako fbHDD if (serijskiBrojevi.Count == 0) serijskiBrojevi.Add("012345654321"); return serijskiBrojevi;}

Funkcija dohvatiFbHDD koristi tri načina dohvaćanja fizičkog broja tvrdog diska. Prvi je

pomoću slobodno dostupne biblioteke DriveInfoEx.dll, čiji se kod nalazi unutar else uvjeta,

a njezino korištenje i implementacija su opisani na stranici http://www.codeproject.com/KB/mcpp/

DriveInfoEx.aspx. Međutim, ta biblioteka se pokazala neučinkovitom na Microsoft Windows Vista

11

Page 13: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

Osmišljavanje i realizacija zaštite softvera

operacijskom sustavu, pa se stoga koristi dodatni WMI (Windows Management Instrumentation,

detaljnije na http://msdn.microsoft.com/en-us/library/aa394582(VS.85).aspx) sistemski poziv.

Funkcija iz biblioteke DriveInfoEx.dll čita fizički broj po jednom principu, a WMI

funkcija po drugom. Brojevi koji se pročitaju su jednaki, razlika je samo ta što su jedni u little

endian formatu (http://en.wikipedia.org/wiki/Little_endian), a drugi u big endian formatu

(http://en.wikipedia.org/wiki/Big_endian), pa se stoga koristi sljedeća funkcija za normiranje tih

brojeva:

private string srediSerijskiDiska(string input){

if (input.Length < 2) return input; string returnValue = string.Empty;

char[] charArray = input.ToCharArray(); for (int i = 0; i < charArray.Length; i += 2) {

string rezChar = charArray[i].ToString() + charArray[i + 1].ToString(); int rezCharInt = Int32.Parse(rezChar,

System.Globalization.NumberStyles.HexNumber); returnValue += Convert.ToChar(rezCharInt); } // sad jos treba zamijeniti parove bajtova, jer ih neko krivo cita string noviReturn = string.Empty; for (int i = 0; i < returnValue.Length; i += 2) // i = i + 2 jer se uzima svaki 2. {

noviReturn += returnValue[i + 1]; noviReturn += returnValue[i]; } return noviReturn;}

Ako se fizički broj diska ne može dohvatiti ni na jedan od opisanih načina, tada funkcija

vraća broj 012345654321, što je bolje nego da ne vrati ništa, jer time omogućava dalji nastavak

izvođenja aktivacije, a sam administrator će znati za taj broj i zbog čega je on takav, te će na

temelju toga moći poduzeti daljnje akcije.

4.1.3. Kriptiranje i dekriptiranje podatakaBudući da se podaci iz Windows aplikacije prenose Internet mrežom do poslužitelja za

licenciranje, postoji mogućnost prisluškivanja i presretanja tih podataka, te je stoga te podatke

potrebno kriptirati. Funkcije za kriptranje i dekriptiranje su jednostavne i imaju svega nekoliko

linija kôda:

private string kriptiraj(string kljuc, string podatak){

RC4Engine rc4 = new RC4Engine(); rc4.EncryptionKey = kljuc; rc4.InClearText = podatak; rc4.Encrypt(); return rc4.CryptedText;}

12

Page 14: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

4. Implementacija zaštite

Funkcija za kriptiranje prima dva argumenta, varijablu kljuc koja služi za kriptiranje

podataka i varijablu podatak koja predstavlja niz znakova koji se kriptiraju. Na početku se

instancira objekt klase RC4Engine koji pruža funkcionalnost rada sa RC4 kriptografskim

algoritmom. Nakon toga se popune varijable objekta, tj. ključ za kriptiranje i podatak koji se

kriptira. Na kraju se pozivom članske funkcije instance objekta obavlja kriptiranje podatka, čiji se

rezultat vraća kao rezultat funkcije. Funkcija dekriptiraj ima sličnu sintaksu, uz razliku da se

kod nje radi obrnuti postupak, tj. kriptirani podatak se pretvara u ljudima čitljiv niz znakova. Kôd

funkcije dekriptiraj je sljedeći:

private string dekriptiraj(string kljuc, string podatak){ RC4NonHex rc4 = new RC4NonHex(); rc4.EncryptionKey = kljuc; rc4.CryptedText = podatak; rc4.Decrypt(); return rc4.InClearText;}

Dodatna zaštita ostvarena je sažimanjem podataka koristeći MD5 algoritam. Implementacija

tog algoritma je također jednostavna, jer .NET okruženje ima gotovu klasu koja implementira

funkcionalnost MD5 algoritma. Kôd funkcije za sažimanje je sljedeći:

private string generirajMD5(string ulaz){ System.Security.Cryptography.MD5CryptoServiceProvider x = new

System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] data = System.Text.Encoding.ASCII.GetBytes(ulaz); data = x.ComputeHash(data); string ret = ""; for (int i = 0; i < data.Length; i++) ret += data[i].ToString("x2").ToLower(); return ret;}

Funkcija generirajMD5 kao argument prima varijablu ulaz koja predstavlja niz

znakova od kojih treba napraviti sažetak. Na početku se inicijalizira instanca klase

MD5CryptoServiceProvider koja pruža funkcionalnost rada sa MD5 algoritmom. U

varijablu data se sprema bitovna reprezentacija ulazne varijable ulaz i izračunava njezin sažetak.

Pomoćna varijabla ret se koristi kako bi se iz bitovne reprezentacije ulazne varijable ulaz dobila

varijabla tekstualnog tipa, koja se na kraju vraća kao rezultat funkcije.

4.1.4. Pisanje i čitanje iz DLL datotekeKod uspješne aktivacije aplikacije izrađuje se DLL datoteka iz koje se onda prilikom svakog

ponovnog pokretanja čitaju podaci o valjanosti. Kôd funkcije za pisanje u DLL datoteku je sljedeći:

13

Page 15: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

Osmišljavanje i realizacija zaštite softvera

private bool writeToDll(string file, char aktivacija){

try { StreamWriter sw = new StreamWriter(file); Random rand = new Random(); List<string> serBrojevi = dohvatiFbHDD(); string randomString = serBrojevi[0]; randomString += aktivacija.ToString(); // kriptiramo ga i zapišemo u fajl string kriptiraniString = kriptirajBezHex(file, randomString); sw.Write(kriptiraniString); sw.Flush(); int brojStringova = rand.Next() % 100 + 300; // svaki od stringa neka bude proizvoljne duljine, od 50 do 450 znakova for (int i = 0; i < brojStringova; i++) { int duljinaStringa = rand.Next() % 400 + 50; randomString = string.Empty; // svaki znak je random generirani for (int j = 0; j < duljinaStringa; j++) randomString += (char)(rand.Next() % 256); kriptiraniString = kriptirajBezHex(file, randomString); sw.Write(kriptiraniString); sw.Flush(); } sw.Close(); sw.Dispose(); return true;

} catch {

return false;}

}

Funkcija writeToDll kao argument prima varijablu file koja predstavlja naziv datoteke

u koju treba zapisati podatke o aktivaciji i varijablu aktivacija koja predstavlja podatak koji

označava da li je aktivacija uspješno obavljena ili ne. Varijabla sr služi za čitanje iz datoteke, dok

varijabla rand pruža funkcije generiranja nasumičnih brojeva. U varijablu serBrojevi se

pohranjuje dohvaćeni fizički broj tvrdog diska na koji se nadodaje vrijednost varijable

aktivacija, koji se onda skupa kriptiraju nazivom datoteke i konačno zapisuju u DLL datoteku.

Nakon toga se u datoteku zapisuje nasumičan broj dodatnih podataka, koji variraju od datoteke do

datoteke, tj. DLL datoteka je različite veličine i sadržaja na svakom od računala na koje je instaliran

softver.

Funkcija readFromDll kao argument prima naziv DLL datoteke u kojoj su zapisani

podaci o aktivaciji, a njezin kod je sljedeći:

private string readFromDll(string file){

StreamReader sr = new StreamReader(file); char[] buffer = new char[50]; for (int i = 0; i < 50; i++) buffer[i] = (char)sr.Read(); string strBuffer = chArrToStr(buffer); string dekriptirano = dekriptiraj(file, strBuffer);

14

Page 16: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

4. Implementacija zaštite

return dekriptirano;}

Funkcija readFromDll čita i vraća potrebne podatke o aktivaciji iz DLL datoteke čiji se

naziv predaje kao argument funkcije.

4.1.5. Dodatne funkcijeFunkcija jelAktivirano provjerava aktiviranost aplikacije čitanjem iz DLL datoteke,

a njezin kôd je sljedeći:

public bool jelAktivirano(){

Konfiguracija k = new Konfiguracija(); SERVER = k.AdrServer; // prvo potrazimo postoji li dll file string procitanoDLL = string.Empty; if (File.Exists(FILE)) // datoteka postoji, idemo je citati { procitanoDLL = readFromDll(FILE); // sad to treba usporediti sa brojevima diska na kompu. Funkcija

readfromdll vraca dekriptirane podatke.List<string> listaSerBrojeva = dohvatiFbHDD();

foreach (string s in listaSerBrojeva) { // usporediti dio procitanoga stringa sa serijskim brojem. Ako sve

pase, onda procitati aktivaciju. string procitaniSerBroj = procitanoDLL.Substring(0, s.Length); if (procitaniSerBroj == s) // to je to, citaj aktivaciju { string aktivacija = procitanoDLL[s.Length].ToString(); if (aktivacija == "1") { return true; } } } } return false;}

Na početku funkcije se instancira objekt klase Konfiguracija koji služi za dohvaćanje

postavki iz XML datoteke, točnije dohvaća se adresa poslužitelja za licenciranje. Nakon toga se

provjerava postojanje DLL datoteke, pročitaju se zapisani podaci iz datoteke (fizički broj tvrdog

diska i stanje aktivacije) i uspoređuju sa dobivenima. Ukoliko je aplikacija aktivirana funkcija vraća

true u suprotnom false.

Funkcije posaljiNaServer i posaljiNaServerUspjelo služe za slanje kriptiranih

podataka na poslužitelj za licenciranje. Slijedi kôd funkcije posaljiNaServer, dok je kôd

funkcije posaljiNaServerUspjelo identičan, uz razliku pozivanja druge datoteke na

poslužitelju za licenciranje.

15

Page 17: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

Osmišljavanje i realizacija zaštite softvera

private string posaljiNaServer(string fbHDDkript, string brPkript){

string reqString = SERVER + "aktivacija.php?h=" + fbHDDkript + "&br=" + brPkript; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(reqString); string cijelaStranica = string.Empty; request.Proxy = null; request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; request.UserAgent = "Code Sample Web Client"; try { HttpWebResponse responce = (HttpWebResponse)request.GetResponse(); StreamReader stream = new StreamReader(responce.GetResponseStream()); cijelaStranica = stream.ReadToEnd(); ;

return cijelaStranica; } catch { MessageBox.Show(new Form() { TopMost = true },"Problem sa Internet

konekcijom. Provjerite jeste li spojeni na Internet.", "Aktivacija aplikacije", MessageBoxButtons.OK, MessageBoxIcon.Error);

return null; } }

Funkcija posaljiNaServer kao argument prima kriptirani fizički broj diska i kriptirani

broj poslovnice. Varijabla reqString sadrži adresu do aktivacijske datoteke na poslužitelju za

licenciranje, sa cijelim URL (Uniform Resource Locator) zapisom. Pomoću HttpWebRequest objekta se šalje zahtjev poslužitelju za licenciranje i prima njegov odgovor koji se tada provjerava

dalje u aplikaciji.

4.2. Ugradnja u postojeću aplikacijuZa potrebu demonstracije u projektu sam napravio formu naziva Form1.cs koja se želi

zaštiti. Sve što je potrebno kako bi se ugradila zaštita je da se na Form load event stavi sljedeći dio

koda:

private void Form1_Load(object sender, EventArgs e){

Aktivator a = new Aktivator(); if (a.jelAktivirano()) {

//ovdje ide kod koji se mora izvršavati } else { a.ShowDialog(); if (a.DialogResult.Equals(DialogResult.OK)) { //ovdje ide kod koji se mora izvršavati } else { Application.Exit(); } }}

16

Page 18: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

4. Implementacija zaštite

Dakle, prvo se napravi nova instanca objekta Aktivator, nakon čega se provjeri da li je

aplikacija aktivirana koristeći njegovu člansku funkciju jelAktivirano, te ako je to slučaj tada

se nastavlja s normalnim izvršavanjem kôda (ovdje u primjeru je stavljen samo komentar). Ako

funkcija vrati da softver nije aktiviran, tada se prikazuje forma za aktivaciju prikazna već prije na

slici 4.2. Ako se aktivacija provede uspješno, tada se također nastavlja s normalnim izvođenjem

programa, a u suprotnom se program zatvara.

Dodatna provjera koja omogućuje da se npr. svaki deseti put klikom na neku funkcijsku

tipku izvrši spajanje na poslužitelj za licenciranje i provjeri ispravnost aktivacije aplikacije, se

ostvaruje sljedećim kôdom:

private void button1_Click(object sender, EventArgs e){

Random r = new Random(); int br = r.Next(1, 10); MessageBox.Show(br.ToString()); if (br == 1) { if (!ProvjeriAkt.ProvjeriAktivaciju()) { File.Delete("nbZastita.dll");

Application.Exit(); } }}

Prvo se izračuna nasumični broj od 1 do 10 i pohrani u varijablu br. Ako je varijabla br jednaka 1 (u prosjeku se to događa svaki deseti put), tada se vrši dodatna provjera aktivacije i

ukoliko se pokaže da aplikacija nije pravilno aktivirana, tada program izbriše DLL datoteku i završi

s izvođenjem.

4.3. Web aplikacijaWeb aplikacija pruža grafičko sučelje za upravljanje licencama, tj. pruža sučelje za unošenje

novih poslovnica, pregled postojećih i mijenjanje broja dopuštenih računala u jednoj poslovnici.

Web aplikacija sa sastoji od dva dijela, aktivacija i administracija, čiji je kod smješten u istoimene

direktorije na poslužitelju za licenciranje. Web aplikacija podržava rad sa dvije različite baze

podataka, mySQL i PostgreSQL. Za realizaciju su potrebne dvije tablice u bazi na poslužitelju za

licenciranje, a to su tablice rezervacija i diskovi, čija je struktura prikazana u tablicama 4.1

i 4.2. Naziv baze podataka koja sadrži navedene tablice ja nbzastita.

17

Page 19: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

Osmišljavanje i realizacija zaštite softvera

Tablica 4.1. Struktura tablice rezervacija

rezervacijabrP integer NOT NULL

rezervirano boolean DEFAULT false

datum timestamp without time zone

brDopustenih integer

Tablica 4.2. Struktura tablice diskovi

diskovibrP integer NOT NULL

fbHDD character varying(35) NOT NULL

datum timestamp without time zone

aktiviran boolean DEFAULT false

SQL kôd navedenih tablica je sljedeći:

CREATE TABLE `nbzastita`.`rezervacija` (`brP` INT NOT NULL ,`rezervirano` TINYINT( 1 ) NOT NULL ,`datum` DATETIME NOT NULL ,PRIMARY KEY ( `brP` )

) ENGINE = MYISAM

CREATE TABLE `nbzastita`.`diskovi` (`brP` INT NOT NULL ,`fbHDD` VARCHAR( 35 ) NOT NULL ,`datum` DATETIME NOT NULL ,`aktiviran` BOOL NOT NULL ,PRIMARY KEY ( `fbHDD` )

) ENGINE = MYISAM

4.3.1. AktivacijaU sklopu projekta je isporučen izvorni kod Web aplikacije, a datoteke direktorija

aktivacija prikazane su na slici 4.3.

18

Slika 4.3. Datoteke direktorija aktivacija

Page 20: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

4. Implementacija zaštite

Datoteke smještene u direktorij aktivacija su pisane u jeziku PHP-u, a služe za

primanje zahtjeva od desktop aplikacije opisane u poglavlju 4.1. Kôd datoteke aktivacija.php je sljedeći:

<?// sifrarnik//1 - poslovnica nije rezervirana//2 - prevelik broj aktivacijarequire_once('./class.rc4crypt.php'); //klasa za rc4$greska = "FALSE";$server = "localhost";$dbname = "nbzastita";$username = "root";$pass = "test123";//primi request$fbHDDkript = hex2bin($_GET["h"]);$brPkript = hex2bin($_GET["br"]);//dekriptiraj kljuceve$kljuc = "c01t.,I{M}";$fbHDD = rc4crypt::decrypt($kljuc, $fbHDDkript);$brP = rc4crypt::decrypt($kljuc, $brPkript);

// provjeriti u tablici rezervirano da li je taj broj poslovnice rezerviran od nasmysql_connect($server, $username, $pass);mysql_select_db($dbname) or die ($greska);$query = "SELECT rezervirano FROM rezervacija WHERE brP = '" . $brP . "'";$result = mysql_query($query);if ($result == FALSE || mysql_numrows($result) == 0){

echo "1";exit;

}//provjeriti da li je brDopustenih u tablici rezervacija veci od broja zapisa brP u //tablici diskovi$query = "SELECT COUNT(*) FROM diskovi WHERE brP=" . $brP;$result = mysql_query($query);$brFbHDD = mysql_result($result, 0);$query2 = "SELECT brDopustenih FROM rezervacija WHERE brP=". $brP;$result2 = mysql_query($query2);$brDopustenih = mysql_result($result2, 0);

if ($brDopustenih > $brFbHDD){

$md5string = md5($fbHDD . $brP);$datum = date ("Y-m-d H:i:s", time());$query = "INSERT INTO diskovi VALUES ('" . $brP . "', '" . $fbHDD . "', '" .

$datum . "', '0')";if(mysql_query($query)){

echo $md5string;}else{

echo "4";}exit();

}else{

echo "2";exit();

}function hex2bin($str) {

19

Page 21: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

Osmišljavanje i realizacija zaštite softvera

$bin = "";$i = 0;do {

$bin .= chr(hexdec($str{$i}.$str{($i + 1)}));$i += 2;

} while ($i < strlen($str));return $bin;

}?>

Objašnjenje koda po koracima:

1. nakon definiranja i popunjavanja varijabli potrebnih za pristup poslužitelju za

licenciranje ($server, $dbname , $username, $pass) prima se zahtjev koji

dolazi GET metodom i sadrži kriptirani fizički broj tvrdog diska i kriptirani broj

poslovnice, te se oni spremaju u odgovarajuće varijable ($fbHDDkript i

$brPkript)

2. kriptirani primljeni brojevi se dekriptiraju i spreme u odgovarajuće varijable

($fbHDD i $brP)

3. u tablici rezervacija se provjerava polje rezervirano da bi se vidjelo da li

je taj broj poslovnice rezerviran od strane administratora tvrtke Ctim

4. u tablici rezervacija se provjerava da li je polje brDopustenih u skladu s

postavljenim brojem dopuštenih računala u jednoj poslovnici

5. ukoliko je uvjet iz prethodnog koraka zadovoljen tada se izračuna sažetak MD5

funkcijom i popune potrebna polja u tablici diskovi6. na kraju se taj sažetak ispisuje kao rezultat izvršavanja, kojeg onda opet desktop

aplikacija koristi u daljnjem radu

Kod datoteke aktivacijaUspjela.php je sljedeći:

<?// sifrarnik// 1 - u bazi bi treabalo biti ovoga zapisa, ali ga nema. Treba ponoviti aktivaciju.

require_once('./class.rc4crypt.php');// funkcije potrebne za rad sa rc4$fbHDDkript = hex2bin($_GET["h"]);$brPkript = hex2bin($_GET["br"]);// sad treba dekriptirati oba kljuca$kljuc = "c01t.,I{M}";$fbHDD = rc4crypt::decrypt($kljuc, $fbHDDkript);$brP = rc4crypt::decrypt($kljuc, $brPkript);$server = "localhost";$dbname = "nbzastita";$username = "root";$pass = "test123"; mysql_connect($server, $username, $pass);

20

Page 22: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

4. Implementacija zaštite

mysql_select_db($dbname) or die ("Ne moze se pristupiti bazi.");$query = "SELECT * FROM diskovi WHERE brP = '" . $brP . "' AND fbHDD = '" . $fbHDD . "'";$result = mysql_query($query);// u bazi bi treabalo biti ovoga zapisa, ali ga nema. Treba ponoviti aktivaciju.if ($result == FALSE || mysql_numrows($result) == 0){

echo "1"; }else // par (brP, fbHDD) je vea u bazi, treba samo zapisati da je aktivirano.{$query = "UPDATE diskovi SET aktiviran = 1 WHERE brP = '" . $brP . "' AND fbHDD = '" . $fbHDD . "'" ;

if(mysql_query($query))echo "success";

elseecho "error";

}?>

Ukratko, svrha kôda ove datoteke je da ažurira polje aktiviran u tablici diskovi, ako

je primljena dobra kombinacija broja poslovnice i fizičkog broja tvrdog diska. Dvostrukim slanjem

podataka na poslužitelj za licenciranje ostvaren je koncept rukovanja,čime je povećana razina

sigurnosti.

Datoteka dodatnaProvjera.php se koristi u slučaju da u desktop aplikaciji uključimo

opciju dodatne provjere, kao što je opisano u poglavlju 4.2.

4.3.2. AdministracijaZa potrebe rezervacije i aktivacije brojeva poslovnica i dopuštenih računala unutar tih

poslovnica, napravljeno je grafičko Web sučelje. Za realizaciju je korišten Codeigniter PHP MVC

framework. Za potrebe prijave (engl. login) u administracijsko sučelje napravljena je dodatna

tablica ci_sessions, koja služi za spremanje korisničkih sesija, a struktura joj je prikazana u

tablici 4.3.

Tablica 4.3. Struktura tablice ci_sessions

ci_sessionssession_id character varying(40) NOT NULL DEFAULT 0

ip_address character varying(16) NOT NULL DEFAULT 0

user_agent character varying(50) NOT NULL

last_activity integer NOT NULL DEFAULT 0

user_data text

SQL kôd navedene tablice je sljedeći:

CREATE TABLE ci_sessions( session_id character varying(40) NOT NULL DEFAULT 0, ip_address character varying(16) NOT NULL DEFAULT 0, user_agent character varying(50) NOT NULL,

21

Page 23: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

Osmišljavanje i realizacija zaštite softvera

last_activity integer NOT NULL DEFAULT 0, user_data text, CONSTRAINT ci_sessions_pkey PRIMARY KEY (session_id))WITH( OIDS=FALSE);

Dva glavna kontrolera u application direktoriju CodeIgniter frameworka su login i

admin. Kôd login kontrolera je sljedeći:

<?phpclass Login extends Controller {

function Login(){

parent::Controller();}function index(){ if ($this->session->userdata('logged_in') == TRUE) { redirect('admin/index'); }

$data['title'] = "cTim";$data['slogan'] = "...admin area...";$data['css'] =

"http://localhost/nikola/administracija/css/default.css";$data['main'] = "";$data['username'] = array('id' => 'username', 'name' => 'username');

$data['password'] = array('id' => 'password', 'name' => 'password');

$this->load->view('login_view', $data);}function process_login(){ $username = $this->input->post('username'); $password = $this->input->post('password');

if ($username == 'root' AND $password == 'c01t.,I{M}') { $data = array(

'username' => $username, 'logged_in' => TRUE ); $this->session->set_userdata($data); redirect('admin/index');

} else { $this->session->set_flashdata('message', '<div id="message">Kombinacija

korisnickog imena i lozinke je pogresna, molim pokusajte ponovno.</div>');

redirect('login/index'); }}function logout(){ $this->session->sess_destroy(); redirect('admin');}

22

Page 24: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

4. Implementacija zaštite

}?>

Kontroler login sadrži funkcije index, login i logout. Funkcija index je glavna

funkcija koja se poziva prilikom poziva kontrolera i ona služi za prikazivanje glavne login forme.

Funkcija login služi za procesiranje podataka i usmjeravanje korisnika na administracijski dio

ukoliko je kombinacija korisničkog imena i lozinke ispravna. Funkcija logout služi za odjavu

korisnika sa sustava.

Kôd admin kontrolera je sljedeći:

<?phpclass Admin extends Controller {

function Admin(){

parent::Controller();}

function index(){ if ($this->session->userdata('logged_in') != TRUE) { redirect('login/index'); } $data['title'] = "cTim";

$data['slogan'] = "...admin area...";$data['css'] = "http://localhost/nikola/administracija/css/default.css";$data['main'] = "";

$this->load->view('admin_view', $data);}

function rezervacija(){

if ($this->session->userdata('logged_in') != TRUE) { redirect('login/index'); } $data['title'] = "cTim"; $data['slogan'] = "...admin area..."; $data['css'] = "http://localhost/nikola/administracija/css/default.css"; $data['main'] = "";

$data['brP'] = array('id' => 'brP', 'name' => 'brP'); $data['brDopustenih'] = array('id' => 'brDopustenih', 'name' => 'brDopustenih');

$data['query'] = $this->db->get('rezervacija'); $this->load->view('rezervacija_view', $data);

}

function rezervacija_dodaj(){

$data = array( 'brP' => $_POST['brP'] , 'rezervirano' => '1',

'datum'=> date ("Y-m-d H:i:s", time()), 'brDopustenih' => $_POST['brDopustenih']

);$this->db->insert('rezervacija', $data);redirect('admin/rezervacija');

}

23

Page 25: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

Osmišljavanje i realizacija zaštite softvera

function rezervacija_makni(){

$this->db->where('brP', $_POST['brP']);$this->db->delete('rezervacija'); redirect('admin/rezervacija');

}

function diskovi(){

if ($this->session->userdata('logged_in') != TRUE) { redirect('login/index'); } $data['title'] = "cTim";

$data['slogan'] = "...admin area...";$data['css'] = "http://localhost/nikola/administracija/css/default.css";$data['main'] = "";$data['brP'] = array('id' => 'brP', 'name' => 'brP');$data['fbHDD'] = array('id' => 'fbHDD', 'name' => 'fbHDD');$data['query'] = $this->db->get('diskovi');$this->load->view('diskovi_view', $data);

}

function diskovi_makni(){

$this->db->where('brP', $_POST['brP']);$this->db->where('fbHDD', $_POST['fbHDD']);$this->db->delete('diskovi'); redirect('admin/diskovi');

}}?>

Kontroler admin sadrži funkcije index, rezervacija, rezervacija_dodaj, rezervacija_makni, diskovi i diskovi_makni. Funkcija index je glavna funkcija

koja se poziva prilikom poziva kontrolera i ona služi za prikazivanje glavnog administracijskog

sučelja. Funkcija rezervacija služi za prikaz rezerviranih brojeva poslovnica od strane

administratora tvrtke Ctim, a funkcija diskovi služi za dohvaćanje i prikaz podataka o

aktiviranim poslovnicama, sa podacima o fizičkim brojevima diskova pojedine poslovnice. Funkcije

rezervacija_dodaj i rezervacija_makni služe za dodavanje odnosno brisanje

rezervacija, a funkcija diskovi_makni služi za brisanje pojedinog zapisa iz tablice diskovi.

Ovdje se neće ulazi u izgled datoteka za prikaz pojedinih pogleda (engl. View), ali se one mogu

pogledati u direktoriju views mape application Codeigniter razvojne okoline.

24

Page 26: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

5. Pokretanje programaDa bi se mogla isprobati moja implementacija potrebno je slijediti par jednostavnih koraka.

5.1. Instalacija XAMPP-aProgram XAMPP omogućuje jednostavnu instalaciju Apache web poslužitelja, PHP

poslužitelja, te MySQL baze podataka. Program se može preuzeti sa sljedeće adrese:

http://www.apachefriends.org/en/xampp-windows.html#641.

U navedenom primjeru je skinuta EXE verzija u 7-ZIP formatu. Nakon što se program skine,

potrebno ga je pokrenuti, te se nakon toga dobije dijalog kao na slici 5.1. Tu treba odabrati mapu u

koju će se program XAMPP otpakirati. U ovom primjeru odabrana je mapa C:\NiKoLa.

Nakon što se program otpakira dobijemo novu mapu u mapi C:\NiKoLa, te nam potpun

put do programa XAMPP sada glasi C:\NiKoLa\xampp. Sada je potrebno otvoriti taj direktorij i

pokrenuti datoteku setup_xampp.bat, kao što je prikazano na slici 5.2.

Slika 5.1. Definiranje mape za otpakiravanje programa XAMPP

Page 27: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

Osmišljavanje i realizacija zaštite softvera

Nakon što se datoteka setup_xampp.bat pokrene i njezino izvršavanje završi dobije se

prozor poput ovog na slici 5.3, te je za kraj instalacije potrebno pritisnuti bilo koju tipku na

tipkovnici.

Naime, ovime su svi putovi (engl. paths) automatski podešeni što je potrebno zbog

normalnog rada programa XAMPP. Za jednostavnije pokretanje pojedinih poslužitelja koje nudi

program XAMPP postoji program xampp-control.exe, kao što je prikazano na slici 5.4.

26

Slika 5.2. Pokretanje datoteke setup_xampp.bat

Slika 5.3. Rezultat izvođenja programa setup_xampp.bat

Page 28: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

5. Pokretanje programa

Na slici 5.5 je prikazano grafičko sučelje programa xampp-control.exe. Kao što je i intuitivno

jasno, pokretanje pojedinog poslužitelja (engl. Server) se ostvaruje klikom na tipku Start.

Za naš primjer potrebno je pokrenuti poslužitelje Apache i MySql, te nakon toga je

obavezno potrebno postaviti lozinke za pristup XAMPP direktoriju i MySql bazi podataka, što se

radi klikom na tipku Admin... kao što je prikazano na slici 5.6.

27

Slika 5.4. Pokretanje programa za jednostavnu kontrolu XAMPP-a

Slika 5.5. Grafičko sučelje za upravljanje poslužiteljima

Page 29: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

Osmišljavanje i realizacija zaštite softvera

Nakon što kliknemo na tipku Admin, pokreće se podrazumijevani (engl. Default) Web

preglednik i automatski otvori stranicu http://localhost/xampp. Ovdje je potrebno kliknuti na link

Security, kao što prikazuje slika 5.7.

Nakon klika na link Security se dolazi do stranice sa popisom sigurnosnih postavki, ali

budući da mi želimo izmijeniti trenutne postavke tražimo tekst sa linkom

http://localhost/security/xamppsecurity.php, kao što je prikazano na slici 5.8.

Na kraju konačno dolazimo do samog mjesta gdje se mjenja lozinka, te je tu potrebno

postaviti lozinku za Apache poslužitelj i MySql bazu podataka. Oba korisnička imena (engl. User

28

Slika 5.6. Pokrenuti poslužitelji Apache i MySql

Slika 5.7. Odabir linka Security za podešavanje lozinke

Slika 5.8. Odabir linka za promjenu lozinke

Page 30: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

5. Pokretanje programa

name) neka budu root, a također obje lozinke neka budu test123 u svrhu testiranja moje

implementacije. Na slici 5.9 je prikazan izgled mijenjanja korisničkog imena i lozinke za Apache poslužitelj.

5.2. Otpakiravanje Sadržaj raspakirane arhive Aplikacije.zip koja je poslana kao privitak u email-u je

prikazan na slici 5.10.

Sadržaj direktorija Web aplikacija (direktoriji administracija i aktivacija)

je potrebno iskopirati u poddirektorij nikola direktorija htdocs instalacije programa XAMPP.

Budući da se za realizaciju administracijskog sučelja koristi Codeigniter PHP MVC framework koji

koristi poseban način upravljanja URL-ovima potrebno je u konfiguracijskoj datoteci Apache

poslužitelja (httpd.conf) otkomentirati liniju LoadModule rewrite_module modules/mod_rewrite.so i svako pojavljivanje teksta AllowOverwrite treba

zamijeniti sa AllowOverwrite All.

29

Slika 5.9. Mijenjanje korisničkog imena i lozinke za poslužitelj Apache

Slika 5.10. Sadržaj direktorija raspakirane arhive Seminar.rar

Page 31: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

Osmišljavanje i realizacija zaštite softvera

5.3. Rezervacija poslovniceDo login forme administracijskog sučelja se dolazi upisivanjem adrese

http://localhost/nikola/administracija u Web preglednik. Pojavljuje se sučelje prikazano na slici

5.11.

Korisničko ime je root, a lozinka je c01t.,I{M}. Nakon uspješne prijave na sustav,

pojavljuje se izgled administracijskog sučelja prikazan na slici 5.12.

Klikom na link Rezervacija dolazimo do sučelja za unos nove poslovnice i

maksimalnog broja dopuštenih računala, kao što je prikazano na slici 5.13.

30

Slika 5.11. Logiranje u administracijsko sučelje

Slika 5.12. Administracijsko sučelje

Page 32: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

5. Pokretanje programa

Za unos nove poslovnice je potrebno unijeti broj poslovnice (brP) i maksimalni broj

dopuštenih računala u poslovnici (brDopustenih), te kliknuti Dodaj!. Na slici 5.14 je prikazan

jedan takav primjer unosa.

Ako je netko uspješno aktivirao aplikaciju sa brojem poslovnice 5, tada će klik na link

Diskovi proizvesti ispis sličan onome prikazanom na slici 5.12.

31

Slika 5.13. Rezervacija nove poslovnice

Slika 5.14. Primjer unosa poslovnice sa brojem 5 i maksimalnim brojem računala 2

Page 33: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

Osmišljavanje i realizacija zaštite softvera

Testiranje rada desktop aplikacije je moguće na način da se prvo podesi Web aplikacija kao

što je opisano u ovom poglavlju, te da se nakon toga pokrene C# projekt (izvršna datoteka se nalazi

u bin direktoriju) koji je uključen u arhivu Aplikacije.zip.

32

Slika 5.15. Primjer ispisa tablice diskovi

Page 34: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

6. ZaključakU ovom radu su pokazane osnovne podjele zaštita, te je pokazana moja implementacija

bazirana na konceptu mrežnog licenciranja. Ono što svakako treba reći je da danas ne postoji zaštita

kojom bi se neki računalni program zaštitio od probijanja. Neke se zaštite teže probijaju a neke

lakše, ali ostaje činjenica da je samo pitanje vremena kad će se i najnovije verzije zaštita opet

razbiti.

Čak i moja implementacija zaštite nije otporna na probijanje, te ukoliko bi netko bio

dovoljno vješt u korištenju programa za dekompajliranje izvoršnog kôda tada bi bilo dovoljno da

makne dio kôda koji vrši provjeru aktivacije. Također bi morao maknuti i provjeru koja se dodatno

vrši svaki deseti put klikom na funkcijsku tipku.

Page 35: Osmišljavanje i realizacija zaštite softveraMeđu njima postoji nekoliko tipova hardverskih zaštita, ovisno o priključku na računalo, pa tako imamo: LPT – paralelni port računala

7. Literatura1. XAMPP Documentation, http://www.apachefriends.org/en/faq-xampp.html

2. PHP Documentation, http://www.php.net/docs.php

3. MySQL Documentation, http://dev.mysql.com/doc/

4. 9rays službena stranica, http://www.9rays.net/

5. Reflector, http://www.red-gate.com/products/reflector/

6. On Software Protection Dongle, Raymond Snow, http://searchwarp.com/swa130791.htm

7. Ellislab, Inc.; http://codeigniter.com/user_guide/

8. Thomas Myer: Professional CodeIgniter

34