Reverzni inžinjering na Windows platformi

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

Sadržaj

1. Uvod
2. Proces reverznog inženjeringa (Eliam, 2005., str. 13-14)
 2.1.  Povijesni razvoj
 2.2.  Pristupi reverznom inženjerstvu	
 2.3.  Osnovni ciljevi  i razlozi primjene reverznog inženjeringa
 2.4.  Legalnost reverznog inženjeringa
3.  Standard za održavanje programske podrške
4.  DRM – Digital Rights Managment	
5.  Programi niže razine (Low-level software) (Eliam, 2005., str. 10)
6.  Revzerni inženjering u službi sigurnosti IS (informacijskog sustava)
 6.1.  Krekiranje (crack)
   6.1.1.  Piratstvo i zaštita kopiranja
   6.1.2.  Tipovi zaštite kopiranja
 6.2.  Maliciozni kod
   6.2.1.  Vrste malicioznog koda (malwera)
   6.2.2.  Malware u budućnosti
   6.2.3.  Polimorfizam i metamorfizam
 6.3.  Metode zaštite
7.  Alati reverznog inženjerstva
8.  Reverzni inženjering mehaničkih uređaja
9.  Antireverzni inženjering
 9.1.  Java i .NET na Windows platformama
10.  Zaključak
11. Primjer
12. Literatura



1. Uvod
2. Proces reverznog inženjeringa (Eliam, 2005., str. 13-14)
  2.1.  Povijesni razvoj
  2.2.  Pristupi reverznom inženjerstvu
  2.3.  Osnovni ciljevi  i razlozi primjene reverznog inženjeringa
  2.4.  Legalnost reverznog inženjeringa
3.  Standard za održavanje programske podrške

4. DRM – Digital Rights Managment

DRM je generički naziv za zaštitu od kopiranja tehnologija koje se posebno primjenjuju za zaštitu medijskih sadržaja. [Eliam, 2005, str. 320] Većina DRM modela se temelji na enkripciji zaštićenog sadržaja, skrivanju dekripcijskog ključa te zaštiti tokova podataka nakon dekripcije. Najveći problem koji se javlja u ovakom modelu enkripcije je što se prije ili kasnije kriptirani sadržaj mora pojaviti u izvornom kodu da bi se mogao reproducirati i tu se izlaže autorski sadržaj znatno manjoj razini zaštite. DRM tehnologije su još jedan način primjene reverznog inženjeringa u svrhu zaštite digitalnog sadržaja, a razvijaju se u nekoliko smjerova: CSS (Content Scrambling System), Protected Media Path, AACS (Advanced Access Content System). [sigurnost.lss.hr, 2011, str. 7]

Microsoft je na Windows operativnom sustavu pokušao izraditi centraliziranu DRM infrastrukturu kroz tehnologiju Windows Media Rights Manager kako bi omogućio sigurno upravljanje te reproduciranje medijskog sadržaja. Cijela ideja zaštite se temeljila na licenci koja bi definirala ključ za enkripciju i dekripciju sadržaja pomoću DRM poslužitelja. Pokretanjem medijskog sadržaja bi se ključ proslijeđivao DRM poslužitelju koji bi ako je autentifikacija sadržaja uspješno provedena vraćao ključ za dekripciju sadržaja. [sigurnost.lss.hr, 2011, str. 7-8] Osnovni proces Windows Media Rights Managera temelji se na pet osnovnih procesa, kako navode na stranicama Microsofta [microsoft.com, 2004, http://www.microsoft.com/windows/windowsmedia/howto/articles/drmarchitecture.aspx]: pakiranje, distribucija, uspostavljenje servera za licenciranje, stjecanje licence, pokretanje datoteka s medijskim sadržajem.

Slika 1. Način rada Windows Media Right Managera [microsoft.com, 2004, http://www.microsoft.com/windows/windowsmedia/howto/articles/drmarchitecture.aspx]


5.  Programi niže razine (Low-level software) (Eliam, 2005., str. 10)
6.  Revzerni inženjering u službi sigurnosti IS (informacijskog sustava)

Reverzni inženjering je ograničen na sve entitete koje je napravio čovjek. Tako se proces reverznog inženjeringa može provoditi nad informacijskim sustavima i svim njihovim dijelovima. No, da bi se mogao proces reverznog inženjeringa izvršavati nad dijelovima ili cijelim informacijskim sustavom, potrebno je imati pristup izvornom kodu tih aplikacija ili njihovih modula. Izvorni kod je taj koji daje informacije i pomoću kojeg se dobivaju i otkrivaju informacije koje su cilj u određenom procesu reverznog inženjeringa. Do tih se informacija može doći pomoći reverznog inženjeringa na različite načine.

Eliam [Eliam, 2005, str. xxiv-4] navodi kako se procesom reverznog inženjeringa nad informacijskim sustavom, odnosno, njegovim programima (aplikacijama) i dijelovima istih, iz već postojećih programa čija dokumentacija ili izvorni kod nisu dostupni, pokušava se dobiti iz njegovog dizajna i implementacije. Isti autor također navodi kako je reverzni i inženjering programa (aplikacija) potpuno virtualan proces jer uključuje samo CPU - proceosr i ljudski um. Naravno, pod pojmom ljudskog uma, autor podrazumijeva sve vještine i znanje potrebno razumijevanju rada računala i programa te načinima i metodama njihovog razvoja. Navodi kako sam proces reverznog inženjeringa na programima informacijskog sustava uključuje nekoliko umjetnosti: provaljivanje koda, rješavanja zagonetki, programiranja i logičke analize.

Slika 2. Umijeće reverznog inženjeringa [sigurnost.lss.hr, 2011, str. 5]

Tonella i Potrich [Tonella, Potrich, 2005, str. 1-3] navode kako se pomoću procesa reverznog inženjeringa unutar informacijskog sustava može promatrati njegova struktura, ponašanje, unutarnja stanja pa čak i fizička organizacija datoteka. Oni su sam proces promatrali iz perspektive životnog ciklusa informacijskog sustava, odnosno, programa ili aplikacije. Razlog tome navode najvažnije informacije o shvaćanju i aktivnostima samih programa te mogućnost njihove analize i utjecaja koji imaju na rad informacijskog sustava vidljive kroz sam njegov razvoj. Tako navode kako u procesu razvoja samog programa, odnosno, softvera najvažnija, najtočnija te najpouzdanija informacija o ponašanju te sam opis programa je njegov izvorni kod. Kroz faze razvoja programa, odnosno, informacijskog sustava se pomoću raznih tehnika reverznog inženjeriga može omogućiti pogled na informacijski sustav s više razine, koji uključuje sve važne dijelove i pojedinosti koje program izvodi te njegove performanse. Dijagrami koji se stvaraju u procesu reverznog inženjeringa podupiru te omogućavaju razumijevanje samog programa kao i mogućnost njegovog restrukturiranja i praćenja svih njegovih dijelova.

Reverzni inženjering je gotovo neophodan u osiguravanju sigurnosti infomracijskih sustava. Eliam [Eliam, 2005, str. 5-8] navodi kako reverzni inženjering koji je vezan uz sigurnost informacijskih sustava uglavnom se dijeli na ova područja:

  -	maliciozni softver, 
  -	kriptografski algoritmi, 
  -	figital rights managment (DRM), 
  -	revizija binarnih programa. 

Načini reverznog inženjeringa koje ćemo obraditi u ovom radu su oni najpoznatiji i smatramo da je važno te tehnike pobliže upoznati te znati kako se one koristei u procesu reverznog inženjeringa. Područja sigurnosti informacijskog sustava gdje se primjenjuje reverzni inženjering su: krekiranje (crack), maliciozni kod, piratstvo, zaštita kopiranja.


  6.1.  Krekiranje (crack)

Pod pojmom krekiranja, koji dolazi od engl. riječi crack, koja znači nešto slomiti ili probiti, u informacijskim sustavima se podrazumijeva kao modifikacija softvera kako bi se uklonila određena svojstva programa ili aplikacija informacijskog sustava koje onaj tko vrši krekiranje smatra nepoželjnim. Danas se preko interneta može pronaći svašta, no važni programi ili aplikacije su uglavnom zaštićeni lozinkama, serijskim brojevima, verzijama i sl. kako bi se održala potrebna razina njihove zaštite. Naravno, važnu ulogu igra i tržište te spoznaja kako je sve komercijalizirano te se programi i cijeli informacijski sustavi moraju zaštiti od ne legalne uporabe. Najčešće se probijaju lozinke jer one omogućuju, uglavnom, pristup privatnim dijelovima sustava, odnosno, podacima koji su tamo pohranjeni.

Prema Eliamu [Eliam, 2005, str. 309] postoje tri vrste različitih načina krekiranja: piratstvo i zaštita kopiranja, razbijanje zaštite te antireverzivne tehnike. Svaka od njih se koristi kako bi se pomoću više različitih načina moglo ugroziti dio ili cijeli informacijski sustav. Ovi načini reverznog inženjeringa predstavljaju veliki problem sigurnosti informacijskih sustava i svih njegovih programa. Kako su danas informacijski sustavi veliki i složeni, lako se može dogoditi da neki njihov dio ili cijeli sustav nisu zaštićeni na potrebnoj razini zaštite, ili neki njihov dio predstavlja opasnost cijelom sustavu. Stoga je potrebno zaštiti sustav na svim razinama, jer napadač pomoću reverznog inženjeringa i malo truda mogu ugroziti sustav i sve njegove podatke.


    6.1.1.  Piratstvo i zaštita kopiranja

Piratstvo te prava kopiranja i zaštite sadržaja danas su jedno od najraširenijih područja zaštite sigurnosti i primjene različitih metoda i načina sigurnosti sadržaja i podataka. Najviše se tu štite digitalni sadržaji kao što su različite aplikacije, glazba, filmovi i sl. Kao što se može vidjeti, nabrojani digitalni sadržaji spadaju većinom u zabavne kategorije, ali komercijalizacijom postaju sadržaj koji je potrebno zaštiti.

Autorska prava ili engl. copyright digitalizacijom sadržaja postaju gotovo beskorisna. Sadržaji koji su stavljeni na internet, iako pod zaštitom autorskih prava, odnosno, copyright oznakom, više ne znači da se tom sadržaju jamči pravo distribucije samo onima koji imaju pravo na to ili otkupe autorska prava. Piratstvo i kopiranje su rješenje za problem autorskih prava sa ne legalne strane zakona, dok za legalnu stranu zakona ona predstavljaju problem zaštite i sigurnosti sadržaja. Kako navodi Eliam [Eliam, 2005, str. 310] autorska te intelektualna prava nad digitaliziranim sadržajima važno je sagledati i sa društvenog aspekta. Navodi kako većina građana uopće nije svjesna kako je prženje, engl. burning, digitalnog sadržaja bez dopuštenja autora zapravo ilegalno te rade prekršaj. Isti autor navodi kako je djelomičan krivac tome i napredak tehnologije te je sa samog tehnološkog aspekta kopiranje vrlo lako omogućeno. Naravno, teško da će samo tehnološki aspekt digitalnog sadržaja omogućiti njegovu zaštitu, jer vrlo često je i on uzrok problema koji se stvaraju autorima ne poštovanjem njihovih autorskih prava.

Softverskim piratstvom, koje se može definirati kao nedozvoljena distribucija zaštićenih digitalnih sadržaja, se nanosi velika šteta proizvođačima softvera kao što su Microsoft, Apple, IBM, Adobe i dr. Često dobronamjernim posuđivanjem npr. Windows operacijskih sustava te pripadajućih serijskih brojeva koji ih štite, kako bi se instalirali na nekom računalu radi se ilegalna radnja jer se ne poštuju autorska prava, u ovom slučaju Microsofta koji polaže pravo na taj digitalni sadržaj. Softversko piratstvo je najrasprostranjeniji način ilegalne distribucije digitalnog sadržaja i vrlo se teško kontrolira, odnosno, gotovo da ga je danas već nemoguće iskorijeniti. Prije nekoliko godina je taj problem bio manje izražen i nije predstavljao preveliku opasnost autorskim pravima nad digitalnim sadržajem zbog toga što je prvo bilo potrebno digitalni sadržaj staviti na neki fizički medij kako bi se on dalje mogao dijeliti, naravno, internet to mijenja. Gotovo sve što se može poželjeti lako se može naći i skinuti, bilo zaštićeno autorskim pravima ili ne. To znatno pogoršava problem zaštite. Osnovi cilj softverske zaštite tehnologija koje omogućuju zaštitu kopiranja je kontrola načina uporabe zaštićenog digitalnog sadržaja. [Eliam, 2005, str. 311] To je vrlo teško postići te mora postojati pouzdana komponenta (trusted component) koja se nalazi unutar sustava te omogućuje poboljšanje zaštite digitalnog sadržaja. Kako navodi Eliam [Eliam, 2005, str. 312] CPU nezna koja „prava“ program ili digitalni sadržaj koji on izvodi ima. To je omogućeno zato jer procesor nema kontrole i nije dizajniran kako bi spriječio „napadače“ od prisvajanja koda koji on trenutno izvodi. Tu se spominje kao rješenje, ili nešto najbliže rješenju, funkcionalnost rada procesora u različitim modevima rada, odnosno, u privlegiranom i neprivilegiranom izvršnom modu i taj način omogućuje autorizaciju koda. To je zaštita na razini kernela, odnosno, jezgre procesora računala.

Nedostaci, odnosno, rupe u softveru su vrlo često način neautoriziranog širenja digitalnog sadržaja.. Naime, one vrlo lako omogućuje probijanje zaštite koja je stavljena od strane izdavača te se može jednostavno i brzo proširiti, na štetu izdavača. Ovaj način je gotovo uvijek slučaj kod zaštite kopiranja. Mehanizmi koji pružaju zaštitu od neovlaštenog kopiranja [Eliam, 2005, str. 313] moraju biti nevidljivi njihovim korisnicima, a opet moraju biti kompatiblini s različitim softverskim sustavima te hardverom koji pokreće te sustave. Postoje nužne pretpostavke koji bi se trebale ugraditi u shemu zaštite od kopiranja, a to su: otpornost na napade, transparentnost digitalnog sadržaja krajnjim korisnicima, fleksibilnost.


    6.1.2.  Tipovi zaštite kopiranja

Postoje različiti tipovi zaštite digitalnog sadržaja od neautoriziranog kopiranja. Njihova efikasnost se razlikuje obzirom na vrstu digitalnog sadržaja koji se štiti. Tako načini zaštite kopiranja mogu biti [Eliam, 2005, str. 314]: zaštita posredstvom medija, serijski brojevi, zaštita temeljena na hardveru, upotreba softvera kao usluge kako bi se spriječilo softversko piratstvo. Također se još koristi DRM (Digital Rights Managment), zaštita vodenim žigom (watermarking), te pouzdano korištenje računala. Softver kao usluga (software as service) omogućuje zaštitu od piratstva na način da je sam softver instaliran na serveru te mu klijenti pristupaju putem interneta ili nekom drugačijom konfiguracijom. To je vrlo efikasan način zaštite od piratstva te neovlaštenog kopiranja, iako često održavanje takvih tehnologija zna biti prilično skupo.

 Napredni koncepti zaštite - kriptografija

Kako bi se postiglo programsko rješenje koje je nemoguće krekirati potrebno je koristiti enkripciju. Digitalni sadržaj se kriptira pomoću određenih algoritama te se na isti način dekriptira. Kriptirani sadržaj neće biti koristan napadaču ukoliko nema pravi algoritam za dekripciju istog.

Prema navodu Elaima [Eliam, 2005, str. 318] sam problem se vrlo lako može definirati. On navodi kako je je razlog što CPU – procesor najčešće provodi operacije dekripcije i enkripcije, ključ za dekripciju te dekriptirani podaci ne mogu se sakriti od napadača. Kao rješenje navodi kako je potrebno upotrijebiti hardver za dekripciju na računalu krajnjeg korisnika odnosno, onog tko dekriptira to. Potrebno je ključ za dekriptiranje pohraniti na tom računalo, naravno taj ključ ne smije biti javno dostupan (ovisi i arhitekturi ključeva koja se koristi). Na portalu Laboratorija za sigurnost i signale, u dokumentu o reverznom inženjeringu navode [sigurnost.lss.hr, 2011, str. 12] kako on omogućuje da se ovom metodom mogu u programskom kodu kriptografskog algoritma pronaći sve ranjivosti te ustanovit razinu sigurnosti u odnosu na izvorni algoritam kriptograskog programskog koda. Također definiraju kriptoanalizu kao „provjeru i razbijanje kriptografskih algoritama“ [sigurnost.lss.hr, 2011, str. 12], te ukazuju na širinu područja kojom se ista bavi. Kripto – procesori [Eliam, 2005, str. 318] označuju pristup zaštiti kopiranja softvera. Iako je originalni dizajn ovog pristupa bio namijenjen samo zaštiti softvera od piratstva, nove i modernije implementacije omogućuju osim zaštite softvera i povećanu generičku razinu zaštite digitalnih prava za menadžment aplikacija. Način provedbe ovog pristupa omogućuje da procesori gotovo istovremeno rade enkripciju i dekripciju digitalnog sadržaja, te to gotovo onemogućava krekiranje takvih sadržaja ili aplikacija. Naravno, to isključuje fizičke napade na digitalni sadržaj, tu kripto-procesori nemaju nikakvog utjecaja. Eliam navodi i određene korake kako zaštiti aplikaciju korištenjem kripto-procesora [Eliam, 2005, str. 319]:

   1.	Individualnim procesorima se dodjeljuje par ključeva za enkripciju te serijski broj kao dio „proizvodnog procesa“.  Serijski broj se čuva u bazi podataka, zbog provjere autentičnosti, obično kod proizvođača procesora koji je generirao serijski broj.
   2.	Kada krajnji korisnik kupi program, razvojni programer zahtijeva serijski broj procesora korisnika, te obavještava zakonadavna tijela za dobivanje javnog ključa koji priprada tom serijskom broju.
   3.	Binarni program je enkriptiran pomoću javnog ključa te poslan krajnjem korisniku, vlasniku procesora pripadnog serijskog broja.
   4.	Krajnji korisnik pokretanjem enkriptiranog programa omogućuje kripto-procesoru dekripciju koda koji predstavlja neki digitalni sadržaj pomoću interno pohranjenog ključa za dekripciju koji predstavlja privatni ključ korisnika (enkripcija javnim i privatnim ključem). Kripto-procesor sprema dekriptirani kod u posebni memorijski dio kojem ne mogu pristupati ostale aplikacije.
   5.	Kod se izvršava direktno iz nedostupne memorije za ostale programe.

Pomoću ovih pet osnovnih koraka može se vidjeti kako se odvija proces enkripcije pomoću javnog i privatnog ključa te razinu pristupa tako kriptiranim digitalnim sadržajima. No, ni ovaj način zaštite digitalnog sadržaja nije 100% siguran, kako navodi Eliam [Eliam, 2005, str. 319] zbog toga jer napadači, iako ne mogu pristupiti kriptiranom sadržaju, mogu pristupiti podacima koji su se generirali za vrijeme enkripcije samog sadržaja te tu ranjivost iskoristiti u svoju korist. Ipak, ako se softver kriptira sa dovoljno dugim ključem te se pazi na sigurnost ključeva enkripcija može biti jako dobra zaštita digitalnog sadržaja.

 Razbijanje zaštite

Postoji mnogo načina na koje se može razbiti zaštita koja štiti digitalni sadržaj. Krekiranje je jedna od tih mogućnosti i k tome je vrlo uspješna u tome. Toj uspješnosti pridonosi i primjena metoda reverznog inženjeringa nad digitalno pohranjenim podacima. Oni koji se bave krekiranjem, moraju prvo odrediti kako zaštitni mehanizam nad digitalnim sadržajem funkcionira da bi ga mogli onesposobiti, odnosno, iskoristiti njegovu slabost kako bi razbili cjelokupnu zaštitu koju on pruža. To je vrlo važno jer se danas sve više napada na sigurnost odnosi na DRM tehnologije koji štite tijek prava materijala koji je zaštićen od kopiranja, kao što su filmovi, glazba, knjige i sl. [Eliam, 2005, str. 357] Također je važno navesti kako zaštitu od krekiranja mogu raditi oni koji i sami krekiraju druge programe ili neki druge digitalne sadržaje, inače zaštita od krekiranja koja je izrađena od nekog stručnjaka koji se bavi zaštitom, ali ne i krekiranjem kao načinom zaštite, nikad nije previše učinkovita. Vrlo se lako može krekirati. A bitno je i navesti da se sve vrste i tehnike krekiranja smatraju ilegalnim radnjama u većini zemalja.

Navesti ćemo samo neki tehnike krekiranja kako ih navodi Elaim [Eliam, 2005, str. 319-345]: zakrpe (patching), keygenMe-3, kopiranje algoritama ključeva. Zakrpe predstavljaju dijelove softvera koji su dizajnirani kako bi riješili postojeće slabosti na sustavu. Mjesta gdje je izvorni digitalni sadržaj imao neke slabosti se pomoću krekiranja daju iskoristiti, a vrlo često su to sigurnosni problemi i različiti drugi bugovi. Sami proizvođači digitalnih sadržaja, odnosno, softvera koriste se metodama reverznog inženjeringa kako bi pronašli slabosti te ih u vidu zakrpa koji zatim dostavljaju korisnicima njihovih aplikacija te ostalih digitalnih sadržaja isporučili. To vrlo često korisnici Windows operativnog sustava, a i ostalih operativnih sustava, mogu vidjeti u vidu update-a koji se izvršavaju, obično prilikom gašenja sustava. Naravno, to ovisi i o vrsti operativnog sustava, odnosno je li njegov kod javno dostupan kao open source (Linux, Unix) ili se koristi u komercijalne svrhe pa je izvorni kod programa zaštićen i korisniku nedostupan (Microsoft Windows). Korisnici open source operativnih sustava, ali i drugih manjih aplikacija takvog tipa mogu sami kreirati vlastite zakrpe jer ima je sav kod dostupan, dok Windowc korisnici moraju čekati kada se izda zakrpa za pronađeni bug te tek onda zaštiti taj dio svog operativnog sustava. Windows opeartivni sustav, u svrhu zaštite propusta koji se pronađu u sustavu omogućuju svojim korisnicima da pomoću Windows Installer Patch datoteke [msdn.microsoft.net, 2011, http://msdn.microsoft.com/en-us/library/windows/desktop/aa370596(v=VS.85).aspx] skinu izdane zakrpe i na taj način pojačaju sigurnost svoje operativnog sustava. Datoteka koje služe kao zakrpe imaju ekstenziju „.msi“ te one omogućuju nadogradnju i popravak slabosti koji je trenutna aplikacija ili operativni sustav izdan od Microsofta ima. Prije nekoliko dana, točnije 12. prosinca, je otkriven sigurnosni propust u Adobe Readeru, te je isti označen kao kritičan zato jer mogućem napadaču omogućuje potpunu kontrolu nad sustavom, kako izvještava tehnografija.net [tehnografija.net, 2011, http://tehnografija.net/sigurnost-2/sigurnosni-propust-u-adobe-reader-u/]. Također navode kako je taj propust najopasniji za korisnike Windows operativnih sustava jer jedino na tom operativnom sustavu taj propust predstavlja slabu točku. Kako bi riješili ovaj problem, iz Adobe-a će izdati zakrpu (patch) koja će riješiti ova problem.

KeygenM-3 je način krekiranja kod kojeg se stvara program koji podržava algoritam za generiranje ključeva unutar same tehnologije koja omogućava zaštitu te teoretski omogućava neograničen broj važećih ključeva koji su dostupni svima za uporabu. [Eliam, 2005, str. 364] Jednostavnije rečeno, oni koji krekiraju umjesto da stalno imaju probleme s novim ključem, jednostavno kopiraju, odnosno, krekiraju sam generirani ključ te na taj način pomoću keygen programa koji sadrže točne replike serijskih brojeva ili drugih ključeva mogu pristupiti zaštićenim aplikacijama ili dijelovima informacijskog sustava. Keygen algoritam obično uzima varijable kao što je serijski broj te neki korisničko ime i pomoću njega stvori novi ključ proizvoda koji korisnik mora utipkati u zaštićeni program ili dio informacijskog sustava kako bi ga aktivirao i mogao dalje koristiti ili pristupiti zaštićenim podacima koje taj program pohranjuje.


  6.2.  Maliciozni kod

Maliciozni kod je danas često upotrebljavani pojam. On označava program ili neki kod koji radi bez znanja korisnika operacijskog sustava ili nekog drugog informacijskog sustava i u većini slučajeva na štetu vlasnika sustava. To je danas česta pojava. Prije deset-petnaest godina sam koncept i pojam malicioznog koda (softvera) nije bio toliko raširen i poznat. Naravno, znalo se da postoje programi koji su izrađeni s namjerom da naštete nekom korisniku, ali opet takvi slučajevi nisu bili toliko česti. No, razvoj i širenje interneta to mijenja. Što se više ljudi uključivalo na globalnu mrežu te počelo razmjenjivati svoje podatke na taj način, linearno je počeo rast i širenje malicioznog koda. Uzrok tome nije jedan, zbog mnogih stvari se koristio maliciozan kod, odnosno, softver koji omogućavao izvršavanje radnji koji su uglavnom zaobilazile zakonska ograničenja. Kako je više ljudi koristilo internet kao sredstvo komunikacije, razmjene podataka, pa čak i poslovanja, sve se više važnih podataka povlačilo tom globalnom mrežom. Tako oni koji su, naprimjer htjeli prisvojiti nečije korisničke podatke od bankovnog računa, što nije zakonito ni moralno, su uz pomoć malicioznog koda i malo vještina su to i uspjevali postići. Naravno, to nije jedini razlog širenju i razvijanju svih aspekata malicioznog koda, ali svakako je jedan od onih iskonskijih zašto se krenulo s cijelom pričom o malicioznom kodu i zašto ga oni koji preferiraju rad mimo pravila i zakona vole.

Kako se razvijaju svi aspekti informacijske tehnologije i poslovanja, interneta i razmjene digitalnih sadržaja, tako i maliciozni kod mora napredovati i prilagođavati se uvjetima. Naravno, razvojem tehnologija i širenjem mogućnosti kojima su one posrednik, nekoliko različitih softverskih rješenja malicioznog koda nije više dovoljno. Različite konfiguracije i načini komunikacije zahtijevaju malo više i od malicioznog koda da bi bio funkcionalan i koristan onima koji ga koriste. Tu se opet dolazi do reverznog inženjerstva. Ovaj način pomaže i u stvaranju malicioznog koda, ali i u stvaranju obrambenih mehanizama protiv njega. Naravno, ovisi za što se tko opredijeli. U stvaranju malicioznog koda i softvera reverzni inženjering pomaže pronaći i iskoristiti moguće slabosti pojedinog informacijskog sustava ili nekog njegovog dijela, programa. Iskorištavanjem tih slabosti može se razviti vrlo dobar i efikasan maliciozni softver za kojeg korisnik nekog informacijskog sustava ili programa neće biti ni svjestan da ugrožava njegov operativni sustav i podatke koji su pohranjeni u njemu. To je loša strana za koju se može koristiti reverzni inženjering. Naravno, na isti način se reverzni inženjering koristi kako bi pomogao u obrani računala i programa te cijelih informacijskih sustava od malicioznog softvera. To većinom rade tvrtke koje proizvode antivirusne programe te ostale načine zaštite od malicioznog softvera (koda).

Reverzni inženjering koji se koristi u svrhu obrane od malicioznog koda koriste istraživači u tvrtkama koje se bave izradom i plasiranjem antivirusnih te ostalih zaštitnih aplikacija. Ti istraživači koriste tehnike reverznog inženjeringa kako bi analizirali te odredili opasnost koja prijeti od malicioznog koda te istražili njegove slabosti i pronašli načine kako bi stvorili efikasne antivirusne i zaštitne programe koji bi otklonili te slabosti ili bar umanjili njihov značaj.


    6.2.1.  Vrste malicioznog koda (malwera)

Tijekom godina razvile su se različite vrste malicioznog koda (malware). Svaka od tih vrsta se prilagođava te omogućuje iskorištavanje slabosti na programima ili cijelim informacijskim sustavima korisnika. Naravno, ovisno o vrsti i načinu njegova rada ti maliciozni kodovi mogu napraviti različite štete. Tako postoje ove vrste malicoznog koda (najpoznatije i najvažnije) [Eliam, 2005, str. 274-7]:

  -	virus,
  -	crv (worms),
  -	trojanci (trojan horses),
  -	bakdor (backdoors),
  -	mobilni kod
  -	adware/spyware
  -	bootnet.

Svakog od njih ćemo ukratko opisati i objasniti.

Virus

Virus predstavlja samoreplicirajući program, odnosno, dio koda, koja ima zlu namjeru. [Eliam, 2005, str. 274] Oni predstavljaju jednu od najstarijih vrsta malicioznog softvera (malwera), no ovih dana više nisu toliko aktualni i ne spadaju u sam vrh najboljeg i najkorištenijeg malicoznog koda (softvera). Virus, kako navodi Eliam [Eliam, 2005, str. 274, predstavlja jedinstvenu vrstu koda koja se samo replicira, odnosno, kopira sama sebe, kada god je u mogućnosti.

Virusi se javljaju u različitim vrstama i s različitim namjerama. Neki su dizajnirani tako da uništavaju vrijedne informacije, dok drugi mogu zalediti (freeze) cijeli sustav te na taj način prouzročiti problem. Naravno, postoje mnoge druge vrste koje rade različite druge probleme korisniku nekog sustava. To spada u opasnije tipove virusa. Postoje i neki manje opasni virusi, čijim dizajnerima čak nije ni cilj našteti nego samo uznemiravati korisnike kod kojih se virus implementira. Tako ti virusi znaju samo prikazivati različite poruke korisniku kako bi privukli njegovu pažnju, ili ga jednostavno dekoncentrirali.

Način širenja virusa nije jako kompliciran. Oni se jednostavno zakače za neku izvršnu datoteku, odnosno, neki execute file sa ekstenzijom „ .exe“ koja se koristi na Windowsima te tako zaraze sustav. Naravno, kad jednom zaraze sustav, onda se oni zakače na hrpu drugih izvršnih datoteka (.exe) u tom sustavu te se na taj način šire kroz sustav, ali i van sustava. Čim korisnik inficiranog sustava prenese neke podatke ili datoteke te se među njima nalazi inficirana izvršna datoteka to isto se događa drugom operativnom sustavu ili programu. Njihovo širenje vrlo često uzrokuju sami ljudi međusobnom razmjenom programa i drugih digitalnih sadržaja. Eliam navodi [Eliam, 2005, str. 274] kako danas postoji vrlo malo pravih virusa, te da se ona vrsta virusa koja se danas širi internetom zove crv (worm).

Crv (worm)

Crv je maliciozni kod ili program koji je prema vrsti opstanka sličan virusu. On se kao i virus samostalno replicira i na taj si način omogućuje opstanak. No, on to radi preko Interneta, pa je tu glavna razlika između virusa i crva. To znači da virusom korisnik češće zarazi računalo bez interneta, dok se crvom sustav zarazi obično posredstvom interneta te za repliciranje i širenje ne treba čovjeka kao posrednika. Šire se vrlo jednostavno te korisnici u većini slučajeva nisu ni svjesni da im je sustav inficiran crvima, obično preko interneta. Oni se obično smjeste u neke pozadinske procese operativnog sustava, stoga je teško uvidjeti zarazu sustava. Internetom se, kako navodi Eliam [Eliam, 2005, str. 274] mogu širiti vrlo brzo te ih je nemoguće kontrolirati i tim vrlo kratim odsječcima vremena kad vrlo često prouzrokuju veće štete ili smetnje inficiranim sustavima. Oni se mogu naći na gotovo svim računalima danas, jer su gotovo svi spojeni na internet i neki oblik interakcije putem interneta. To pogoduje vrlo brzom i efikasnom širenju crva.

Prema Eliam [Eliam, 2005, str. 274] crvi koriste nekoliko tehnika kako bi se širili. Jedna od njih je uzimanje prednosti nad određenim operacijskim sustavom ili programom gdje pronađu neki nedostatak, odnosno, slabost, koja im omogućuje da se sakriju u naizgled bezopasan podatkovni paket. Tako sakriveni obično ne privuku pozornost korisnika te sami sebi omogućuju izvršavanje svoje zadaće nad operativnim sustavom ili programom gdje su sakriveni. Drugi način je svima poznati e-mail. To su obično napadi masovnih oblika te takvi crvi obično skeniraju kontakte korisnika te mu se jednostavno pošalju mailom, kao poruka (spam poruka). Obično se smjeste kao privitak poslanom mailu korisniku. Većina mail programa zahtjeva od korisnika da sam otvara svoju primljene poruke pa tako korisnik sam otvara mail poruku sa inficiranim privitkom. Kad korisnik otvori inficirani privitak (attachment) crvi prodru u njegov sustav, gotovo ih je nemoguće zaustaviti. Naravno, crvi se mogu širiti sa namjerom pa uopće ne treba interakcija sa korisnikom kako bi inficirali sustav ili neku aplikaciju.

Trojanci (Trojan horses)

Trojanci predstavljaju tip malicioznog softvera čiji se način rada temelji na legendi o Trojanskom konju iz Grčke povijesti. Naravno, kod malicioznog koda nema trojanskog konja, već je sličnost u načinu rada i izazivanju štete za domaćina gdje se implementira. Kako navodi Elaim [Eliam, 2005, str. 275] većina malicioznog koda koji spada u trojance su uglavnom funkcionalni programi pa tako vrlo često korisnici ne posumnjaju u zlonamjernost tog softvera ili nekog drugog digitalnog sadržaja. Kako navodi isti autor, funkcionalni program kojeg korisnik koristi radi normalno dok se u pozadini maliciozni kod izvršava te ostvaruje interese napadača. Kao što se može vidjeti, radi se o maskiranju ili skrivanju malicioznog koda kako bi izvršio svoju svrhu unutar funkcionalnog programa.

Način širenja trojanaca je raznolik. Mogu se širiti fizičkim medijima, kao što su stikovi, CD-ovi, DVD-ovi, prijenosni tvrdi diskovi (HDD) te mnogi drugi mediji (digitalni). Trojanci se mogu širiti i Internetom. Vrlo često se funkcionalni programi ili neki drugi inficirani digitalni sadržaji razmjenjuju između korisnika, trojanci se također šire i Windows Live Messengerom [Budić, Špoljar, Krmar, 2011, str. 12] te mnogim drugim načinima preko interneta. Elaim [Eliam, 2005, str. 275] navodi kako se, pogotovo na Windows platformi, mogu lako i jednostavno širiti maliciozni kodovi trojanaca. Navodi kako se ukoliko se stavi dovoljno dugi razmak između ekstenzija, a kako znamo u Windows korisničkom okruženju tipovi datoteka se mogu prepoznati prema vrsti ekstenzije, npr. „Slika1.jpeg .exe“ korisnik vjerojatno neće ni primijetiti drugi nastavak ekstenzije te će bez imalo sumnje otvoriti datoteku te će samim time pokrenuti i „ .exe“ dio implementiran unutar te korisnog digitalnog sadržaja koji će izvršiti svoju svrhu. Postoji više vrsta malicioznog koda tipa trojanskog konja [Budić, Špoljar, Krmar, 2011, str. 13]:

   -	dopper,
   -	backdoor,
   -	downloader.

Dopper je vrsta trojanskog konja koja se implementira u računalo korisnika te igrajući ulogu žrtve namjerno dopušta drugom virusu naseljavanje u korisničko računalo. Downloader je vrsta trojanskog konja koji je također implementiran u korisničkom računalu te on pristupa različitim internetskim stranicama, naravno uz uvjet postojanja veze između računala i interneta, te sa njih skida maliciozne datoteke i pokreće ih. [Budić, Špoljar, Krmar, 2011, str. 13]

Backdoor

Prema definiciji Elaima [Eliam, 2005, str. 276] backdoor je vrsta malicioznog koda, odnosno, softvera, koji kreira pristupni kanal preko kojeg se napadač može spajati kao bi kontrolirao, špijunirao ili vršio neke druge radnje sa sustavom korisnika. Isti autor navodi kako se backdoor, odnosno njegov izvorni kod, može implementirati unutar dobrog programa, a to može učiniti neki developer koji radi na tom programu te kod staviti odmah na početku unutar programa.

Backdoor se može širiti preko virusa, crva ili trojanskog konja i to bez znanja korisnika na čiji se sustav instalira, te tako instaliran omogućava nekoj trećoj osobi, napadaču da ima nesmetan i neovlašten pristup računalu i računima korisnika. [Budić, Špoljar, Krmar, 2011, str. 16] Isti autori također navode kako backdoor obično znaju koristiti programeri kako bi isprobali te pronašli slabosti u sustavu te izvršili debug.

Na Windows platformi, kao što smo imali prilike raditi na laboratorijskim vježbama iz ovog kolegija, backdoor se vrlo često može prikačiti za Windows Mesengger aplikacije te tako komunicirati s trećom stranom u vidu update-a ili nečeg sličnog, bila ona server ili stvarni čovjek.

Mobilni kod

Elaim definira mobilni kod [Eliam, 2005, str. 276] kao „klasu benignih programa kojima je specijalno namijenjena mobilnost kako bi se mogle izvršavati ne velikom broju sustava bez eksplicitne instalacije od strane korisnika.“. Isti autor navodi kako su danas takvi kodovi većinom dostupni na internetu te se u obliku raznih digitalnih sadržaja mogu skinuti (download) te samostalno pokrenuti bez da korisnik zna nešto o tome. Često znaju navesti korisnika porukom da se program gotovo već skinuo i da pritiskom na gumb potvrde prihvate skidanje, odnosno download, do kraja. Korisnici obično to prihvate, nesvjesni da su upravo na svoje računalo skinuli i svoj operacijski sustav zarazili malicoznim kodom.

Neke se vrste mobilnog koda mogu instalirati unutar Java apleta u bytecode formi te tako vrlo često onemogućuju ili otežavaju dekompajliranje pa čak i reverzni inženjering nad tim kodom. To je vrlo uspješan način širenja malicioznog koda. [Eliam, 2005, str. 276]

Adware/Spyware

Ovo je novija vrsta malicioznog koda koja je vrlo brzo stekla veliku popularnost. Spyware predstavlja vrstu malicioznog koda koji se instalira na računalo korisnika od strane napadača. Namjera mu je slanje privatnih podataka korisnika njegovom kreatoru, odnosno, napadaču. Podaci koje spyware može prikupljati mogu biti podaci o računima (bankovnim, korisničkim,...), lozinke, brojevi kreditnih kartica, e-mail kontakte, i dr. oni se najčešće pokreću samostalno, skinuti od strane žrtve dobro umaskirani tako da korisnik ne zna da je skidanjem nekog digitalnog sadržaja skinuo i malicozni kod. [Budić, Špoljar, Krmar, 2011, str. 16] Postoji više vrsta spywer malicioznog koda [Budić, Špoljar, Krmar, 2011, str. 16]:

  -	adware,
  -	keyboard logger (keylogger),
  -	browser hijacker,
  -	komercijalni spyware,
  -	dialer.

Adware je jedan od oblika spywarea pomoću kojeg treća strana (napadač) može prikupljati informacije o interesima korisnika kako bi ih nakon toga mogao zasuti porukama, odnosno, propagandom o podacima koje taj malware prikuplja o korisniku očekujući da bi mogao saznati neke vrjednije informacije od samog korisnika sustava. Oni se vrlo često javljaju kad se u pokrenutom programu pojave neke propagandne poruke. Napadač pomoću tih poruka, koje vrlo često preko popup prozora ili raznih traka šalju dodatni maliciozni kod koji zatim prikuplja podatke o korisniku. Korisnici bi prilikom instalacije nekog programa ili drugog digitalnog sadržaja trebali pročitati Policu o privatnosti (Privacy Policy) te EULA datoteku. [spywareguide.com, 2011, http://www.spywareguide.com/spydet_2376_whenu_savenow.html] Keyboard Logger je isto jedan od oblika malicioznog koda koji spada u vrstu spywarea. Kako mu i ime kaže, on se nakon implementacije na računalo korisnika ponaša tako da u jednu zasebnu datoteku sprema podatke o svim tipkama koje je korisnik koristio na svojoj tipkovnici da bi ih nakon toga proslijedio svom tvorcu (napadaču). Za takav oblik spywarea je neophodna povezanost s internetom, kako bi se omogućila komunikacija između malicioznog softvera te treće strane, obično napadača. Ovaj oblik spywarea može predstavljati veliku opasnost za korisnika računala.

Browser Hijacker isto spada u vrstu spywarea, a kako mu sam naziv kaže, on ugrožava rad web preglednika korisnika. Jednostavnije rečeno, preuzima kontrolu nad web preglednikom korisnika te mu, naprimjer za početnu web stranicu može postaviti neku drugu stranicu prepunu spyware malicioznog softvera, a može korisniku podmetati i razne propagandne poruku kako bi lakše pratio njegove interese. [Budić, Špoljar, Krmar, 2011, str. 18] Komercijalni spyware također predstavlja oblik malicioznog koda koji se legalno ugrađuje u programe korisniku, ukoliko se nekom uslugom koju korisnik prima to zahtijeva, naravno, korisniku to zna i on na to pristaje potpisom na ugovor te čitanjem ugovora (EULA). Dailer vrsta malicioznog spywarea je bila prije puno više popularna vrsta malicioznog koda. Danas se više toliko ne koristi jer se korisnici uglavnom na internet spajaju putem DSL linija, a sve manje koriste dial-up modeme za spajanje na internet. Naime, to je vrsta spyware malicioznog koda koja je iskorištavala ne dijeljenje podatkovnog i govornog dijela linije te je omogućavala korisnicima da se prilikom spajanja na internet prespoje preko neke strane države kako bi korisnik platio obično vrlo velike račune. Uvođenjem DSL linija se pomoću splitera odjeljuje podatkovni dio o govornog dijela prometa pa se prilikom pristupa internetu ne može prespojiti.

Botnet

Botnet nije pravi oblik malicioznog koda. To je skup agenta, odnosno, programa instaliranih na računala korisnika (zombija) koji su pod kontrolom treće strane (napadača) te oni na tom računalu izvršavaju one radnje koje od njih traži napadač. Korisnika obično nije svjestan da mu računalo kontrolira agent – bot koji je pod kontrolom treće strane, odnosno napadača. Oni se obično šire putem crva te šalju spam poruke kako bi se proširili na više računala preko interneta.

Prema izvješću Kaspersky Labsa te Symanteca oni predstavljaju jednu od najvećih prijetnji koje se mogu naći na internetu, kako navode na portalu searchsecurity.techtarget.com. [searchsecurity.techtarget.com, 2004, http://searchsecurity.techtarget.com/definition/botnet] Isti portal navodi kako se ovako organizirani skup botova koji su organizirani u botnet mogu se formirati tako da preusmjeruju promet prema nekom određenom računalu ili serveru, ili mogu uzrokovati previše prometa prema nekom serveru te ga srušiti, a poznati način je pomoću DDoS (Distributed Denail of Service) napada.


    6.2.2.  Malware u budućnosti

Prema navodu Eliama [Eliam, 2005, str. 278] misli se da je današnji poznati maliciozni softver (malware) je neusporediv s onime što se očekuje u budućnosti. Naravno, sve to je omogućeno razvojem tehnologije i informacijskih sustava. Kako oni postaju sve veći i kompleksniji postoje i veće mogućnosti njihove ranjivosti te propusnosti koje mogu iskoristiti napadači. No, i sami napadači će razvijati sve bolji i otporniji malicozni kod i programe pa tako ustaljene mjere zaštite sigurnosti korisnika više neće biti dovoljne, odnosno, maliciozni kod će moći zaobići zaštitu puno lakše, a vjerojatno će ih biti i puno teže maknuti iz sustava korisnika te će izazivati puno veće štete od sadašnjih.

Prema predviđanjima, koje navodi Eliam [Eliam, 2005, str. 276] naglašena su dva koncepta malicioznog koda koji će vjerojatno u skorijoj budućnosti postati aktualniji, a to su:

  -	crvi koji kradu informacije (Information-Stealing Worms)
  -	BIOS/Firmware maliciozni kod.

Crvi koji kradu informacije temelje se na kriptografiji te će nastojati pomoću nje preuzimati podatke korisnika. Sama će kriptografija svojim asimetričnim ključevima omogućiti napredak crva koji kradu informacije. Tu se mogu još naći i kleptografski crvi, odnosno, maliciozan kod koji se ugradi unutar ključa za enkripciju i na taj način omogućuje pristup svim enkriptiranim podacima. Oba ova načina temelje se na crvima, a to znači da korisnici neće ni biti svjesni da se njihov digitalni sadržaj prisluškuje i prisvajaju korisne informacije iz njega. [Eliam, 2005, str. 276]

BIOS/Firmware maliciozni kod predstavlja višu razinu. On bi se implemenitrao na razini samog sustava, odnosno omogućio bi si rad s datotečnim sustavom operacijskog sustava ili bi se implementirao u kod koji koristi procesor te na taj način kontrolirao računalo i operacijski sustav korisnika. U svakom slučaju, ova vrsta malicioznog koda implementirana u samom srcu operacijskih sustava i računala bila bi gotovo nemoguća za pronaći, a štete koje bi na taj način mogla izazvati jako velike. Reverzni inženjering tu ima posla i na programaskoj razini, ali i na mehaničkog razini. [Eliam, 2005, str. 276]


    6.2.3.  Polimorfizam i metamorfizam

Polimorfizam je tehnika koja omogućuje antivirusnim programima identifikaciju virusa prema njegovom jedinstvenom potpisu te je ograničen na površne modifikacije dekripcijskog koda malicoznog softvera.. Za to je potrebno raditi update zaštitnih progama učestalije kako bi se saznali novi potpisi malicioznog koda. [Eliam, 2005, str. 282] Najjednostavniji pristup polimorfizmu temelji se na enkripciji programa korištenjem nekog random ključa i njegom dekripcijom za vrijeme trajanja, a program ili drugi digitalni sadržaj mora zadržati svoju funkcionalnost. Polimorfizam koji se javlja kod reverznog inženjeringa malicioznog koda ima dvije značajne slabosti. [Eliam, 2005, str. 282] Većina antivirusnih programa skenira memoriju kako bi saznala potpise virusa, i tu se javlja problem zaštite jer se u memoriji koristi nekriptirani podaci, stoga virus samo treba naći potpis pokrenutog programa i usporediti ga s onim koji on ima spremljen na datoteci koji je inficirao. Druga slabost se vidi u statičnosti dekripcijskog koda, jer se program kako bi radio, u memoriji računala mora dekriptirati, odnosno mora ići izvorni kod programa pa se prema tome može vidjeti njegov potpis.

Metamorfizam za razliku od polimorfizma koji je ograničen na površne modifikacije dekripcijskog koda malicoznog softvera, je nova logička razina koja omogućuje da se umjesto enkripcije pojedinih dijelova programskog koda zamijeni cijeli program svaki puta kada se replicira. To je dobar način zaštite programskog koda, zato jer se svaka nova verzija malicioznog koda obično značajno razlikuje od prethodnih pa tako i njezin potpis nije više jednak prethodnom i to otežava rad antivirusnih programa. [Eliam, 2005, str. 284] Metamorfizam zahtjeva od malicioznog koda snažne programe za analizu koda koji moraju biti ugrađeni u sam kod malicioznog softvera, a to nije lako izvedivo. Naglasak se stavlja na česte izmjene koji su omogućeni metamorfizmom, neke od automatskih izmjena koje ova tehnika pruža su: izmjena instrukcija i registara, izmjena reda instrukcija, okretanje uvjeta, unos nepotrebnih instrukcija (garbage instruction), izmjena reda instrukcija. [Eliam, 2005, str. 284-5] Reverzni inženjering koji se temelji na metamorfizmu može stvoriti vrlo prilagodljive vrste malicioznog koda koji će se vrlo teško locirati ali i identificirati.


  6.3.  Metode zaštite

Ovdje se može vidjeti kako se primjenjuje te koje su posljedice primjene reverznog inženjeringa kao tehnike u zaštiti sigurnosti informacijskih sustava i svih njihovih dijelova. No, njegova primjena je višestruka pa tako se može tehnikama reverznog inženjeringa i pristupiti povećanju sigurnosti informacijskih sustava. Kroz ovaj se dio vidjelo koliko reverzni inženjering može biti opasan alat u ugrožavanju sigurnosti. Analizom programa, odnosno, dijelova informacijskih sustava se može napraviti velika šteta u zaštiti sigurnosti, ali isto tako može služiti i služi u povećanju sigurnosti kroz otklanjanje slabosti sustava. Najvažnije je zaštiti izvorni kod programa ili cijelog informacijskog sustava na razini asemblera, odnosno, treba pokušati sakriti kod na asemblerskoj razini. Neke metode zaštite od reverznog inženjeringa kojim se služe napadači kako bi diskreditirali sadržaj te pronašli rupe, odnosno, slabosti u informacijskom sustavu ili nekim njegovim dijelovima su [sigurnost.lss.hr, 2011, str. 20]: zaštita medija, serijski brojevi, zaštita sklopovlja, program kao usluga (software as service), zakrpe (patch), kriptografija, obfuskacija koda (onemogućavanje čitljivosti asemblerskog koda), promjena podataka.


7.  Alati reverznog inženjerstva
8.  Reverzni inženjering mehaničkih uređaja
9.  Antireverzni inženjering

Antireverzni inženjering je inženjering koji koriste tvorci aplikacija te ostalih programa informacijskih sustava kako bi spriječili druge od primjene istih tehnika reverznog inženjeringa kako bi njihov kod iskoristili u krive svrhe. To u većini slučajeva ponajviše vrijedi za one programe i ostale aplikacije koji nisu izdani za upotrebu kao open source kod.Vrlo se često spominje i DRM te on gotovo zahtjeva primjenu antireverzivnih tehnika kako bi se zaštitila prava te zaštita od kopiranja. Reverzni inženjeri mogu iskoristiti svoja znanja i tehnike poznavanja reverznog inženjeringa te kod digitalnog sadržaja na asemblerskog razini prilagoditi tako da mu mogu pristupiti ili ostvariti neke druge ciljeve.

Kako navodi Eliam [Eliam, 2005, str. 328] neke platforme za razvoj softvera zahtijevaju primjenu određenih antireverznih mjera kako bi onemogućile transformaciju njihovog koda u neke niže razine oblikovanja izvornog koda. Tako većina aplikacija koje se temelje na bytecode platformama, kao što su Java i .NET koriste alate za obfuskaciju kako bi malo smanjile čitljivost izvornog koda. Reverzni inženjering se vrlo često primjenjuje u izradi i analizi malicioznog koda te drugih načina ugrožavanja sigurnosti korisničkih aplikacija i njihovih informacijskih sustava kao i kod zaštite od kopiranja te kriptiranja. Dvije najpoznatije metode koje onemogućuju drugim korisnicima da pomoću tehnika reverznog inženjeringa ugroze sigurnost digitalnog sadržaja, su antidebbuging i antidisembling.[Kaminsky, 2008, str. 110] ove dvije metode se primjenjuju kroz različite pristupe antireverznog inženjeringa [Eliam, 2005, str. 328]:

  -	eliminacija simboličkih informacija,
  -	obfuskacija programa (kriptiranje),
  -	ugradnja antidebbugerskog koda.

Eliminacija simboličkih informacija je način kojim se iz izvršnih datoteka „ .exe“ uklanjaju sve simboličke informacije. To se uglavnom odnosi na informacije, odnosno tekstualne poruke koje se nalaze na bytecode razini te koje se mogu pomoću asemblera otkriti. To primarno vrijedi za aplikacije i programe pisane, kako je već navedeno, u Java i .NET razvojnim platformama.

Obfuskacija koda je već obrađena, no za nju je najvažnije napomenuti da ona smanjuje ranjivost programa i aplikacija te na taj način otežava primjenu tehnika reverznog inženjeringa. Razine na kojima je korisna logička, podatkovna te organizacijska koje su obsfukacijom koda zadržavale istu funkcionalnost, samo im se čitljivost bitno smanjila.

Ugradnja antidebbuging koda je također jedan od pristupa koji koji služi ometanju „live“ analize koja se izvršava na asemblerskoj razini. One ometaju reverzne inženjere kad pokušavaju prilagoditi kod pomoću reverznih tehnika. Temelji se na ideji gdje program namjerno oštećuje kod ili onemogućava njegovo daljnje izvođenje ukoliko ukoliko primijeti da je u procesu debbuginga. [Eliam, 2005, str. 329]


  9.1.  Java i .NET na Windows platformama

Kao što znamo, ove su platforme neizbježne u Windows platformama. Windows platforma koristi .NET kao integrirajuću komponentu za razvoj i pokretanje aplikacija. Razvojna platforma .NET ima dvije glavne komponente: CLR (Common Language Runtime) i .NET Framework biblioteku. [msdn.microsoft.com, 2011, http://msdn.microsoft.com/en-us/library/zw4w595w.aspx]. Pomoću .NET razvojne platforme i dviju njezinih komponenti, od kojih CLR upravlja memorijom, izvršavanjem dretvi, koda, kompilacijom te drugim servisima i .NET Framework biblioteke koja je zadužena za pohranu višestruko iskoristivih tipova koji su integrirani sa CLR. Biblioteka je objektno orijentirana te omogućuje izvršavanje koda i njegovih funkcionalnosti. Slika X prikazuje izgled .NET Framework konteksta.

Slika x. .NET Framework [msdn.microsoft.com, 2011, http://msdn.microsoft.com/en-us/library/zw4w595w.aspx]

Windows platforma koristi .NET kod razvijanja te pokretanja Windows aplikacija. Ona je na neki način i temelj novijih Windows aplikacija te predstavlja važnu ulogu za Windows platforme. Aplikacije koje se kompajliraju za .NET Framework nisu direktno kompajlirane u izvorni kod, nego se one pretvaraju u međujezik koji se zove MSIL (Microsoft Intermediate Language), te on služi za obfuskaciju koda. Prvim pokretanjem neke aplikacije CLR kompajler kod aplikacije u MSIL obliku kompajlira u izvorni kod prije nego se isti izvršava. [msdn.microsoft.com, 2011, http://msdn.microsoft.com/en-us/library/ms973842.aspx] Na Windows platformi .NET Framework leži pri vrhu operacijskog sustava i preko njega se izvršavaju procesi pokretani od strane korisnika. Slika x1 prikazuje arhitekturu .NET Framework platforme koje se primjenjuje za Windows operacijske sustave.

Slika x1. Arhitektura .NET Frameworka [msdn.microsoft.com, 2011, http://msdn.microsoft.com/en-us/library/ms973842.aspx]

Microsoft Windows platforme omogućuju razvijanje novih programa i aplikacija u .NET Frameworku pomoću alata za razvoj Visual Studio .NET u više programskih jezika. Prednost ovog razvojnog alata je što on istovremeno daje potporu za dizajn, razvoj, debbuging i razvijanje programskih komponenti koje se temelje na .NET Frameworku. msdn.microsoft.com, 2011, http://msdn.microsoft.com/en-us/library/ms973842.aspx] Java je također prisutna na Windows platformama kroz razne aplikacije te su u Microsoftu uvidjeli potrebu za spajanjem Java aplikacija u .NET Framework okružje. Oni su to omogućili kroz svojih nekoliko alata te sve detaljno opisali na svojim stranicama, na kojima možete više o tome pročitati: http://msdn.microsoft.com/en-us/library/ms973842.aspx

10.  Zaključak
Osobni alati
Imenski prostori
Inačice
Radnje
Orijentacija
Traka s alatima