Introduction au reverse engineering (analyse dynamique)
Pour Linux
Outils de base
- strace
- ltrace
- gdb
Code de base
#include <stdio.h>
#include <stdlib.h>
int main() {
int c;
FILE *file;
file = fopen("test.txt", "r");
if (file) {
while ((c = getc(file)) != -1) putchar(c);
fclose(file);
}
}
strace
- Permet de savoir en temps réel les "syscall"
- Les "syscall" sont les appels systèmes qui sont faits pour lire des fichiers, exécuter des commandes, allocation de mémoire, etc.
Exemple
Options utiles
- strace -s 1024 ... pour ne plus être embêter par la limite de caractères
- strace --help ... pour toutes options
ltrace
- Permet de savoir en temps réel les appels de librairies.
Exemple
GDB
- Déboggeur en ligne de commande pour Linux
- Disponible par défaut
Démarrer le programme
- Pour ouvrir un programme avec GDB
gdb [nom du programme]
- "run" (démarre sans rien faire)
- "start" (démarre et met automatiquement un breakpoint pour le symbole "main")
Breakpoints
- Pour arrêter à un appel de fonction.
- Commande : "b [nom de la fonction]"
Breakpoints
- Pour arrêter à une adresse précise dans le code.
- Commande : "b *0x[adresse]"
Breakpoints
- Pour arrêter à un syscall.
- Commande : "catch syscall [nom du syscall]"
Layout
- Pour être plus efficace, on a des layouts !
- Commande : "layout [nom du layout]"
Layout
- "asm"
Layout
- "regs"
Affichage de valeur
- Commande "p" ou "print"
- Affiche la valeur
- Exemple : "p $eax"
- Commande "x"
- Affiche la valeur situé à l'adresse
- Exemple : "x $eax"
- "Modificateurs"
- /s pour afficher une chaîne de caractères
- /x pour afficher en hexadécimal
- Exemple : "x/s $eax", "p/x $eax"
Naviguer dans le code
- Commande "si" / "stepi"
- Exécute une instruction (entre dans les call)
- Exécute une instruction (entre dans les call)
- Commande "ni" / "nexti"
-
Exécute une instruction (n'entre pas dans les call)
-
Exécute une instruction (n'entre pas dans les call)
-
Commande "finish"
-
Sort de la fonction courante (step out)
-
Sort de la fonction courante (step out)
- Avancer plus rapidement
- Indiquer le nombre d'instruction. "ni 5"
- Utiliser des breakpoints
Misc
- Le UI a tendance à glitcher souvent avec les layouts. Utiliser "refresh" pour qu'il s'affiche correctement.
Questions ?
Exercice !
Introduction au reverse engineering (analyse dynamique)
By Olivier Arteau
Introduction au reverse engineering (analyse dynamique)
- 1,258