GNU debugger (gdb)

Gdb (GNU debugger) je debugging alat koji se koristi za analizu binarnih datoteka. Nudi funkcionalnost pauziranja programa u određenim trenucima izvođenja, pregled memorije, registara, stoga, gomile itd… Njime je moguće izvesti disassemble nad strojnim kodom, odnosno, učiniti binarnu datoteku čitljivom.

U svrhe debuggiranja programa, izvorni kod se može kompilirati tako da I sami izvorni kod bude dostupan unutar binarne izvršne datoteke postavljanjem tzv. debugging simbola unutar simboličke tablice binarne datoteke. Time je vidljiv kroz debugging alate poput gdb-a. Npr.

gcc –g –o example example.c // (kompiliranje izvornog koda pisanog u c-u u svrhe debuggiranja radi se zastavicom –g)

U slučaju analize binarne izvršne datoteke u svrhe binarne eksploatacije, ova opcija najčešće neće biti uključena zbog čega je potrebno razumjeti asemblerski jezik.

#Sintaksa za naredbe: naziv_naredbe(kratica)

Pokretanje gdb-a:

gdb <binarna_datoteka>

Korisnik je predstavljen s interaktivnim sučeljem programa Poruka: (No debugging symbols found in binarna_datoteka) je pokazatelj da datoteka nije kompilirana s –g, time izvorni kod neće biti dostupan.

Zadavanje intel sintakse:

 echo “set disassembly-flavor intel” > ~/.gdbinit //Unutar shell-a
Naredba za pomoć:
Izvođenja i tok programa:
Primjeri:
  break main
  break *main  + 12
  break *0x4017ba
  b *main + 27
Pregled memorije I registara:

Primjer:

Tajne vanilije

Pokretanje:

gdb main

Prikaz funkcije main:

disas main

Postavljanje breakpointa na adresu main + 49 (mov edi, 0x405098):

b *main + 49

Pokretanje programa:

r

Ispis vrijednosti registra edi:

i r edi //Rezultat je 0x407120

Izvođenje sljedeće instrukcije (mov edi, 0x405098)

ni

Ponovni ispis vrijednosti registra edi:

i r edi //Rezultat je 0x405098

Ispis funkcije provjeri_lozinku:

disas provjeri_lozinku

Postavljanje breakpointa na provjeri_lozinku + 58:

b *provjeri_lozinku + 107

Nastavak programa:

c

Username: “Username123”

Password: “mojalozinka123”

Ispis framea:

i f 

Ispis memorije na stogu:

x/20xb $rsp

Ispis stringa na vrhu stoga:

x/s $rsp

Prekid proces:

k

Izlazak:

q