@+++ATH0
weißt du was der asm code da genau macht/prüft?
@SUID:root
hier mal ne erklärung wie ich in etwa vorgegangen bin:
-prog mit ollydbg laden
-rechtsklick -> search for -> all intermodular calls
-ganz unten in der liste findet man 2 mal GetWindowTextA (auslesen von text aus textbox: 1 x name, 1 x serial)
-da einen breakpoint setzen
-im keygenme als testeingaben "test" und "12345678" eingeben und Check drücken
-ollydbg breakt an der stelle und wenn man mit F8 durch das programm stept, sieht man im speicher die testeingaben
-wenn man weiter stept (F8) gelangt man dann irgendwann zum ExitProcess, wo das prog beendet wird
-früher oder später merkt man das an der stelle 4080C4 der entscheidende vergleich gemacht wird, der einen zum ExitProcess schickt oder nicht
-doppelklick auf diese zeile und aus dem JE ein JNE machen (ollydbg macht JNZ daraus)
-somit hat man die debuggerroutine gepatcht und kann beim nächsten durchlauf, ab dort in den wichtigen programmteil steppen
-hinter dem debuggercheck kommen dann die überprüfungen ob name und serial gültige längen haben
-bei 408159 beginnt dann der erste teil der keygenroutine (man sieht das jeder buchstabe, bis auf den letzten durchgegangen wird und entsprechende berechnungen durchgeführt werden)
-nach dieser schleife findet dann ein jmp nach 4081DB statt, wo der 2. teil der keyberechnung stattfindet
-hier wird zunächst überprüft ob die zahl (bzw der string dazu) 8 stellen hat, falls nicht wird wiederum eine berechnung durchgeführt (jump nach 4081A2). solange bis die zahl dann 8 stellen hat.
wie die berechnungen bei den beiden keygenroutinen genau sind, muss man dann anhand des assemblercodes und durch beobachtung des speichers / der register nachvollziehen.