iCTF 2011 > Challenge 31 - Reverse 150
Le challenge 31 était le plus facile des reverse de cette année. Le but étant toujours de faire sortir à l'exécutable un numéro de compte.
Le main commence à 0x8048514 avec le prompt "Enter key:". Ensuite, le programme prend 0x30 caractères sur l'entrée standard qui doivent être des chiffres ou des lettres minuscules entre a et f inclus. Cette clé est transformée en hexa, deux caractères par deux caractères via strtoul à 0x80485fc.
La validité de la clé est vérifiée avec un memcmp à 0x8048656 :
804863f: movl $0x18,0x8(%esp) 8048647: movl $0x804a028,0x4(%esp) 804864f: lea 0x4c(%esp),%eax 8048653: mov %eax,(%esp) 8048656: call 80483f0 <memcmp@plt>
Si cette clé est valide, plusieurs opérations xor/shift/multiplications sont effectuées sur le buffer avant de le sortir sur l'entrée standard. Il n'y a donc rien de plus à faire que de regarder à 0x804a028 les 0x18 premiers caractères pour obtenir notre clé :
(gdb) x/24xc 0x804a028 0x804a028: 0x6b 0x90 0xca 0x12 0xfe 0xc1 0xb7 0x23 0x804a030: 0xe7 0xb4 0x9c 0x10 0x92 0xfe 0xcb 0x4a 0x804a038: 0x75 0xef 0xca 0xb7 0x1e 0xcb 0xfa 0x37 (gdb) q $ ./reverse3 Enter key: 6b90ca12fec1b723e7b49c1092fecb4a75efcab71ecbfa37 Bank account: 7507067699078-37914640262