tr4ceflow Crackme/Keygenme 2
2 Tage nach der Veröffentlichung des Keygenme 1 von tr4ceflow gab es Nummer 2 hinterher. Dies war wohl schwieriger und verlangte mehr Geduld. Geduld hat es in der Tat gebraucht, denn bis ich meine Lösung vollständig implementiert hatte vergingen ein paar Stunden.
Aber alles der Reihe nach. Es gibt in diesem Fall 3 Eingabefelder, einmal für den Namen und zwei für die Serial. Nur der Name und die erste Serial hängen zusammen, die zweite Serial wird (bis auf die Länge) nicht vom Usernamen bestimmt.
Fangen wir mit der Analyse an. Ich werde, im Gegensatz zum letzen Artikel, direkt den verschönerten C-Code aus IDA entnehmen und nicht den direkten ASM Code gegenüberstellen. An Anfang wird wieder der Name abgerufen und die Länge des Namens vergleichen. Wenn dieser zwischen 6 und 10 Zeichen lang ist, ist er gültig. Im nächsten Schritt wird eine XORChecksum aus dem Buchstabenindex und dem jeweiligen Buchstaben - 0×30 erzeugt.
usernameLength = GetDlgItemTextA(a1, 40002, usernameString, 200); if ( usernameLength - 6 <= 4 ) { currentStringIndex = 0; XorChecksum = 0; while ( currentStringIndex != strlen(usernameString) - 1 ) { XorChecksum += currentStringIndex ^ (usernameString[currentStringIndex] - 0x30); ++currentStringIndex; } |
Das ist bis hierhin kein Hexenwerk. Weiter geht es mit dem Einlesen der ersten kurzen Serial und dem Vergleich der Länge mit 3 (Code ist zu trivial, daher nicht abgedruckt). Danach folgt der folgende Code der die erste kurze Serial in eine richtige Zahl umwandelt.