FR EN

Challenge 25 - Reverse 150

<< Challenge 31 - Reverse 150

Challenge 32 - Reverse 250 >>

Pour ce challenge 25, on avait un exécutable ELF 32-bits qui affiche "Th31c7f2011i5n0ts0c0o0ol!". Le but est de patcher un byte pour qu'il sorte "Th31c7f2011i5s0c0o0ol!".

Le début de l'ELF à 0x80483f0 nous donne l'adresse de la fonction main : 0x80484a4 (qui dure jusqu'à 0x804867f). Cette fonction contient un ensemble de strcpy() et memcpy() des chaînes "whatwhat?", "s0c0o0ol!" et "Th31c7f2011i5n0t", à des adresses différentes.

On commence par repérer l'adresse utilisée pour l'impression sur la sortie standard, trouvée à la fin de la fonction :

8048661:       lea 0x18(%esp),%eax
8048665:       mov %eax,(%esp)
8048668:       call 80483d8 <puts@plt>

La variable en question est donc à esp + 0x18. On cherche la dernière chaîne copiée à cette adresse :

804850d:       mov $0x804a024,%eax
8048512:       mov %eax,0x4(%esp)
8048516:       lea 0x18(%esp),%eax
804851a:       mov %eax,(%esp)
804851d:       call 80483b8 <strcpy@plt>

0x804a024 correspond à "Th31c7f2011i5n0t". On cherche donc la concaténation qui amène à l'ajout de "s0c0o0ol!" (0x804a03f) qui est un peu plus loin :

8048576:       movl $0x804a03f,(%esp)
804857d:       call 80483a8 <strlen@plt>
8048582:       lea 0x1(%eax),%edx
8048585:       lea 0x18(%esp),%eax
8048589:       add $0x10,%eax
804858c:       mov %edx,0x8(%esp)
8048590:       movl $0x804a03f,0x4(%esp)
8048598:       mov %eax,(%esp)
804859b:       call 8048398 <memcpy@plt>

Il suffit donc de modifier l'adresse de ce memcpy, qui est de base à esp + 0x18 + 0x10, vers esp + 0x18 + 0xd (pour enlever les trois caractères du n0t).

A coup de hexedit, on trouve que le 0x10 en question est à l'offset 0x58b et on le remplace par 0x0d.

On a donc la réponse du challenge : 58b-0d.

<< Challenge 31 - Reverse 150

Challenge 32 - Reverse 250 >>

2 messages

  1. FrizN 06/07/14 14:44

    Ce n'est pourtant pas très compliqué, peut-être faut-il commencer par des choses plus simples. Par exemple, comprendre les bases de l'assembleur.

  2. Anonyme 05/07/14 16:43

    j'ai pas compris du tout