rev2_ghidra
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| rev2_ghidra [2025/11/20 19:10] – mbunic | rev2_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 naredba, strings 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. |
| < | < | ||
| Line 23: | Line 23: | ||
| </ | </ | ||
| - | No niti jedan vraćeni rezultat ne izgleda kao da previše otkriva. Može se također odmah pretražiti | + | No niti jedan vraćeni rezultat ne izgleda kao da previše otkriva. Može se također odmah pretražiti |
| < | < | ||
| Line 29: | Line 29: | ||
| </ | </ | ||
| - | zastavica " | + | zastavica " |
| {{ rev2_ghidra: | {{ rev2_ghidra: | ||
| 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 | + | 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 |
| {{ rev2_ghidra: | {{ rev2_ghidra: | ||
| Line 77: | Line 77: | ||
| </ | </ | ||
| - | također, vidi se da je drugi argument poziva funkcije | + | također, vidi se da je drugi argument poziva funkcije |
| Treći argument je pointer | Treći argument je pointer | ||
| Line 97: | Line 97: | ||
| </ | </ | ||
| - | odgovarala | + | odgovarala |
| < | < | ||
| Line 103: | Line 103: | ||
| </ | </ | ||
| - | 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: | {{ rev2_ghidra: | ||
| - | Također se varijable | + | Također se varijabla |
| FUN_00404ee0 u fgets. Varijablu lVar2 nećemo preimenovati, | FUN_00404ee0 u fgets. Varijablu lVar2 nećemo preimenovati, | ||
| Line 122: | Line 122: | ||
| </ | </ | ||
| - | 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 | U tom slučaju bi varijabla | ||
| - | Nakon toga, u if statementu, vrijednost varijable | + | 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 |
| < | < | ||
| Line 156: | Line 156: | ||
| </ | </ | ||
| - | Ako je duljina korisničkog unosa jednaka 21, ulazi se u do - while blok, unutar kojega se nalazi switch sa 7 caseva, | + | 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 | + | Pregledom switcha, na kraju switcha se odmah može vidjeti case 0, koji samo ispisuje |
| {{ rev2_ghidra: | {{ rev2_ghidra: | ||
| Line 168: | Line 168: | ||
| </ | </ | ||
| - | koja postavlja varijablu bVar1 na dereferenciranu vrijednost user_input pointera, koji je pointer na string buffer. | + | koja postavlja varijablu bVar1 na dereferenciranu vrijednost user_input pointera, koji je pointer na string buffer. |
| - | 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 |
| {{ rev2_ghidra: | {{ rev2_ghidra: | ||
| Line 205: | Line 204: | ||
| </ | </ | ||
| - | 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, |
| - | u svakom do blok, puVar2 + 0 određuje koji switch case će se izvršiti, | + | |
| {{ rev2_ghidra: | {{ rev2_ghidra: | ||
| - | 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 | + | 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 |
| 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: | {{ rev2_ghidra: | ||
| - | Na slici 16. se vidi da je puVar2 pointer na local_158, sada znamo da local_158 zapravo sadržava 63 byteova, | + | Na slici 16. se vidi da je puVar2 pointer na local_158, sada znamo da local_158 zapravo sadržava 63 bajtova |
| {{ rev2_ghidra: | {{ rev2_ghidra: | ||
| Line 400: | Line 398: | ||
| ==Napomena== | ==Napomena== | ||
| - | Preporučuje se da kad radite reversing, probate otvoriti datoteku i s drugim alatima za reverzno inženjerstvo, | + | Preporučuje se da kad radite reversing, probate otvoriti datoteku i drugim alatima za reverzno inženjerstvo, |
| {{ rev2_ghidra: | {{ rev2_ghidra: | ||
rev2_ghidra.1763665836.txt.gz · Last modified: 2025/12/01 11:40 (external edit)