User Tools

Site Tools


rev2_bp_counter

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_bp_counter [2025/10/30 16:32] mbunicrev2_bp_counter [2025/12/01 11:40] (current) – external edit 127.0.0.1
Line 3: Line 3:
  
  
-Prije nego što pročitate ovaj članak, preporučse čitanje ovog članka:+Prije nego što pročitate ovaj članak, preporučuje se pregled writeupa rješenja istog zadatka pomoću alata Ghidra.
  
 [[rev2_ghidra|CTF writeup - rev2-Ghidra]] [[rev2_ghidra|CTF writeup - rev2-Ghidra]]
Line 10: Line 10:
  
  
-Pošto ovaj programski kod ima "early exit", odnosno kad detektira da je neka znamenka korisničkog unosa kriva, odmah ispisuje "Wrong password!" i završava izvršavanje programa. Zato se može zabilježiti koliko koda se izvršilo za koji korisnički unos, ili "perf" alatomili postavljanjem breakpointa na ulaz u do while petlju, te brojanjem koliko puta se taj dio koda izvršio. +Programski kod u ovom programu ima "early exit", odnosno kad detektira da je neka znamenka korisničkog unosa kriva, odmah ispisuje "Wrong password!" i završava izvršavanje programa. Zato se može zabilježiti koliko se koda izvršilo za koji korisnički unos, ili "perf" alatom ili postavljanjem breakpointa na ulaz u do while petlju, te brojanjem koliko puta se taj dio koda izvršio. 
  
-Ovim načinom se može napraviti "pametan" bruteforcegdje se može bruteforceati jedna po jedna znamenka korisničkog unosa, što je lagano izvedivo, jer je prostor pretraživanja u najgorem slučaju:+Ovim načinom se može napraviti "pametan" bruteforce gdje se može pronalaziti jedna po jedna znamenka korisničkog unosa, što je lako izvedivo, jer je prostor pretraživanja u najgorem slučaju:
  
 <code> <code>
Line 18: Line 18:
 </code> </code>
  
-No pošto je poznato da je unos duljine 21 te da je unos u formatu:+Budući da je poznato da je unos duljine 21te da je u formatu::
  
 <code> <code>
-CTF2025[<12 - znamenkasti broj>]+CTF2025[<12-znamenkasti broj>]
 </code> </code>
  
Line 30: Line 30:
 </code> </code>
  
-Što je lagano rješivo.+Što je lako rješivo.
  
 U slučaju da program nema raniji završetak izvršavanja programa pri pronalasku prvog neispravnog znaka, ovaj način rješavanja ne bi bio moguć. Umjesto "pametnog" bruteforcea, bio bi moguć samo bruteforce gdje se odmah mora naći cijelo rješenje, za koji je prostor pretraživanja samo 12 nepoznatih znamenki: U slučaju da program nema raniji završetak izvršavanja programa pri pronalasku prvog neispravnog znaka, ovaj način rješavanja ne bi bio moguć. Umjesto "pametnog" bruteforcea, bio bi moguć samo bruteforce gdje se odmah mora naći cijelo rješenje, za koji je prostor pretraživanja samo 12 nepoznatih znamenki:
Line 38: Line 38:
 </code> </code>
  
-što nije izvedivo.+što praktično nije izvedivo.
  
 Pseudokod ovog rješenja je postavljanje breakpointa na određeni dio do while petlje te isprobavanje svih mogućih unosa za prvi nepoznati znak. Onaj znak koji je uzrokovao izvršavanje više koda (što će se dogoditi samo u slučaju kada je ispravan znak), odnosno znak za koji se u izvršavanju više puta prošlo breakpointom na ulasku u petlju, je ispravan znak za tu poziciju unosa. Pseudokod ovog rješenja je postavljanje breakpointa na određeni dio do while petlje te isprobavanje svih mogućih unosa za prvi nepoznati znak. Onaj znak koji je uzrokovao izvršavanje više koda (što će se dogoditi samo u slučaju kada je ispravan znak), odnosno znak za koji se u izvršavanju više puta prošlo breakpointom na ulasku u petlju, je ispravan znak za tu poziciju unosa.
  
-Za rješenje koje broji prolaske breakpointova koristi se libdebug biblioteka. Naredbe za postavljanje virtualnog okruženja za izvršavanje ove skripte su:+Za rješenje koje broji prolaske breakpointova koristi se biblioteka libdebug. Naredbe za postavljanje virtualnog okruženja za izvršavanje ove skripte su:
  
 <code> <code>
Line 96: Line 96:
  
  
-Važno je da skripta u svakom pokušaju pošalje unos duljine 21, kako bi uvijek bio zadovoljen uvjet da je korisnički unos duljine 21, te nakon toga na opisani način redoslijedom pronalazi jedan po jedan znak korisničkog unosakoji jednom više prođe postavljenim breakpointom nego drugi znakovi na toj poziciji. +Važno je da skripta u svakom pokušaju pošalje unos duljine 21, kako bi uvijek bio zadovoljen uvjet da je korisnički unos duljine 21, te nakon toga na opisani način redoslijedom pronalazi jedan po jedan znak korisničkog unosa. Onaj znak za koji program jedan put više prođe postavljenim breakpointom nego za druge znakove na toj poziciji je ispravan znak
  
-Također je važan redoslijedda prolazi znakove redom od najmanjeg do najvećeg indeksa (prvo znak odmah nakon "CTF2025[", pa znak nakon njega, itd.).+Također je važan redoslijed da se pronalaze znakovi unosa redom od najmanjeg do najvećeg indeksa (prvo znak odmah nakon "CTF2025[", pa znak nakon njega, itd.).
  
 Adresa breakpointa je postavljena kao: Adresa breakpointa je postavljena kao:
Line 108: Line 108:
 Adresa instrukcije na kojoj je postavljen breakpoint koji se broji pri izvršavanju je prikazana slikom ispod: Adresa instrukcije na kojoj je postavljen breakpoint koji se broji pri izvršavanju je prikazana slikom ispod:
  
-{{:slika1.png?500|Slika 1 - Adresa instrukcije s postavljenim breakpointom}}+{{rev2_bp_counter:slika2.png?500|Slika 1 - Adresa instrukcije s postavljenim breakpointom}}
  
-Ovaj kod će se izvršiti samo ako je znamenka na toj poziciji odnosno u toj iteraciji petlje bila ispravna, pa se nije dogodio jump na ispis "Wrong password!" i exit, nego se namještaju pokazivači za ulazak u sljedeću iteraciju petlje.+Ovaj kod će se izvršiti samo ako je znamenka na toj pozicijiodnosno u toj iteraciji petlje bila ispravna, pa se nije dogodio jump na ispis "Wrong password!" i exit, nego se namještaju pokazivači za ulazak u sljedeću iteraciju petlje.
  
-{{:slika2.png?500|Slika 2 - Kod koji se izvršava pri ispravnoj znamenki}} 
  
 Pokretanjem ove skripte dobiva se rješenje zadatka. Pokretanjem ove skripte dobiva se rješenje zadatka.
  
  
-{{:slika3.png?500|Slika 3 - Rješenje zadatka}}+{{rev2_bp_counter:slika3.png?500|Slika 3 - Rješenje zadatka}}
  
  
  
rev2_bp_counter.1761841973.txt.gz · Last modified: 2025/12/01 11:40 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki