FR EN

Challenge 32 - Reverse 250

<< Challenge 25 - Reverse 150

Challenge 30 - Reverse 500 >>

Un reverse comparable au challenge 31 : 0x30 caractères en hexa qui sont convertis via strtoul. Ensuite, le buffer est passé à une fonction qui réside à 0x80484e4. 4 bytes par 4 bytes, la clé est vérifiée :

80484f1:      mov 0x8(%ebp),%eax
80484f4:      mov (%eax),%eax
80484f6:      mov %eax,-0x4(%ebp)
80484f9:      cmpl $0x65bcff45,-0x4(%ebp)

Les 4 premiers bytes sont donc 45ffbc65 en little endian.

804850c:      mov 0x8(%ebp),%eax
804850f:      mov 0x4(%eax),%eax
8048512:      mov %eax,-0x4(%ebp)
8048515:      mov -0x4(%ebp),%eax
8048518:      rol $0xd,%eax
804851b:      cmp $0x34a7fb12,%eax

Les 4 suivants sont le little endian de ROR(0x34a7fb12, 13), soit le little endian de 0xd891a53f, donc 3fa591d8.

804852c:      mov 0x8(%ebp),%eax
804852f:      mov 0x8(%eax),%eax
8048532:      mov %eax,-0x4(%ebp)
8048535:      mov 0x8(%ebp),%eax
8048538:      mov (%eax),%edx
804853a:      mov 0x8(%ebp),%eax
804853d:      add $0x4,%eax
8048540:      mov (%eax),%eax
8048542:      add %edx,%eax
8048544:      cmp -0x4(%ebp),%eax

Le troisième mot est la somme des deux premiers, donc 0x13e4ea484. Le résultat est plus grand que 2^32 donc le résultat est tronqué. On obtient donc 84a44e3e en little endian.

8048550:      mov 0x8(%ebp),%eax
8048553:      mov 0xc(%eax),%eax
8048556:      mov %eax,-0x4(%ebp)
8048559:      mov -0x4(%ebp),%eax
804855c:      sub $0x75718ff8,%eax
8048561:      cmp $0x7c40,%eax
8048566:      ja 8048577
8048568:      mov -0x4(%ebp),%eax
804856b:      and $0xffff,%eax
8048570:      cmp $0xab39,%eax

Le quatrième mot est un peu plus compliqué. Il a deux conditions : x - 0x75718ff8 > 0x7c40 et x & 0xffff = 0xab39. Le premier nombre qui convient est 39ab7175 en little endian.

804857e:      mov 0x8(%ebp),%eax
8048581:      mov 0x10(%eax),%eax
8048584:      mov %eax,-0x4(%ebp)
8048587:      mov $0x80484e4,%eax
804858c:      cmp %eax,-0x4(%ebp)
[...]
8048598:      mov 0x8(%ebp),%eax
804859b:      mov 0x14(%eax),%eax
804859e:      mov %eax,-0x4(%ebp)
80485a1:      cmpl $0xdeadbabe,-0x4(%ebp)

Les deux derniers mots sont simples : e4840408bebaadde et on a enfin les 48 caractères nécessaires :

$ ./reverse4
Enter key: 45ffbc653fa591d884a44e3e39ab7175e4840408bebaadde
Bank account: 9402901303833-67249270571

<< Challenge 25 - Reverse 150

Challenge 30 - Reverse 500 >>