Vous n'êtes pas identifié(e).
Pages : 1
== Description ==
GNU Debugger, également appelé gdb, est le débogueur standard du projet GNU. Il est portable sur de nombreux systèmes type Unix et fonctionne pour plusieurs langages de programmation, comme le C, le C++ et le Fortran. Il fut écrit par Richard Stallman en 1988. gdb est un logiciel libre, distribué sous la licence GNU GPL.
== Pré-requis ==
Les outils de compilation et de developpement, build-essential, fakeroot, checkinstall etc..
Mais c'est seulement pour tester vos propres codes
== Installation ==
Normalement gdb est pré-installé dans la plupart des distributions connues, il n'est donc pas nécessaire de l'installer.
== Utilisation ==
Pour utiliser gdb il suffit de l'appeler par son nom, vous aurez une invite de ce style:
(gdb) ❚
Pour l'exemple de ce tuto nous allons utiliser un code source de base qui va faire une simple comparaison de chaine.
[== C ==]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
int main()
{
char code[MAXSIZE]= "";
printf("Donnez le bon sérial... ou MOURREZ !\nSerial : ");
scanf("%s" ,&code);
if (strcmp(code, "MySuperPasse\0")==0)
{
printf("felicitation le serial est correct\n");
}
else
{
printf("le serial est mauvais... vous allez mourrir\n");
}
return 0;
}
Que nous compilerons comme ceci
gcc -o crackmecoyotus crackmecoyotus.c
Ce qui donne à l’exécution cet exemple.
$ ./crackmecoyotus
Donnez le bon sérial... ou MOURREZ !
Serial : test
le serial est mauvais... vous allez mourrir
Nous allons maintenant tenter de retrouver le sérial grâce à gdb.
gdb crackmecoyotus
Après avoir affiché la version de gdb et la licence, vous retrouverez cette invite.
(gdb) ❚
Nous allons commencer par désassembler l'exécutable.
(gdb) disassemble main❚
Que l'ont peut réduire à disas main, ce qui donne comme réponse
Dump of assembler code for function main:
0x080484b0 <+0>: push %ebp
0x080484b1 <+1>: mov %esp,%ebp
0x080484b3 <+3>: push %edi
0x080484b4 <+4>: push %ebx
0x080484b5 <+5>: and $0xfffffff0,%esp
0x080484b8 <+8>: add $0xffffff80,%esp
0x080484bb <+11>: movl $0x0,0x1c(%esp)
0x080484c3 <+19>: lea 0x20(%esp),%ebx
0x080484c7 <+23>: mov $0x0,%eax
0x080484cc <+28>: mov $0x18,%edx
0x080484d1 <+33>: mov %ebx,%edi
0x080484d3 <+35>: mov %edx,%ecx
0x080484d5 <+37>: rep stos %eax,%es:(%edi)
0x080484d7 <+39>: movl $0x80485d0,(%esp)
0x080484de <+46>: call 0x8048360 <printf@plt>
0x080484e3 <+51>: lea 0x1c(%esp),%eax
---Type <return> to continue, or q <return> to quit---
Mais qu'est-ce donc ce charabia ?
Ce ne sont ni plus ni moins que des instructions assembleur dont voici une liste réduite avec les explications http://www.iut-arles.up.univ-mrs.fr/ere … i/asm.html
en gros dans notre cas on va faire enter jusqu'a ce qu'on repère la ligne suivante.
0x08048506 <+86>: call 0x8048350 <strcmp@plt>
Pourquoi donc cette ligne, hé bien c'est simple, parce que on peut aisément imaginer que pour vérifier si votre sérial est bon, il le compare à la bonne chaine.
donc on utilise l'instruction strcmp ou string compare
Mais pour pouvoir examiner cette fonction il faut pouvoir stopper le code au moment ou il va comparer les chaines, et c'est là que la fonction break de gdb intervient.
Et nous allons placer un stop sur ce passage.
(gdb) break *0x08048506
Breakpoint 1 at 0x8048506
(gdb)
Et ensuite quand nous lancerons notre exécutable il fera une pause au moment de la comparaison de la chaine.
Maintenant nous allons relancer le crackme avec run
(gdb) run
Starting program: /home/icef0x/crackmecoyotus
warning: Could not load shared library symbols for linux-gate.so.1.
Do you need "set solib-search-path" or "set sysroot"?
Donnez le bon sérial... ou MOURREZ !
Serial :
Là rentrez n'importe quel chaine afin qu'il la compare à la bonne chaine.
Serial : toto
Breakpoint 1, 0x08048506 in main ()
(gdb)
une fois fait tapez
(gdb) x/2x $esp
Cela va examiner la mémoire « x » + format (« o » = octal, « x » = hexa, « u » = décimal non signé,
« t » = binaire, le "2" c'est le nombre d'arguments de sortie).
(gdb) x/2x $esp
0xbffffaa0: 0xbffffabc 0x08048603
Malgré avoir demandé 2 argument de sortie, il affiche 3 adresses, mais ne vous occupez pas de celle suivie de :, mais seulement des 2 dernières.
Nous les lirons une par une avec x/s (s = strings)
(gdb) x/s 0xbffffabc
0xbffffabc: "toto"
Voilà la chaine que nous avons rentré.
(gdb) x/s 0x08048603
0x8048603: "MySuperPasse"
(gdb)
Et ensuite il la compare avec devinez quoi
Maintenant que nous avons ce résultat, testons à nouveau notre crackme.
Tapez quit pour quitter gdb
(gdb) quit
Et voici le résultat.
$ ./crackmecoyotus
Donnez le bon sérial... ou MOURREZ !
Serial : MySuperPasse
felicitation le serial est correct
Voilà pour la fin de cette introduction au reverse avec gdb, à suivre le patching et le reverse de crackme plus compliqué.
== Voir aussi ==
* **(en)** http://www.sourceware.org/gdb/
* **(fr)** http://fr.wikipedia.org/wiki/GNU_Debugger
Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D
Hors ligne
merci pour cet introduction a gdb mon coyotus
ядра паники
Hors ligne
Justement je voulais ton avis sur le tuto, comme tu as plus utilisé gdb que moi.
Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D
Hors ligne
non bien explique rien a re dire pour une premiere approche apres il y a plein d'options si j'ai le temp vais essaie de faire un concentre de toute les commande gdb tu a aussi l'options -q dans gdb pour evite tous le texte au debut gdb -q ./tonbinaire
ядра паники
Hors ligne
Merci pour l'info, je note
Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D
Hors ligne
merci pour cette exercice je vais me remettre aux crackage, ca me permet de garder mes neurones en vie
Celui qui ne dispose pas des 2/3 de ca journée, est un ésclave ]:D
OS: Crunchbang avec dépots Kali
Hors ligne
Pages : 1