iCTF 2011 > Challenge 32 - Reverse 250
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