packing
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| packing [2025/01/28 03:55] – created kresimir | packing [2025/12/01 11:40] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ==== Primjer - Zadatak s Hacknite platforme - Packer ==== | ==== Primjer - Zadatak s Hacknite platforme - Packer ==== | ||
| - | Dana je binarna datoteka bez prevelikog konteksta (osim da je obfuscirana). | + | Dana je binarna datoteka bez prevelikog konteksta, dodatnih informacija |
| - | Iako naziv zadatka odaje o čemu je riječ, korisno je znati kako prepoznati pakiranu datoteku. | + | Iako naziv zadatka odaje o čemu je riječ, korisno je znati kako prepoznati |
| Najčešći pokazatelj je izlaz funkcije strings koja vraća besmislene stringove (ne postoje nazivi funkcija itd...). | Najčešći pokazatelj je izlaz funkcije strings koja vraća besmislene stringove (ne postoje nazivi funkcija itd...). | ||
| - | Drugi pokazatelj su besmislene instrukcije koje se izvršavaju | + | Drugi pokazatelj su besmislene instrukcije koje se izvršavaju |
| - | reversing. | + | |
| - | Dva su načina kako se pakirane datoteke mogu otpakirati. Prvi je da se sazna kojim programom je datoteka zapakirana, a | + | Dva su načina kako se pakirane datoteke mogu otpakirati. Prvi je da se sazna kojim programom je datoteka zapakirana, a drugi je ručno unpackanje. |
| - | drugi je ručno unpackanje. | + | |
| === 1. Otkrivanje packera === | === 1. Otkrivanje packera === | ||
| - | Kako bi se otkrio | + | Kako bi se otkrilo |
| - | jest web aplikacija koja analizira malware korištenjem pattern matchinga i sl. Također, prepoznaje poznate packere | + | Rezultat analize |
| - | ako su korišteni za obfusciranje datoteke. | + | |
| - | Rezultat analize | + | |
| - | ovdje [[https:// | + | |
| - | na temu (npr. [[https:// | + | |
| Korištenjem skripte za unpackanje jednostavno se dobije originalna main funkcija. | Korištenjem skripte za unpackanje jednostavno se dobije originalna main funkcija. | ||
| Line 25: | Line 20: | ||
| === 2. Ručno unpackanje === | === 2. Ručno unpackanje === | ||
| - | Recimo da se radi o packeru koji nije poznat, tj. ne postoje već dostupne skripte za unpackanje. Ne preostaje ništa osim | + | Recimo da se radi o packeru koji nije poznat, tj. ne postoje već dostupne skripte za unpackanje. Ne preostaje ništa |
| - | ručne analize koda. Dobri packeri otežavaju ručnu analizu korištenjem puno nebitnih instrukcija što čini kod nerazumljivim. | + | Međutim, većina packera imaju zajedničko svojstvo da koriste sistemske pozive (engl. |
| - | Međutim, većina packera imaju zajedničko svojstvo da pozivaju | + | potrebne permissione (mprotect), otvaraju razne datoteke poput libc.so (read) itd... Znajući to, debuggiranje se može olakšati zaustavljanjem na pozivima |
| - | se zapisuju dekriptirani payload tj. binarna datoteka, postavljaju | + | |
| - | potrebne permissione (mprotect), otvaraju razne datoteke poput libc.so (read) itd... Znajući to, debuggiranje se može olakšati | + | |
| - | zaustavljanjem na pozivima | + | |
| {{catchsyscall.png}} | {{catchsyscall.png}} | ||
| Line 42: | Line 34: | ||
| 6. exit | 6. exit | ||
| - | Nakon poziva read program | + | Nakon poziva |
| - | s putanjom / | + | |
| {{status.png}} | {{status.png}} | ||
| - | Unutar ispisa jedini indikator radi li se od debuggiranju jest TracerPid. Ispis statusa programa | + | Vrijednost TracerPid pokazuje //process id// procesa koji se koristi za debugiranje (u ovom slučaju gdb). Programi |
| - | imaju postavljen | + | |
| {{patch.png}} | {{patch.png}} | ||
| - | Uz pomoć naredbe patch ručno se izmijeni njegova vrijednost. | ||
| {{fork.png}} | {{fork.png}} | ||
| Line 66: | Line 55: | ||
| {{childfork.png}} | {{childfork.png}} | ||
| - | Praćenjem syscallova vidimo sličan uzorak kao i u parent procesu. Nakon poziva setrlimit ponovno se dohvaća pid | + | Praćenjem syscallova vidimo sličan uzorak kao i u parent procesu. Nakon poziva |
| te gleda / | te gleda / | ||
| Line 74: | Line 63: | ||
| {{vmmap.png}} | {{vmmap.png}} | ||
| - | Očito je da je proces unpackanja završio. Korištenjem naredbe "dump binary memory dump.out 0x0000000800000000 0x0000000800005000" | + | Očito je da je proces unpackanja završio. Korištenjem naredbe "dump binary memory dump.out 0x0000000800000000 0x0000000800005000" |
| - | dobije se dump binarne datoteke. | + | |
| - | Iako je zbog načina obfuskacije koju kiteshield koristi kod obfusciran (ne može se pokrenuti) za ovaj zadatak to je dovoljno jer | + | Iako je zbog načina obfuskacije koju kiteshield koristi kod obfusciran (ne može se pokrenuti) za ovaj zadatak to je dovoljno jer je string za flag hardkodiran te se može dobiti naredbom strings. |
| - | je string za flag hardkodiran te se može dobiti naredbom strings. | + | |
| - | "The second layer of encryption (referred to in the codebase as the "inner layer" | + | "The second layer of encryption (referred to in the codebase as the "inner layer" |
| - | in the input binary (identified via the symbol table at pack-time). A ptrace-based runtime engine is triggered on every function entry and exit | + | Upon receiving a trap, the runtime engine looks up the current function and encrypts or decrypts it as needed such that only functions within the current call stack are decrypted at any point in time." |
| - | via replacement of each function' | + | |
| - | Upon receiving a trap, the runtime engine looks up the current function and encrypts or decrypts it as needed such that only functions within the current | + | |
| - | call stack are decrypted at any point in time." | + | |
| Ideja je da int3 instrukcije šalju signal ptraceru koji dinamički dekriptira funkciju koja se izvršava. Izgled main funkcije u dobivenom dumpu jest: | Ideja je da int3 instrukcije šalju signal ptraceru koji dinamički dekriptira funkciju koja se izvršava. Izgled main funkcije u dobivenom dumpu jest: | ||
| Line 90: | Line 74: | ||
| {{main_func.png}} | {{main_func.png}} | ||
| - | Jasno je da je funkcija ne izvršiva zbog invalidnih instrukcija. | + | Jasno je da se funkcija ne može izvršiti zbog invalidnih instrukcija. |
| Za usporedbu, ovo je izgled iste funkcije kroz binarnu datoteku dobivenu korištenjem jednih od skritpti za unpackanje kiteshielda: | Za usporedbu, ovo je izgled iste funkcije kroz binarnu datoteku dobivenu korištenjem jednih od skritpti za unpackanje kiteshielda: | ||
packing.1738036523.txt.gz · Last modified: 2025/12/01 11:40 (external edit)