Cracking

vendredi 27 décembre 2013, 20:51  #1
Un bon désassembleur sur Linux ?
Esprit
  • 11 posts

Bonjour à tous,

Je m’intéresse de plus en plus à la sécurité et en cherchant à en apprendre plus que je suis tombé sur root-me.org. Tout d’abord, merci pour ce site ! Les challenges permettent d’attaquer des problématiques diverses et d’apprendre beaucoup en se creusant la tête.

J’ai déjà fait quelques challenges dans plusieurs domaines et je viens de finir le challenge "ELF - 0 protections". En voyant les solutions, j’ai été assez surpris de voir que le code assembleur dans la première solution ne correspondait pas à ce que j’avais trouvé...

J’ai essayé d’utiliser plusieurs logiciels en ligne de commande sous GNU/Linux.
=> gdb
=> objdump
=> ndisasm

Ce que je vois chez moi :
804871e:        c7 04 24 70 89 04 08         movl   $0x8048970,(%esp)

Ce que l’auteur de la solution voit :
.text:0804871E                 mov     dword ptr [esp], offset aDommageEssayeE ; "Dommage, essaye encore une fois."

Est-ce quelqu’un aurait une explication ? Un mauvais paramètre dans l’utilisation d’un des désassembleur cité plus tôt ? Une proposition pour un autre désassembleur ?

Merci d’avance,

Esprit

ps : J’ai essayé de ne pas en dire trop sur le challenge mais si vous considérez qu’il y a un indice de trop, n’hésitez pas à corriger.

vendredi 27 décembre 2013, 21:15  #2
Un bon désassembleur sur Linux ?
herve_c
  • 22 posts

Salut

Ce que tu obtiens avec objdump est de l’assembleur avec une syntaxe "AT&T" alors que l’auteur de la solution a une syntaxe "Intel".
Si tu veux avoir la même syntaxe que lui, utilise l’option "-M"

exemple : objdump -d mon_prog -M intel

PS : Apres, je ne sais pas quel est le déassembleur utilisé par l’auteur de la solution (et peut-être qu’il a completé le résultat à la main pour rendre ça plus lisible)

vendredi 27 décembre 2013, 21:48  #3
Un bon désassembleur sur Linux ?
Esprit
  • 11 posts

Bonjour herve_c,

J’ai essayé avec ta proposition :
objdump -d ch1.bin -M intel | grep 804871e
804871e:        c7 04 24 70 89 04 08         mov    DWORD PTR [esp],0x8048970

C’est déjà mieux mais si j’ai bien compris, la fin de la ligne (0x8048970), ça correspond à la fin de la chaîne dans la solution (offset aDommageEssayeE ; "Dommage, essaye encore une fois."). Est-ce qu’il y a un autre argument qu’on peut passer à la commande pour voir le contenu de 0x8048970 ?

[Edit : J’ai trouvé une piste intéressante : radare
C’est un "éditeur hexadécimal en ligne de commande" mais il permet de visualiser le contenu d’un fichier binaire.

La même ligne que ci-dessous dans le mode visualisation :
    |`-> 0x0804871e  |           c7042470890408  mov dword [esp], 0x8048970 ; str.Dommage,_essaye_encore_une_fois_

Pour visualiser :

$ radare ch1.bin
[0x080484F0]> V <Enter>

Il y a aussi un radare2. Je regarderai tout ça plus en détail demain mais ça s’annonce vraiment intéressant.

dimanche 12 octobre 2014, 19:08  #4
Un bon désassembleur sur Linux ?
Larouge
  • 1 posts

Bonjour à tous,

Si ce sujet intéresse d’autres personnes, regardez à cette adresse : http://codef00.com/projects#debugger