Ich hab wie gesagt das Problem, dass ich mich noch verdammt schwer tue damit die zusammenhänge zu sehen.
Code:
CRC32_Name % (CRC32_Name ^ UnknownHash_Serial) + CRC32_Name / (CRC32_Name ^ CustomHash_Serial)
Ist UnknownHash und CustomHash wirklich was unterschiedliches???
Also der CRC32_Name wird in EAX gespeichert und der Hash doch in ECX soweit ich weiß. ECX wird durch die Hash-Funktion und dem anschließenden Befehl
Code:
Address Hex dump Command Comments
004018A6 |. AB |STOS DWORD PTR ES:[EDI]
in 40745D gespeichert und nachher wieder reingeladen und EAX ist einfach "übrig" aus dem Call
Code:
CPU Disasm
Address Hex dump Command Comments
00402037 |. E8 80F8FFFF CALL 004018BC ; \crackme8.004018BC
Dadurch rechnet das hier doch:
Code:
Address Hex dump Command Comments
00402054 |. 33C8 XOR ECX,EAX
00402056 |. 33D2 XOR EDX,EDX
00402058 |. F7F1 DIV ECX
0040205A |. 03C2 ADD EAX,EDX
CRC32 ^ Hash ...dann folgt EDX leeren und dann eine Division durch ECX, also CRC32 / (CRC32 ^ Hash) und da in EDX der Restwert abgespeichert wird sieht es dann eigentlich so aus wie bei dir:
Code:
CRC32 / (CRC32 ^ Hash) + CRC32 % (CRC32 ^ Hash)
Diese Funktion ist also nur = 0 wenn der CRC32 = 0 ist. Die Lösung ist jetzt, sowie ich es verstanden habe, eine Serial zu finden die zu dem CRC von dem Usernamen "mucki" einen Hash erstellt, wo gilt: CRC32("mucki") ^ (Hash(x) = 0, wobei x gesucht wird.
Hab ich das soweit erstmal richtig verstanden?
Und was bringt einem das eintragen einer zu langen Serial? Abgesehen davon, dass es abstürzt

? Soll ich etwa den Buffer Overflow ausnutzen um an eine andere Stelle zu returnen?