User Tools

Site Tools


rev2_ghidra

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
rev2_ghidra [2025/11/20 19:10] mbunicrev2_ghidra [2025/12/01 11:40] (current) – external edit 127.0.0.1
Line 17: Line 17:
 Program je statically linked, zato se može samostalno pokretati. Također je stripped, zato imena varijabli i funkcija neće biti sačuvane, što će malo otežati reverzno inženjerstvo nad programom. Program je statically linked, zato se može samostalno pokretati. Također je stripped, zato imena varijabli i funkcija neće biti sačuvane, što će malo otežati reverzno inženjerstvo nad programom.
  
-Nakon toga se može pokrenuti naredbastrings da se vidi ima li zanimljivih stringova u datoteci.+Nakon toga se može pokrenuti naredba strings da se vidi ima li zanimljivih stringova u datoteci.
  
 <file> <file>
Line 23: Line 23:
 </file> </file>
  
-No niti jedan vraćeni rezultat ne izgleda kao da previše otkriva. Može se također odmah pretražiti je li se među vraćenim stringovima pojavljuje "flag" ili "ctf" tekst.+No niti jedan vraćeni rezultat ne izgleda kao da previše otkriva. Može se također odmah pretražiti pojavljuje li se među vraćenim stringovima pojavljuje "flag" ili "ctf" tekst.
  
 <file> <file>
Line 29: Line 29:
 </file> </file>
  
-zastavica "-i" je case-insensitive-e "flag" -e"ctf", ovime je definirano da se traži string koji sadrži "flag" ILI "ctf" ILI "passw" u sebi.+zastavica "-i" je case-insensitive opcija. Opcija -e za "flag""ctf" i "pass" definira da se traži string koji sadrži bilo koji od tih substringova u sebi.
  
 {{ rev2_ghidra:slika3.png?nolink&500 | Slika 3. rezultat strings naredbe }} {{ rev2_ghidra:slika3.png?nolink&500 | Slika 3. rezultat strings naredbe }}
Line 45: Line 45:
 Također se na prvi pogled ne mogu pronaći dodatne korisne informacije o programu u ispisu. Također se na prvi pogled ne mogu pronaći dodatne korisne informacije o programu u ispisu.
  
-Sljedeći korak je korištenje besplatnog Ghidra alata za reverzno inženjerstvo nad programom (ako niste upoznati s alatom, pogledajte materijale o ovom alatu također dostupne na wiki stranicama na linku-  https://www.cert.hr/wp-content/uploads/2021/01/ghidra.pdf .)+Sljedeći korak je korištenje besplatnog Ghidra alata za reverzno inženjerstvo nad programom (ako niste upoznati s alatom, pogledajte materijale o ovom alatu na poveznici -  https://www.cert.hr/wp-content/uploads/2021/01/ghidra.pdf .)
  
 {{ rev2_ghidra:slika5.png?nolink&500 | Slika 5. Ghidra alat }} {{ rev2_ghidra:slika5.png?nolink&500 | Slika 5. Ghidra alat }}
Line 77: Line 77:
 </file> </file>
  
-također, vidi se da je drugi argument poziva funkcije  FUN_00404ee0, 0x100 hex vrijednost, što je u decimalnom 264, što odgovara duljini input buffera također.+također, vidi se da je drugi argument poziva funkcije  FUN_00404ee0, 0x100 hex vrijednost, što je u decimalnom 264, koliko je i duljina input buffera.
  
 Treći argument je pointer  PTR_DAT_004aa6d8, dvoklikom na ovu varijablu, otvara se vrijednost na koju ovaj pointer pokazuje. Treći argument je pointer  PTR_DAT_004aa6d8, dvoklikom na ovu varijablu, otvara se vrijednost na koju ovaj pointer pokazuje.
Line 97: Line 97:
 </file> </file>
  
-odgovarala+odgovarala kodu:
  
 <file> <file>
Line 103: Line 103:
 </file> </file>
  
-Sada se može označiti varijabla local_118, pritisnuti gumb L i preimenovati u input_buffer.+Može se označiti varijabla local_118, pritisnuti gumb L i preimenovati u input_buffer.
  
 {{ rev2_ghidra:slika9.png?nolink&500 | Slika 9.  Preimenovanje varijable u Ghidri }} {{ rev2_ghidra:slika9.png?nolink&500 | Slika 9.  Preimenovanje varijable u Ghidri }}
  
-Također se varijable pbVar5 može preimenovati u user_input, PTR_DAT_004aa6d8 u stdin i +Također se varijabla pbVar5 može preimenovati u user_input, PTR_DAT_004aa6d8 u stdin i 
 FUN_00404ee0 u fgets. Varijablu lVar2 nećemo preimenovati, jer se prvo koristi kao exit value fgets funkcije, a nakon toga se koristi za spremanje vraćene vrijednosti thunk_FUN_00412860 funkcije, te se ta vraćena vrijednost potom uspoređuje s 0x15. FUN_00404ee0 u fgets. Varijablu lVar2 nećemo preimenovati, jer se prvo koristi kao exit value fgets funkcije, a nakon toga se koristi za spremanje vraćene vrijednosti thunk_FUN_00412860 funkcije, te se ta vraćena vrijednost potom uspoređuje s 0x15.
  
Line 122: Line 122:
 </file> </file>
  
-Ako je fgets vratio NULL,  varijabla uVar3 se postavlja u 1 i skače se na kraj main funkcije, te se varijabla uVar3 vrača kao return vrijednost main funkcije, zato se varijabla uVar3 može preimenovati u main_func_ret_val.+Ako je fgets vratio NULL,  varijabla uVar3 se postavlja u 1 i skače se na kraj main funkcije, te se varijabla uVar3 vraća kao return vrijednost main funkcije, zato se varijabla uVar3 može preimenovati u main_func_ret_val.
  
 Ako se fgets uspješno izvršio, izvršava se else blok, koji počinje ovim kodom Ako se fgets uspješno izvršio, izvršava se else blok, koji počinje ovim kodom
Line 150: Line 150:
 U tom slučaju bi varijabla  lVar2 sadržavala duljinu korisničkog unosa, pa bi se onda u sljedećoj liniji, na kraj stringa korisničkog unosa postavio NULL byte umjesto CR LF, kako se CR LF u ostatku programa ne bi koristio. U tom slučaju bi varijabla  lVar2 sadržavala duljinu korisničkog unosa, pa bi se onda u sljedećoj liniji, na kraj stringa korisničkog unosa postavio NULL byte umjesto CR LF, kako se CR LF u ostatku programa ne bi koristio.
  
-Nakon toga, u if statementu, vrijednost varijable  lVar2 se uspoređuje s 0x15, odnosno 21 u dekadskom zapisu, što točno odgovara duljini FLAG formata +Nakon toga, u if statementu, vrijednost varijable lVar2 se uspoređuje s 0x15, odnosno 21 u dekadskom zapisu, što točno odgovara duljini FLAG formata 
  
 <file> <file>
Line 156: Line 156:
 </file> </file>
  
-Ako je duljina korisničkog unosa jednaka 21, ulazi se u do - while blok, unutar kojega se nalazi switch sa 7 caseva, ako nije skače se na funkciju koja ispisuje "wrong password", zato je prvi uvjet da duljina korisničkog unosa mora biti duljine 21 znak.+Ako je duljina korisničkog unosa jednaka 21, ulazi se u do - while blok, unutar kojega se nalazi switch sa 7 caseva. Ako uvjet nije zadovoljen, skače se na funkciju koja ispisuje "Wrong password!". Zato je prvi uvjet da duljina korisničkog unosa mora biti duljine 21 znak.
  
-Pregledom switcha, na kraju switcha se odmah može vidjeti case 0, koji samo ispisuje wrong password+Pregledom switcha, na kraju switcha se odmah može vidjeti case 0, koji samo ispisuje poruku "Wrong password!"
  
 {{ rev2_ghidra:slika11.png?nolink&500 | Slika 11. Switch case 0 }} {{ rev2_ghidra:slika11.png?nolink&500 | Slika 11. Switch case 0 }}
Line 168: Line 168:
 </file> </file>
  
-koja postavlja varijablu bVar1 na dereferenciranu vrijednost user_input pointera, koji je pointer na string buffer. Varijable bVar1 će sadržavati vrijednost charactera iz user inputa, zato se  +koja postavlja varijablu bVar1 na dereferenciranu vrijednost user_input pointera, koji je pointer na string buffer. Varijabla bVar1 će sadržavati vrijednost charactera iz user inputa, zato se može preimenovati u user_input_char.
-može preimenovati u user_input_char.+
  
-U switchu postoji 7 caseva, a case se određuje prema vrijednosti puVar2.+U switchu postoji 7 caseva, a case se određuje prema vrijednosti puVar2.
  
 {{ rev2_ghidra:slika12.png?nolink&500 | Slika 12. - switch value }} {{ rev2_ghidra:slika12.png?nolink&500 | Slika 12. - switch value }}
Line 205: Line 204:
 </file> </file>
  
-a puVar2 se povećava za 3 u svakoj iteraciji, što taman odgovara 3 vrijednosti koje se koriste  +a puVar2 se povećava za 3 u svakoj iteraciji, što taman odgovara 3 vrijednosti koje se koriste u svakom do bloku,  puVar2 + 0 određuje koji switch case će se izvršiti,  puVar2 + 1 je operand,  puVar2 + 2 je očekivana vrijednost.
-u svakom do blok,  puVar2 + 0 određuje koji switch case će se izvršiti,  puVar2 + 1 je operand,  puVar2 + 2 je očekivana vrijednost.+
  
 {{ rev2_ghidra:slika17.png?nolink&500 | Slika 17. inkrementiranje puVar2 i user_input pointera }} {{ rev2_ghidra:slika17.png?nolink&500 | Slika 17. inkrementiranje puVar2 i user_input pointera }}
  
-Budući da će se svaki user input character imati jednu vlastitu iteraciju, a puVar2 se povećava za 3 nakon svake iteracije, zna se da user input ima 21 character. Količina puVar2 byteova koje se koriste su 3 * 21 = 63. +Budući da će se svaki user input character imati jednu vlastitu iteraciju, a puVar2 se povećava za 3 nakon svake iteracije, zna se da user input ima 21 character. Količina puVar2 bajtova koje se koriste su 3 * 21 = 63. 
 Ovo se također može vidjeti na slici ispod, while se izvršava sve dok varijabla pbVar2 koja se povećava za 3 nije jednaka adresi spremljenoj na local_119, koja je RSP uvećan za 0x3f, odnosno 63 u dekadskom zapisu, zato što ima 63 byte vrijednosti spremljenih na stacku. Ovo se također može vidjeti na slici ispod, while se izvršava sve dok varijabla pbVar2 koja se povećava za 3 nije jednaka adresi spremljenoj na local_119, koja je RSP uvećan za 0x3f, odnosno 63 u dekadskom zapisu, zato što ima 63 byte vrijednosti spremljenih na stacku.
  
 {{ rev2_ghidra:slika18.png?nolink&500 | Slika 18. - local_119 }} {{ rev2_ghidra:slika18.png?nolink&500 | Slika 18. - local_119 }}
  
-Na slici 16. se vidi da je puVar2 pointer na local_158, sada znamo da local_158 zapravo sadržava 63 byteova, te možemo napraviti retype local_158 varijable.+Na slici 16. se vidi da je puVar2 pointer na local_158, sada znamo da local_158 zapravo sadržava 63 bajtova te možemo napraviti retype local_158 varijable.
  
 {{ rev2_ghidra:slika19.png?nolink&500 | Slika 19 - retype local_158 }} {{ rev2_ghidra:slika19.png?nolink&500 | Slika 19 - retype local_158 }}
Line 400: Line 398:
 ==Napomena== ==Napomena==
  
-Preporučuje se da kad radite reversing, probate otvoriti datoteku i drugim alatima za reverzno inženjerstvo, jer će nekad neki drugi alat bolje dekompajlirati programski kod i razumljivije prikazati logiku programa koji rješavate, na slici ispod je prikaz rev2 zadatka otvorenog pomoću alata Binary Ninja.+Preporučuje se da kad radite reversing, probate otvoriti datoteku i drugim alatima za reverzno inženjerstvo, jer će nekad neki drugi alat bolje dekompajlirati programski kod i razumljivije prikazati logiku programa koji rješavate, na slici ispod je prikaz rev2 zadatka otvorenog pomoću alata Binary Ninja.
  
 {{ rev2_ghidra:slika27.png?nolink&500 | Slika 27. - Binary Ninja prikaz rev2 }} {{ rev2_ghidra:slika27.png?nolink&500 | Slika 27. - Binary Ninja prikaz rev2 }}
rev2_ghidra.1763665836.txt.gz · Last modified: 2025/12/01 11:40 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki