GDB

Def :


GDB est un outil qui permet de faire du debugging sur un fichier executable.

Utilisation :


Pour ouvrir un fichier dans le gdb :

gbd ./<file>

Argurments :


Dans de nombreux CTF, il est nécessaire d'ajouter des arguments pour executer le programme :

gbd --args ./<fike> arg1 arg2 arg3

Dissas :


Ici on veut regarder le programme et ce à quoi il ressemble :

disass <func> //souvent ce sera main.

Breakpoints :


Il est possible de mettre des breakpoints dans le gdb pour s'arrêter
On peut donc ajouter un breakpoint à une ligne de la manière suivante :

b *0x08048414

Lorsque l'on va executer le fichier il va donc s'arrêter sur le breakpoint.

On peut consulter les infos des breakpoints et les supprimer :

info breakpoints
del 2
d 2

Hardware Breakpoints :


Pour ajouter un hardware break :

hb *0x080480d1

Parcourir le code :


Plusieurs options s'offrent à nous pour parcourir le code, en détail dans les foncitons ou non.
D'abord la première chose à faire est d'ajouter un breakpoint sur la fonction main ensuite on peut :

r
next //va à la prochaine instruction sans entrer dans les fonctions
step //entre dans les fonctions
nexti
stepi //une instruction à la fois et pas une ligne par une ligne

Pour voir la liste des fonctions du programme :

info functions

Observer le code :


Aussi avec un disass on peut voir où on en est dans le code :
Pasted image 20240909122902.png
Aussi on peut inspecter des choses en mémoire, tout autant que des registres.
Par exemple on peut inspecter comme dans l'exemple si dessus une adresse mémoire.

dec hex string char f
x/d x/x x/s x/c float
Dans notre exemple on a un push de hello word, donc esp va pointer dessus.

Modifier des valeurs :


Il est aussi possible de modifier en live des valeurs dans la mémoire, par exemple :
Pasted image 20240909124635.png
De manière générale la modification se fait de la sorte :

set *(<type>*)<address> = <value>

il faut ajouter une case mémoire à la fin au cas où pour les str, cela peut donner :

set *(int*)0x7fffffffeabc = 42  # Changes the value at address to 42

Registres :


Pour observer les registres à tout moment :

info registers
i r

Pour voir la stack frame :

info frame

Fonction supplémentaire :


Pour avoir des fonctions supplémentaires et une experience utilisateur plus sympa on utilise :

bash -c "$(curl -fsSL https://gef.blah.cat/sh)"