Dieses Dokuwiki verwendet ein von Anymorphic Webdesign erstelltes Thema.

Razlike

Slijede razlike između dviju inačica stranice.

Poveznica na ovu usporedbu

Starije izmjene na obje strane Starija izmjena
Novija izmjena
Starija izmjena
racfor_wiki:seminari:analiza_pe_datoteka_iz_perspektive_forenzike [2023/01/12 13:14]
ab51335 [Optional header]
racfor_wiki:seminari:analiza_pe_datoteka_iz_perspektive_forenzike [2024/12/05 12:24] (trenutno)
Redak 3: Redak 3:
 ===== Sažetak ===== ===== Sažetak =====
  
-PE datoteka je izvršna datoteka operacijskog sustava Windows. Uz sam izvršivi kod i podatke sastoji se i od ostalih informacija koje loaderu govore kako učitati datoteku u radnu memoriju da bi se ona ispravno izvršila. Djelovi PE datoteke su MZ header, DOS Stub, PE header, Optional header, Section headers i Sections. Izvršni kod nalazi se u sekcijama, a najbitniji podaci koji govore na koje virtualne adrese se taj kod mora učitati nalaze se u Optional headeru i pripadnom Section headeru. Datoteka također može koristiti i vanjske biblioteke i informacije o potrebnim funkcijama nalaze se u Import direktoriju, a u toj pripadajućoj vanjskoj biblioteci, dll-u, informacije o dostupnim funkcijama nalaze se u Export direktoriju.+PE datoteka izvršna je datoteka operacijskog sustava Windows. Uz sam izvršivi kod i podatke sastoji se i od ostalih informacija koje loaderu govore kako učitati datoteku u radnu memoriju da bi se ona ispravno izvršila. Dijelovi PE datoteke su MZ header, DOS Stub, PE header, Optional header, Section headers i Sections. Izvršni kod nalazi se u sekcijama, a najvažniji podaci koji govore na koje se virtualne adrese taj kod mora učitati nalaze se u Optional headeru i pripadnom Section headeru. Datoteka također može koristiti i vanjske biblioteke i informacije o potrebnim funkcijama nalaze se u Import direktoriju, a u toj pripadajućoj vanjskoj biblioteci, dll-u, informacije o dostupnim funkcijama nalaze se u Export direktoriju.
 ===== PE datoteke ===== ===== PE datoteke =====
  
 **PE** (Portable Executable) je **format izvršnih datoteka u Windows operacijskim sustavima** i baziran je na COFF formatu datoteka (Common Object File Format). U PE datoteke spadaju izvršne datoteke **.exe**, dinamički alocirane biblioteke **.dll**, kernel moduli .srv i mnoge druge. **PE** (Portable Executable) je **format izvršnih datoteka u Windows operacijskim sustavima** i baziran je na COFF formatu datoteka (Common Object File Format). U PE datoteke spadaju izvršne datoteke **.exe**, dinamički alocirane biblioteke **.dll**, kernel moduli .srv i mnoge druge.
  
-PE datoteka sastoji se od podataka koji su potrebni prilikom izvršavanja datoteke i samog izvršnog koda, no taj se izvršni kod treba najprije učitati u radnu memoriju. U tu svrhu, loader parsira PE datoteku, izvuče sve potrebne informacije o tome kako alocirati i smjestiti podatke u memoriju tako da se datoteka može izvršiti na ispravan način. Uz to, datoteka sadrži i informacije o vanjskim bibliotekama koje datoteka zahtjeva da budu učitana za njeno ispravno izvršavanje te informaciju gdje točno počinje samo izvršavanje.+PE datoteka sastoji se od podataka koji su potrebni prilikom izvršavanja datoteke i samog izvršnog koda, no taj se izvršni kod treba najprije učitati u radnu memoriju. U tu svrhu, loader parsira PE datoteku, izvuče sve potrebne informacije o tome kako alocirati i smjestiti podatke u memoriju tako da se datoteka može izvršiti na ispravan način. Uz to, PE datoteka sadrži i informacije o vanjskim bibliotekama koje zahtijeva da budu učitane za njeno ispravno izvršavanje te informaciju gdje točno počinje samo izvršavanje.
  
-Struktura, koju datoteka mora zadovoljavati, vidljiva je na slici 1.1. PE datoteka započinje MZ headerom nakon čega dolazi DOS Stub, PE header, Optional header, određen broj Section headera i taj isti broj Sectiona. U nastavku će se detaljno razmatrati djelovi PE datoteke i koje se informacije nalaze u tom djelu.+Struktura, koju datoteka mora zadovoljavati, vidljiva je na slici 1.1. PE datoteka započinje MZ headerom nakon kojeg slijede DOS Stub, PE header, Optional header, određen broj Section headera i taj isti broj Sectiona. U nastavku će se detaljno razmatrati dijelovi PE datoteke i koje se informacije nalaze u kojem dijelu.
  
 {{https://wiki.osdev.org/images/d/dd/PEFigure1.jpg}} {{https://wiki.osdev.org/images/d/dd/PEFigure1.jpg}}
Redak 17: Redak 17:
 ===== MZ header i DOS Stub ===== ===== MZ header i DOS Stub =====
  
-PE datoteku možemo prepoznati po prva dva bajta u datoteci, takozvani magic bajtovi. Oni iznose **0x4D 0x5A (MZ)** i to je ujedno i početak MZ headera koji je veličine 0x40 bajtova. Najvažnija informacija koju MZ header sadrži, e_lfanew, nalazi se na offsetu **0x3C**. Tu je unutar 4 bajta zapisano mjesto (offset od početka datoteke) na kojem **započinje PE header**.+PE datoteku možemo prepoznati po prva dva bajta u datoteci, takozvanim magic bajtovima. Oni iznose **0x4D 0x5A (MZ)** i to je ujedno i početak MZ headera koji je veličine 0x40 bajtova. Najvažnija informacija koju MZ header sadrži, e_lfanew, nalazi se na offsetu **0x3C**. Tu je unutar 4 bajta zapisano mjesto (offset od početka datoteke) na kojem **započinje PE header**.
  
-Odmah nakon MZ headera slijedi DOS Stub i prepoznaje se po poruci "This program cannot be run in DOS mode". Ta poruka će se ispisati ako se pokrene u MS DOS-u kao znak da nije kompatibilno s MS-DOSom. Windows operacijski sustav će iskoristiti e_lfanew na kraju MZ headera i prilikom ispravnog izvršavanja preskočit će DOS Stub koji postoji samo radi kompatibilnosti.+Odmah nakon MZ headera slijedi DOS Stub koji se prepoznaje po poruci "This program cannot be run in DOS mode". Ta će se poruka ispisati ako se pokrene u MS DOS-u kao znak da datoteka nije kompatibilna s MS-DOSom. Windows operacijski sustav iskoristit će e_lfanew na kraju MZ headera i prilikom ispravnog izvršavanja preskočit će DOS Stub koji postoji samo zbog kompatibilnosti.
  
 Na slici 2.1 vidljivo je kako izgleda početak PE datoteke, odnosno vidljivi su MZ header s označenim bitnim poljima i DOS Stub. Na slici 2.1 vidljivo je kako izgleda početak PE datoteke, odnosno vidljivi su MZ header s označenim bitnim poljima i DOS Stub.
Redak 28: Redak 28:
 ===== PE header ===== ===== PE header =====
  
-Podsjetimo se, na kraju MZ headera specificirano je gdje započinje PE header. On je veličine 0x14 bajtova i prepoznaje se po magic bajtovima **0x50 0x45 0x00 0x00 (PE)**. Unutar PE headera nalaze se informacije o ciljanoj arhitekturi za koju je izvršna datoteka namjenjena (i386, AMD64, MIPS, PowerPC, …), **broj sekcija PE datoteke**, vremenska oznaka kada je izvršna datoteka kompajlirana, **veličina Optional headera** i karakteristike koje označavaju atribute datoteke. Neki od primjera atributa su je li datoteka izvršiva, radi li se o dll-u, koristi li se little endian ili big endian, itd.+Podsjetimo se, na kraju MZ headera specificirano je gdje započinje PE header. On je veličine 0x14 bajtova i prepoznaje se po magic bajtovima **0x50 0x45 0x00 0x00 (PE)** (označeni na slici 2.1). Unutar PE headera nalaze se informacije o ciljanoj arhitekturi za koju je izvršna datoteka namijenjena (i386, AMD64, MIPS, PowerPC, …), **broj sekcija PE datoteke**, vremenska oznaka kada je izvršna datoteka kompajlirana, **veličina Optional headera** i karakteristike koje označavaju atribute datoteke. Neki od primjera atributa su je li datoteka izvršiva, radi li se o dll-u, koristi li se little endian ili big endian, itd.
  
-Sva polja PE header vidljiva su na slici 3.1.+Sva polja PE headera vidljiva su na slici 3.1.
  
 {{:racfor_wiki:seminari:peheader_003651335.png?400|}} {{:racfor_wiki:seminari:peheader_003651335.png?400|}}
Redak 38: Redak 38:
 ===== Optional header ===== ===== Optional header =====
  
-Odmah nakon PE headera slijedi Optional header koji unatoč svom nazivu nije opcionalan ukoliko se želi izvršiti datoteka i ovdje se zapravo nalaze informacije koje loaderu govore kako učitati datoteku u radnu memoriju. Njegova veličini nije fiksna već je zapisana unutar PE headera i započinje bajtovima **0x010B ili 0x020B** koji označavaju koristi li se **32 ili 64 bitni adresni prostor**. +Odmah nakon PE headera slijedi Optional header koji unatoč svom nazivu nije opcionalan, ako se želi izvršiti datotekai ovdje se zapravo nalaze informacije koje loaderu govore kako učitati datoteku u radnu memoriju. Njegova veličina nije fiksna već je zapisana unutar PE headera i započinje bajtovima **0x010B ili 0x020B** koji označavaju koristi li se **32 ili 64 bitni adresni prostor**. 
  
-Bitne informacije koje se nalaze unutar Optional headera su:+Važne informacije koje se nalaze unutar Optional headera su:
   * **adresa početne točke programa**   * **adresa početne točke programa**
-  * bazna memorijska adresa (**ImageBase**) - na tu adresu se učita početak izvršne datoteke+  * bazna memorijska adresa (**ImageBase**) - na tu adresu učita se početak izvršne datoteke
   * poravnanje sekcija u memoriji (SectionAlignment)   * poravnanje sekcija u memoriji (SectionAlignment)
   * poravnanje sekcija u datoteci (FileAlignment)   * poravnanje sekcija u datoteci (FileAlignment)
Redak 50: Redak 50:
   * broj podatkovnih direktorija (**NumberOfDataDirectories**)   * broj podatkovnih direktorija (**NumberOfDataDirectories**)
  
-Nakon toga u datoteci se nalazi navedeni broj podatkovnih direktorija (Data Directories) koji zapravo predstavljaju tablice koje Windows OS koristi za ispravno učitavanje datoteke u radnu memoriju. Za svaki podatkovni direktorij navedena je relativna virtualna adresa početka podatkovnog direktorija i njegova veličina u bajtovima (**RVA, Size**). Najčešći i najvažniji direktoriji su **export, import i resource directory**. Resource directory sadrži sve resurse koje PE datoteka koristi (npr. slike, ikone, informacije o verziji i autoru datoteke, prijevodi, ...), a export i import directory će se detaljnije opisati u nastavku.+Nakon toga u datoteci se nalazi navedeni broj podatkovnih direktorija (Data Directories) koji zapravo predstavljaju tablice koje Windows OS koristi za ispravno učitavanje datoteke u radnu memoriju. Za svaki podatkovni direktorij navedena je relativna virtualna adresa početka podatkovnog direktorija i njegova veličina u bajtovima (**RVA, Size**). Najčešći i najvažniji direktoriji su **export, import i resource directory**. Resource directory sadrži sve resurse koje PE datoteka koristi (npr. slike, ikone, informacije o verziji i autoru datoteke, prijevodi, itd.), a export i import directory će se detaljnije opisati u nastavku.
  
-Sva polja Optional headera vidljiva su na slici 4.1.+Sva polja Optional headera i nekoliko podatkovnih direktorija vidljivi su na slici 4.1.
  
 {{:racfor_wiki:seminari:optionalheader_003651335.png?400|}} {{:racfor_wiki:seminari:optionalheader_003651335.png?400|}}
Redak 60: Redak 60:
 ===== Sections ===== ===== Sections =====
  
-Odmah nakon Optional headera nalazi se određen broj (navedeno unutar PE headera) Section headera. Svaki Section header je veličine 0x28 bajtova i u njemu se nalaze sljedeće informacije o svakoj sekciji:+Odmah nakon Optional headera nalazi se određen broj (naveden unutar PE headera) Section headera. Svaki Section header veličine je 0x28 bajtova i u njemu se nalaze sljedeće informacije o svakoj sekciji:
   * ime sekcije - do 8 bajtova, najčešća imena su .text, .data, .rdata, .code   * ime sekcije - do 8 bajtova, najčešća imena su .text, .data, .rdata, .code
   * fizički offset do sekcije u datoteci (**PointerToRawData**)    * fizički offset do sekcije u datoteci (**PointerToRawData**) 
Redak 68: Redak 68:
   * karakteristike - atributi poput read, write, executable po kojima se određuje može li se iz sekcije čitati, pisati i je li izvršiva   * karakteristike - atributi poput read, write, executable po kojima se određuje može li se iz sekcije čitati, pisati i je li izvršiva
  
-Sekcija (Sectionje dio PE datoteke u kojoj se zapravo nalazi pohranjeni **izvršni kod datoteke i podaci** koji se koriste prilikom njenog izvršavanja dok se sve bitne informacije o sekciji nalaze u odgovarajućem Section headeruNa primjer, mjesto gdje započinje sekcija u datoteci (offset od početka datoteke) govori nam polje PointerToRawData dok polje SizeOfRawData govori o veličini te sekcije u datoteci.+Izgled Section headera vidljiv je na slici 5.1.
  
-Izvršni kod unutar sekcija mora se učitati u radnu memoriju kako bi se datoteka izvršila. Podsjetimo se, operacijski sustav koristi **straničenje** tako da fizičku radnu memoriju razdjeli na više procesa, a svaki taj proces na raspolaganju prividno ima **cijelu** radnu memoriju. **Relativna virtualna adresa** na koju se sekcija učitava izračuna se po formuli:+{{:racfor_wiki:seminari:sectionheader_003651335.png?400|}} 
 + 
 +Slika 5.1 - Section header, alat PEView 
 + 
 +Sekcija (Section) dio je PE datoteke u kojoj se zapravo nalazi pohranjeni **izvršni kod datoteke i podaci** koji se koriste prilikom njenog izvršavanja, dok se sve važne informacije o sekciji nalaze u odgovarajućem Section headeru. Na primjer, mjesto gdje započinje sekcija u datoteci (offset od početka datoteke) govori nam polje PointerToRawData, dok polje SizeOfRawData govori o veličini te sekcije u datoteci. 
 + 
 +Izvršni kod unutar sekcija mora se učitati u radnu memoriju kako bi se datoteka izvršila. Podsjetimo se, operacijski sustav koristi **straničenje** tako da fizičku radnu memoriju razdijeli na više procesa, a svaki taj proces na raspolaganju prividno ima **cijelu** radnu memoriju. **Relativna virtualna adresa** na koju se sekcija učitava izračunava se po formuli:
                RVA = FizičkiOffset – PtrToRawData + SectionRVA                RVA = FizičkiOffset – PtrToRawData + SectionRVA
  
Redak 76: Redak 82:
 ===== Export directory ===== ===== Export directory =====
  
-Export directory je najčešće prisutan u .dll datotekama, rijetko kad u .exe datotekama. Ovdje se navode funkcije koje postaju dostupne preko imena i rednog broja drugim izvršnim datotekama kako bi ih one mogle importati. Najvažnije informacije koje se nalaze unutar export direktorija su RVA imena dll-a, broja funkcija koje se exportaju i tri tablice:+Export directory najčešće je prisutan u .dll datotekama, rijetko kad u .exe datotekama. Ovdje se navode funkcije koje su dostupne drugim izvršnim datotekama iz imena i rednog broja da bi ih one mogle importati. Najvažnije informacije koje se nalaze unutar export direktorija su RVA imena dll-a, broja funkcija koje se exportaju i tri tablice:
   * adresna tablica - sadrži relativne virtualne adrese na kojima započinju funkcije    * adresna tablica - sadrži relativne virtualne adrese na kojima započinju funkcije 
   * tablica s pokazivačima na imena - abecedno poredana lista relativnih virtualnih adresa prema imenima funkcija   * tablica s pokazivačima na imena - abecedno poredana lista relativnih virtualnih adresa prema imenima funkcija
-  * tablica rednih brojeva (ordinala) - lista vrijednosti od 2 bajta koje služe kao indeks u adresnu tablicu, redoslijed isti kao i u tablici pokazivača na imena+  * tablica rednih brojeva (ordinala) - lista vrijednosti od 2 bajta koje služe kao indeks u adresnoj tabliciredoslijed je isti kao i u tablici pokazivača na imena 
 + 
 +Izgled Export direktorija vidljiv je na slici 6.1. 
 + 
 +{{:racfor_wiki:seminari:exportdirectory_003651335.png?400|}} 
 + 
 +Slika 6.1 - Export directory, alat PEView
  
  
 ===== Import directory ===== ===== Import directory =====
  
-Import Directory opisuje dodatne ovisnosti koje trebaju programu za izvođenje u obliku skupine biblioteka i njihovih API-a. Svaki zapis je veličine 0x14 bajtovaopisuje jednu biblioteku, listu njenih funkcija koje je potrebno importati i mjesto u datoteci gdje su zapisane relativne virtualne adrese na koje se trebaju spremiti imena tih funkcija ili ordinala koji služe za pristup funkcijama. Korištenjem importa autor ne mora sam implementirat neke Česte stvari (npr. čitanje i pisanje u datoteku, mrežne funkcije i slično) već preko importa može koristiti te funkcije koje je netko drugi već razvio, a to je najčešće sam Microsoft.+Import Directory opisuje dodatne ovisnosti koje trebaju programu za izvođenje u obliku skupine biblioteka i njihovih API-a. Svaki je zapis veličine 0x14 bajtova opisuje jednu biblioteku, listu njenih funkcija koje je potrebno importati i mjesto u datoteci gdje su zapisane relativne virtualne adrese na koje se trebaju spremiti imena tih funkcija ili ordinala koji služe za pristup funkcijama. Korištenjem importa autor ne mora sam implementirati neke Česte funkcije (npr. čitanje i pisanje u datoteku, mrežne funkcije i slično) već preko importa može koristiti te funkcije koje je netko drugi već razvio, a to je najčešće sam Microsoft. 
 + 
 +Izgled Import direktorija vidljiv je na slici 7.1. 
 + 
 +{{:racfor_wiki:seminari:importdirectory_003651335.png?400|}} 
 + 
 +Slika 7.1 - Import directory, alat PEView
 ===== Zaključak ===== ===== Zaključak =====
  
-Za ispravno izvršavanje datoteke potrebno je pohranjeni izvršni kod učitati u radnu memoriju. Format PE datoteke omogućuje loaderu da na točno određenim mjestima unutar datoteke pronađe potrebne informacije koje mu govore kako da to učini. Bez tih informacija ili sa krivo upisanim informacijama na tim mjestima, Windows operacijski sustav neće znati pokrenuti izvršnu datoteku.+Za ispravno izvršavanje datoteke potrebno je pohranjeni izvršni kod učitati u radnu memoriju. Format PE datoteke omogućuje loaderu da na točno određenim mjestima unutar datoteke pronađe potrebne informacije koje mu govore kako da to učini. Bez tih informacija ili krivo upisanim informacijama na tim mjestima, Windows operacijski sustav neće znati pokrenuti izvršnu datoteku.
 ===== Literatura ===== ===== Literatura =====
  
racfor_wiki/seminari/analiza_pe_datoteka_iz_perspektive_forenzike.1673529290.txt.gz · Zadnja izmjena: 2024/12/05 12:23 (vanjsko uređivanje)
Dieses Dokuwiki verwendet ein von Anymorphic Webdesign erstelltes Thema.
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0