Cracking
Un bon désassembleur sur Linux ?
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.
Un bon désassembleur sur Linux ?
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)
Un bon désassembleur sur Linux ?
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.
Un bon désassembleur sur Linux ?
Bonjour à tous,
Si ce sujet intéresse d’autres personnes, regardez à cette adresse : http://codef00.com/projects#debugger