FR EN

Challenge 31 - Reverse 150

<< Challenge 17 - ASM 133786

Challenge 25 - 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

<< Challenge 17 - ASM 133786

Challenge 25 - Reverse 150 >>