user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 16-10-2013 21:29:45

IceF0x
#! Gourou Linux

[Tuto]gdb GNU DeBugger

== 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 smile

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

#2 28-10-2013 11:05:24

itichy
#! The itichy and Scratachy Show

Re : [Tuto]gdb GNU DeBugger

merci pour cet introduction a gdb mon coyotus


ядра паники

Hors ligne

#3 28-10-2013 20:20:15

IceF0x
#! Gourou Linux

Re : [Tuto]gdb GNU DeBugger

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

#4 29-10-2013 09:41:24

itichy
#! The itichy and Scratachy Show

Re : [Tuto]gdb GNU DeBugger

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 smile tu a aussi l'options -q dans gdb pour evite tous le texte au debut gdb -q ./tonbinaire


ядра паники

Hors ligne

#5 29-10-2013 20:48:01

IceF0x
#! Gourou Linux

Re : [Tuto]gdb GNU DeBugger

Merci pour l'info, je note smile


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

#6 22-03-2014 14:46:15

3ACK3OX
Membre

Re : [Tuto]gdb GNU DeBugger

merci pour cette exercice smile je vais me remettre aux crackage, ca me permet de garder mes neurones en vie big_smile


Celui qui ne dispose pas des 2/3 de ca journée, est un ésclave  ]:D

OS: Crunchbang avec dépots Kali smile

Hors ligne

Pied de page des forums