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_datotecnog_formata_elf [2023/01/13 00:19]
mf51454
racfor_wiki:seminari:analiza_datotecnog_formata_elf [2023/06/19 18:17] (trenutno)
Redak 1: Redak 1:
 ===== Sažetak ===== ===== Sažetak =====
  
-Format ELF (engl. //Executable and Linkable Format//) glavni je format za izvršne datoteke, objektne datoteke i biblioteke na Linux-u i drugim, UNIX-u sličnim, operacijskim sustavima. Zbog raširenosti ovog formata, važno je poznavati njegova svojstva i strukturu, što može biti od znatne pomoći u forenzici datoteka. Ovdje je stoga opisana općenita struktura ELF datoteka, predstavljeni su alati za njihovu analizu te je objašnjen značaj poznavanja formata ELF iz perspektive računalne forenzike.+Format ELF (engl. //Executable and Linkable Format//) glavni je format za izvršne datoteke, objektne datoteke i biblioteke na Linux-u i drugim, UNIX-u sličnim, operacijskim sustavima. Zbog raširenosti ovog formata, važno je poznavati njegova svojstva i strukturu, što može biti od znatne pomoći u forenzici datoteka. Ovdje je stoga opisana općenita struktura ELF datoteka, predstavljeni su alati za njihovu analizu te je na primjerima demonstriran pristup njihovoj analizi. 
 ===== Uvod ===== ===== Uvod =====
  
Redak 45: Redak 46:
  
 Konkretnije, svaki //program header// opisuje jedan memorijski segment, a svaki se pak segment sastoji od nula ili više sekcija. Ti su segmenti zapravo dijelovi koji se učitavaju u memoriju prilikom podizanja datoteke u proces. Način kako se to točno događa detaljnije je opisan u [3]. Konkretnije, svaki //program header// opisuje jedan memorijski segment, a svaki se pak segment sastoji od nula ili više sekcija. Ti su segmenti zapravo dijelovi koji se učitavaju u memoriju prilikom podizanja datoteke u proces. Način kako se to točno događa detaljnije je opisan u [3].
 +
 +Detaljniji opis strukture tablice //program header table// može se pronaći u [1] i [2].
  
 ==== Section header table ==== ==== Section header table ====
Redak 56: Redak 59:
   * //.bss// - predstavlja neinicijalizirane statičke varijable.   * //.bss// - predstavlja neinicijalizirane statičke varijable.
  
 +Detaljniji opis strukture tablice //section header table// može se pronaći u [1] i [2].
 ===== Analiza ELF datoteke ===== ===== Analiza ELF datoteke =====
  
Redak 85: Redak 88:
 Ovaj primjer ilustrira analizu tipa ELF datoteke. Naime, promatranjem vrijednosti iz ELF zaglavlja moguće je odrediti radi li se o izvršnoj datoteci, objektnoj datoteci ili nekom drugom tipu datoteke.  Ovaj primjer ilustrira analizu tipa ELF datoteke. Naime, promatranjem vrijednosti iz ELF zaglavlja moguće je odrediti radi li se o izvršnoj datoteci, objektnoj datoteci ili nekom drugom tipu datoteke. 
  
-Prevedimo za početak program ''hello.c'' u izvršnu datoteku ''hello'', npr. korištenjem alata gcc:+Prevedimo za početak program ''hello.c'' u izvršnu datoteku ''hello'', npr. korištenjem alata ''gcc'':
  
 <code> <code>
Redak 173: Redak 176:
 Ipak, ovdje je dodatno vidljiva još jedna zanimljivost, a to je da objektna datoteka ''hello.o'' nema niti jedan //program header//. Štoviše, nema ni postavljenu početnu adresu (engl. //entry point address//). Naravno, to oboje ima smisla, budući da ''hello.o'' nije izvršna datoteka. S druge strane, jasno je vidljivo da izvršna datoteka ''hello'' ima postavljenu i početnu adresu, a ima i neprazan skup //program header//-a. Ipak, ovdje je dodatno vidljiva još jedna zanimljivost, a to je da objektna datoteka ''hello.o'' nema niti jedan //program header//. Štoviše, nema ni postavljenu početnu adresu (engl. //entry point address//). Naravno, to oboje ima smisla, budući da ''hello.o'' nije izvršna datoteka. S druge strane, jasno je vidljivo da izvršna datoteka ''hello'' ima postavljenu i početnu adresu, a ima i neprazan skup //program header//-a.
  
-=== Primjer 2 ===+==== Primjer 2 ====
  
-===== Zaključak ===== 
  
 +Ovaj primjer ilustrira razliku između statički povezane izvršne datoteke i dinamički povezane izvršne datoteke.
  
 +Statički povezanu izvršnu datoteku moguće je dobiti predajom zastavice ''-static'' alatu ''gcc'':
 +
 +<code>
 +gcc -static hello.c -o hello_static
 +</code>
 +
 +Dobivenu datoteku najlakše je analizirati alatom ''file'':
 +
 +<code>
 +$ file hello_static
 +hello_static: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=5d3e7284fc0022d9ffb945f31c6056533a3e517d, for GNU/Linux 3.2.0, not stripped
 +</code>
 +
 +Dinamički povezanu izvršnu datoteku zapravo ne treba posebno pripremati jer je to zadano ponašanje alata ''gcc''. Stoga je ranija datoteka ''hello'' primjer dinamički povezane izvršne datoteke.
 +
 +Vidljivo je da alat ''file'' ispravno prepoznaje razliku između ova dva načina povezivanja. Ručna analiza ELF datoteke za ovaj bi primjer bila nešto složenija jer informacija o načinu povezivanja nije direktno vidljiva iz ELF zaglavlja, već bi bilo potrebno pomnije promotriti strukturu datoteke. U takvim situacijama, ovakvi alati mogu znatno olakšati analizu.
 +===== Zaključak =====
 +
 +Kao što je pokazano na primjerima, iz ELF datoteka moguće je izvući brojne korisne informacije. Primjerice, može se identificirati tip datoteke ili arhitektura za koju je datoteka pripremljena. Od naprednijih pristupa, poznavanjem ulazne točke programa u kombinaciji s informacijama o segmentima, moguće je odrediti (ili barem procijeniti) kako će datoteka biti učitana u memoriju i na koje lokacije te kako će se ponašati prilikom izvršavanja. Dakako, moguće su još i razne druge, složenije analize. Razumijevanje strukture ELF datoteka stoga je vrijedna vještina za forenzičare.
 ===== Literatura ===== ===== Literatura =====
  
Redak 189: Redak 211:
  
 [5] [[https://linux-audit.com/elf-binaries-on-linux-understanding-and-analysis]] [5] [[https://linux-audit.com/elf-binaries-on-linux-understanding-and-analysis]]
 +
 +[6] [[https://ferhr-my.sharepoint.com/:p:/g/personal/mf51454_fer_hr/EUHtxPPULnhJkPjE9HxkOOsBEEUIANDeI_s2qjKyKptBTw?e=vUdg0P|Autorska prezentacija]]
  
  
racfor_wiki/seminari/analiza_datotecnog_formata_elf.1673565541.txt.gz · Zadnja izmjena: 2023/06/19 18:15 (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