ltrace est un programme de débogage et de reversing Linux permettant de tracer les bibliothèques appelées par un programme. Il est alors possible de retrouver les valeurs attendues lors de la comparaisons de valeurs.





0x01. SYNOPSIS FRANCAIS


Usage: ltrace [option ...] [commande [argument ...]]

Trace des bibliothèques d'un programme donné en argument.

  -a, --align=COLUMN  aligne les valeurs retournées dans une colonne spécifiée
  -c                  compte le temps et les appels et créé un rapport à la sortie
  -C, --demangle      décode les noms de symboles bas-niveau (ring0) dans les noms de niveau utilisateurs (ring3)
  -d, --debug         affiche des informations de débogage
  -e expr             selectionne les évènements à tracer
  -f                  suit les execution fils
  -h, --help          affiche ce message d'aide
  -i                  affiche le pointeur d'instructions au moment de l'appel de la bibliothèque
  -l, --library=FILE  affiche les appels de bibliothèques depuis le fichier spécifié uniquement
  -L                  n'affiche pas les appels de bibliothèques
  -n, --indent=NR     indente l'affichage avec des saut de lignes pour chaque appel
  -o, --output=FILE   ecrite les appels dans un fichier
  -p PID              attache le process avec l'identifiant du processus
  -r                  affiche les temps relatifs
  -s STRLEN           spécifie le nombre de caractères maximum par chaines ed caractères
  -S                  affiche les appels systèmes
  -t, -tt, -ttt       affiche les temps UNIX en absolu
  -T                  affiche le temps écoulé entre chaque appel
  -u USERNAME         execute le prgoramme avec un auter identifiant
  -V, --version       affiche les informations sur la version du programme
  -x NAME             traite la variable globale NAME comme une bibliothèque de sous-routine
  -X NAME             de même que -x: et le PLT sera initialisé à partir d'ici

Rapportez les défauts à Juan Cespedes 

 



0x02. CRACKME



Il n'est pas difficile de trouver des crackmes à difficulté variable, seulement c'est très souvent pour Windows, pour cause: c'est le système d'exploitation le plus utilisé. Il y'en a cependant aussi dans Linux. Voici donc une méthode de faire.





0x03. INSTALLATION


Pour l'installation des systèmes à base de Debian, il suffit d'un


apt-get install ltrace 




0x04. EXEMPLE D'UN CRACKME


ltrace ./crackme20 
__libc_start_main(0x8048498, 1, 0xbff5af14, 0x8048600, 0x8048660 
puts("... Crackme de Test fo"...... Crackme de Test for Linux ...

)                                                 = 45
fwrite("Entrez le mot de passe pour vali"..., 1, 38, 0xb7f204e0)                            = 38
fgets(Entrez le mot de passe pour valider : abcdef
"qsd\\n", 50, 0xb7f20440)                                                              = 0xbff5ae22
strcmp("\\97\\98\\99\\100\\101\\102", "\\57\\97\\71\\110\\51") = 1
puts("J'ai bien peur que non... reesay"...J'ai bien peur que non... reesaye encore ;-)

)                                                 = 46
+++ exited (status 255) +++

On voit clairement que grâce à ltrace le mot de passe "semble" visible, car la fonction du langage C strcmp est appelée. Il suffit donc d'arriver à interpréter les paramètres passées à la fonction strcmp





0x05. REVERSING


Le but est maintenant de reverser, soit de retrouver la manière dont le passe a été définie. Dans ce cas, la méthode est terriblement simple, dans la mesure oà le code ASCII de 'a' correspond à 0x61, soit 16*6+1 c'est à dire 97. Il suffit de retrouver les caractères correspondants aux codes ASCII de la chaines de comparaison :



décimal:   48       57
hexa   : 0x30 ... 0x39
octet  :    0        9

décimal:   65       91
hexa   : 0x41 ... 0x5B
octet  :    A        Z

décimal:   97      123
hexa   : 0x61 ... 0x7B
octet  :    a        z

Ce qui nous fait donc le mot de passe suivant :


9aGN3 

soit "gagné" en 1337 5P34K (leet speak).

En espèrant que ce petit tutorial sympa ait servi ou informé et pousse les développeurs à protéger leurs programmes.




   =>   Écrit par : Nicolas, le 07 mai 2008


 
Mots clés :  
  reverse 
  
  linux 
    >   Articles connexes :

GDB - Cas d'école



Format String


Le "format string" est une vulnérabilité lié au paramètre qu'il est possible de donner à l'instruction printf et ses dérivés. Nous allons l'exploiter dans un cas d'école

Comment gagner du temps sur Internet



Cheat SHeet OpenSSL



1306542