Mein erstes KeyGenMe

Hallo an Alle.

Ich bin neu hier und befasse mich seit etwa 2 Wochen mit CrackMe's und KeyGenMe's.
Heute habe ich mein erstes KeyGenMe programmiert.

Es istz eine gültige Serialnummer für den eingegebenen NAmen herauszufinden.
Wer Lust hat kann einen KeyGen programmieren.
Patchen ist nicht erlaubt.
Wer es geschafft hat soll bitte die Serialnummer und den Lösungsweg posten.

KeyGenMe#1

MfG
Steve
 
ATH0
1040-1124-1196-1244

- In OllyDbg laden und starten
- Strg + G (Goto) -> "__vbaStrCmp", Breakpoint here
- Gewünschten Namen eingeben und klicken
- Beim Break die Serial von EAX ablesen


Sorry, aber wenn es so einfach ist, hat man keine Lust sich den Algorithmus anzuschauen. :D
 
Hallo ATH0

Mich würde Interessieren, wie lange Du dafür gebraucht hast.
War sicher sehr einfach, da es mein erstes KeygenMe war ..

MfG
Steve
 
Die reine Key-Findung ging in unter einer Minute genaugenommen. Weil __vbaStrCmp eins der ersten Dinge ist, die ich bei VB Programmen in Angriff nehme. :D

Beim Self-Keygen habe ich dann so 3 Minuten getüftelt.
 
bei mir dauerte das laden von olly länger als das finden des gültigen keys. :D

Ich schaue mir immer zuerst die strings an - da sieht , man gleich "richtig" "falsch", dahin gesprungen und den conditional jump gesucht, der wie bei VB zu erwarten ist von einem strcmp abhängig ist.

Code:
90nop / 1824-1872-1983-2095

Ich versuch mal, deine exe so zu patchen, dass ein keygen daraus wird. :)
 
Hallo 90nop

Genauso wie Du habe ich es auch selber gelöst.
Ja ein KeyGen wäre schön.

Mir macht es auf jeden fall Spaß mich an CrackMe's zu versuchen.
Werde mir jetzt noch das ein oder andere aus diesem Forum vornehmen.
 
Hier mal mein "self-keygen":

0040255F C785 7CFFFFFF 5C0>MOV DWORD PTR SS:[EBP-84],16055C
Man bekommt bei nem Fehler den Serial in die MsgBox, der Code selbst dürfte an der Stelle selbsterklärend sein?


mfg
 
Original von zaibl
Hier mal mein "self-keygen":

0040255F C785 7CFFFFFF 5C0>MOV DWORD PTR SS:[EBP-84],16055C
Man bekommt bei nem Fehler den Serial in die MsgBox, der Code selbst dürfte an der Stelle selbsterklärend sein?


mfg

Nette Idee. Aber das wird nicht immer funktionieren. Besonders nicht auf anderen PCs.
Die Adresse der richtigen Serial wird dynamisch im Speicher alloziiert. Bei mir ist die Adresse der richtigen Serial gerade: 0x00164C1C. Beim nächsten Start oder sogar schon beim nächsten Durchlauf kann sich die Adresse ändern. ;)
 
Original von zaibl
Hier mal mein "self-keygen":
Den Fehler hat ATHO ja schon beschreiben - lässt sich aber auch sehr simpel umgehen, in dem man statt einer festen Adresse die relative [EBP-X] Angabe nutzt ;)
 
Ihr habt natürlic recht, die relative Adresse wäre dann EBP-2C (mehrfach getestet (nur auf meinem PC).

Aber Olly findet "MOV DWORD PTR SS:[EBP-84], [EBP-2C]" nicht so gut, ich hab garkeine ahnung wie man son pointer (nehm ich an) kopieren soll.

MfG
 
Die Kombination von zwei Zeiger-Operanden in einer Instruktion ist auf der x86-Architektur nicht zulässig. Du müsstest den Umweg über ein Register oder über den Stack gehen. Dazu müsstest du natürlich mehr Platz haben um deine Patches einzupflegen. Ich habe in meiner Version einfach mal ein ganzes Stück mit NOPs geplättet und den Pointer auf die Serial in EAX direkt nach dem Compare in die String-Variant Variable geschrieben, die später bedingungslos von der ursprünglichen "Richtig"-MsgBox benutzt wird. ;)
 
Dacht ichs mir doch fast.

Naja, nochmal nachgebessert eben gerade:

Ich hab jetzt einfach die entscheidung geNOPt, ob es richtig oder falsch ist, damit hat ich einiges an platz, dort hab ich die relative adresse von der serial in eax geschoben und bin dann runter zum Anfang der Falschmeldung gesprungen. Dort hab ich noch diese Adresse mit eax getauscht und nu klappts jedes mal.
MfG
 
Code:
MOV DWORD PTR SS:[EBP-84],DWORD PTR SS:[EBP-2C]
hm, jetzt weis ich warum der immer abgestützt ist :rolleyes:

nach athos art gehts jetzt auch :)
 
Zuletzt bearbeitet:
b3puqlol6fr0wekyt.jpg


Ich habs auch geschafft.(wenn auch unnötigen Code drinne)
 
Hi
Bin ganz neu und hab eigentlich keine Ahnung, aber hab es trotzdem herausgefunden :D (war sicher auch ne Portion Glück)

Name: lol
Serial: 2920-4380-6570-9855
(kapier nicht ganz, wie ich das versteckt darstelle)

Jetzt möchte ich ein KeyGen in VB programmieren, aber brauch da noch ein Bonus-Tipp ;)
Im 'Names in KeyGenMe' Fenster seh ich ja die aufrufe. Dort gibts ja jede Menge StrCat, StrMove, StrCopy etc. Soll ich jetzt einfach überall Breakpoints setzen und den 'Algorithmus' so Stück für Stück abarbeiten und einfach im KeyGen wieder einbauen?
Wenn ich mit F2 BPs setze bekomm ich eine Meldung 'Suspicious Breakpoint' und dann stoppt es auch nicht wie es sollte.

Bitte gebt mir ein Tipp.

mfg
Asgar
 
Original von Asgar
Hi
Bin ganz neu und hab eigentlich keine Ahnung, aber hab es trotzdem herausgefunden :D (war sicher auch ne Portion Glück)

Name: lol
Serial: 2920-4380-6570-9855
(kapier nicht ganz, wie ich das versteckt darstelle)

Jetzt möchte ich ein KeyGen in VB programmieren, aber brauch da noch ein Bonus-Tipp ;)
Im 'Names in KeyGenMe' Fenster seh ich ja die aufrufe. Dort gibts ja jede Menge StrCat, StrMove, StrCopy etc. Soll ich jetzt einfach überall Breakpoints setzen und den 'Algorithmus' so Stück für Stück abarbeiten und einfach im KeyGen wieder einbauen?
Wenn ich mit F2 BPs setze bekomm ich eine Meldung 'Suspicious Breakpoint' und dann stoppt es auch nicht wie es sollte.

Bitte gebt mir ein Tipp.

mfg
Asgar

Das mit dem Algo analysieren würd mich auch mal Intressieren :D
Aber einen Selfkeygen ist iwie total einfach :D (in dem Fall :D)
 
In dem Fall kann man den "Algo" einfach rippen.

Es ist ja eigentlich nur eine Funktion:

Code:
serial = genalgo($username)

Der Keygen wird mit dem Crackme schon mitgeliefert ;)

Daher ist es auch sehr einfach zu knacken. Intressanter wäre es, wenn es eine Funktion wie
Code:
 checkserial(serial,username)
gäbe, die den Algo auf ein paar Merkmale überprüft ABER nicht den gesammten Key berechnet.

So zwingt man den Reverser sich die Checkroutine genauer anzusehen. :)
 
Zurück
Oben