![]() |
Re: Keygen mit MD5 um Serial zu generieren !
(fast) Garnicht. Eben nicht jeder Weg führt nach Rom ;-)
|
Re: Keygen mit MD5 um Serial zu generieren !
Gar nicht, weil MD5 ein hash ist, das heißt, man hat sozusagen nur eine Quersumme, von der man aber nicht auf ihren Ursprung rückschließen kann. Nicht zuletzt deshalb wird das Verfahren ja auch gerne bei Passwörtern eingesetzt.
|
Re: Keygen mit MD5 um Serial zu generieren !
Ich kann mich nur spaxxn anschliessen. Wir verwenden eine aehnliche Methode bei FPAV (alle 6er-Versionen) und das scheint ziemlich sicher zu sein. Bei uns geht es ja weniger um "Lizenzschluessel", als um "Abo-Schluessel", da man ja die DEF-Dateien ("Virensignaturen" ... und Heuristik etc) ueber ein Abo bezieht.
Grundlegend haben wir folgendes. Um Verwechslungen auszuschliessen, sind bestimmte Zeichenpaare tabu (bspw. 1 und I oder 0 und O). Wir haben also einen gewissen Wertebereich in dem der Schluessel kodiert wird (diese Kodierung ist nicht per-se geheim, da eben auch auf Clientseite eingesetzt). Dann gibt es einen Platz fuer eine Versionsnummer, damit der Server verschiedene Schluesselversionen unterscheiden und so bspw. ein zuvor kompromittiertes Geheimnis (mehr dazu spaeter) von einem neueren unterscheiden kann. Eine andere Version koennte sich von der Vorversion also bspw. einfach durch einen anderen geheimen Schluessel unterscheiden, koennte aber auch laenger sein, andere Daten oder die gleichen Daten in anderer Anordnung enthalten etc. pp. Desweiteren gibt es einen geheimen Teil des Schluessels, welchen nur der Server entschluesseln kann (mit dem geheimen Schluessel). Man koennte ihn sicher knacken, aber dann koennen wir die Software updaten und bspw. eine neue Schluesselversion mit einem anderen Geheimnis einfuehren, oder bspw. serverseitig aehnliches tun wie in vielerlei Verschluesselungssoftware und einfach mit verschiedenen Schluesseln "probieren". Der geheime Teil ist jener, der bspw. Dinge enthaelt wie die Tatsache wann der Aboschluessel ausgegeben wurde, wann er auslaeuft, zu welcher Software er gehoert usw. - der oeffentliche Teil hingegen enthaelt Daten, damit die jeweilige Clientsoftware grob unterscheiden kann, ob ein Schluessel akzeptabel ist oder nicht. Natuerlich obliegt dann die endgueltige Entscheidung dem Server, der auch den Schluessel fuer geheimen Teil des Aboschluessels hat. Im oeffentlichen Teil befindet sich insbesondere das Ablaufdatum des Schluessels, ein paar Flags und eine Checksumme. Clientseitig wird der oeffentliche Teil im Prinzip nur benutzt um anzuzeigen, dass ein Abo abgelaufen ist. Wuerde jemand das Datum dort manipulieren und die Checksumme ebenfalls, wuerde das serverseitig auffliegen. Was bedeutet das? Es bedeutet, dass in diesem Fall ein Angreifer erstmal den verwendeten Verschluesselungsalgo finden muss. Danach muss er "nur" noch das Geheimnis herausbekommen und dann haetten wir ein Problem und muessten ein Softwareupdate rausgeben ;) ... und dann ginge es von Neuem los ... alles in allem sollte die Preisgestaltung dann dem Angreifer begreiflich machen, dass ein Kauf ihn billiger kommt. Aber Cracker rechnen wohl eher selten in Stunden Arbeitsaufwand oder so ... :mrgreen: |
Re: Keygen mit MD5 um Serial zu generieren !
Zitat:
Delphi-Quellcode:
erhalte ich folgendes :
Edit3.text := md5Print(md5String(Edit1.Text+Edit2.Text));
7f975a56c761db6506eca0b37ce6ec87 (=Serial) Edit1.Text=10 vorgegeben Edit2.Text=11 (vorgegeben) Nun möchte umgekehrt machen : Edit1.Text: 10 Edit2.Text: ??? (diesmal nicht vorgegeben und muss ich herausfinden) Serial : 7f975a56c761db6506eca0b37ce6ec87 (Vorgegeben) Wie kann ich nun den wert in Edit2.Text bekommen ? Oder hat das nicht mit Mathematik zu tun :mrgreen: |
Re: Keygen mit MD5 um Serial zu generieren !
Zitat:
Zitat:
|
Re: Keygen mit MD5 um Serial zu generieren !
Wie generiere ich dann Passwörter für Kunden :pale:
|
Re: Keygen mit MD5 um Serial zu generieren !
Zitat:
speicherst den bei Dir. Will der User sich wieder anmelden, generierst Du wieder den Hashwert und vergleichst ihn mit dem abgespeicherten. Grüße Klaus |
Re: Keygen mit MD5 um Serial zu generieren !
Zitat:
Das ist ja der Vorteil bei Hashes, es sind One-Way-Verschlüsselungen. Du hast in deinem Programm irgendwo den gehashten Wert gespeichert. Wenn der user nun Benutzername und Passwort eingibt hashst du die 2 Strings wie oben erklärt und vergleichst das resultat mit deinem gespeicherten. |
Re: Keygen mit MD5 um Serial zu generieren !
wenn ich aber einen anderen wert als Username in Feld Edit1 oder Edit2 eingebe und generiere dann bekomme ich sicher einen anderen 32String !
wie kann ich vergleichen! Es ist sowieso immer ungleich, wenn ich mehrere user habe ? Wie ich vorher geschrieben habe, ich habe vohrher MD5 oder hash keine Erfahrung gemacht. Das ist mein 1. Versuch Der "Plackdarke" hat mir zwar einen Code als Beispiel für einen Keygen geschrieben, leider verstehe immer noch nicht, wie der Code ein gültiges Passwort genereriert :
Delphi-Quellcode:
Wie kann der Code ein Passwort erstellen ? ich sehe keine mathematike Funktion !
function md5(input: string): string;
begin result := md5Print(md5String(input)); end; function mein_serialgenerator(benutzername: string): string; var mein_md5, mein_prekey, mein_serialkey: string; const // Mögliche Sicherheitslücke: mein_seed kann man aus der EXE herauslesen. Aber ich will es ja einfach halten mein_seed := 'ABCD-Produkt-Produktversion-Edition'; begin // Dein Benutzername ist jetzt als MD5 festgehalten mein_md5 := md5(benutzername); // Damit jetzt nicht jeder daran herumspielt und einen eigenen md5 generiert, legst du einen Seed dazu und machst nochmal md5 mein_prekey := md5(mein_seed + mein_md5); // Nun hast du aber 32 Zeichen. Tu das deinen Anwendern bitte nicht an. // Nimm die ersten 8 Zeichen meinetwegen. Das ist jetzt dein Serialkey, der aus dem Benutzernamen abgeleitet ist mein_serialkey := copy(mein_prekey, 0, 8); result := mein_serialkey; end; // Kontrolle der Benutzereingabe function key_gueltig(eigegebener_benutzername, eingegebener_serialkey: String): boolean; begin if LowerCase(mein_serialgenerator(eigegebener_benutzername)) <> LowerCase(eingegebener_serialkey) then begin result := false; end else begin result := true; end; end; |
Re: Keygen mit MD5 um Serial zu generieren !
Zitat:
UserDaten1 -> MD5 Hash 1 UserDaten2 -> MD5 Hash 2 MD5 Hash 1 <> MD5 Hash2 Die Hashes sind bei Dir auf dem "Server" abgespeichert, zusammen mit den Userdaten. Wenn der User nun seine Daten eingibt kannst Du den Hash der Daten errechnen, stimmen diese mit den Werten überein die Du gespeichert hast ist der User identifiziert. Gibt der User den Hash ein, kannst Du anhand von vergleichen feststellen um welchen User es sich handelt. Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz