Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Algorithmus für eine Serialnummer (https://www.delphipraxis.net/170132-algorithmus-fuer-eine-serialnummer.html)

Popov 2. Sep 2012 16:28

Algorithmus für eine Serialnummer
 
Ich suche auf die Schnelle ein Algorithmus für eine Serialnummer. Ich weiß, der Schutz ist gering, das ist aber nicht das Problem. Und bevor ich etwas selbst entwickle was Hand und Fuß hat, vielleicht hat bereits jemand in der Richtung Erfahrungen. Die Serialnummer sollte sich aus einem Namen berechnen. Hat jemand eine Idee?

Furtbichler 2. Sep 2012 16:32

AW: Algorithmus für eine Serialnummer
 
Hash? Oder einfach ne GUID vergeben. Hat dann aber nix mit dem Namen zu tun

Oswin32 2. Sep 2012 17:36

AW: Algorithmus für eine Serialnummer
 
verschlüssel mit aes gibts gute einfache komponenten dafür und mach einen hash und danach base64 encode darauf

z.b. mit http://www.cityinthesky.co.uk/opensource/dcpcrypt ist open source..


du kannst die hdd serien nummer auslesen oder die windows key oder beides und das als passphrase nutzen (vorher hashen) dann isses auch noch rechner gebunden lass dir was einfaches einfallen ist zwar nicht der große schutz aber sollte als 0815 nummer reichen ..

als anticrack maßnahmen kannst ja seriennummer mehrmals berechnen (nicht dieselbe funktion benutzen) schleifen einbauen fake passwörter einbauen die exe mit z.b. dem program petite kleiner machen oder mit upx damm aner bei upx den header ändern damit man nicht einfach so extrahhieren kann.. ist zwar alles nicht die welt aber bischen kann man ja davon reinbringen ;)

Furtbichler 2. Sep 2012 19:31

AW: Algorithmus für eine Serialnummer
 
Wozu erst verschlüsseln und dann einen Hash darüber? Er will doch nur ne Seriennummer.

blawen 2. Sep 2012 20:00

AW: Algorithmus für eine Serialnummer
 
Zitat:

Zitat von Oswin32 (Beitrag 1181085)
verschlüssel mit aes gibts gute einfache komponenten dafür und mach einen hash und danach base64 encode darauf.

Die Schwachstelle ist selten die Generierung des Key's oder dessen Verschlüsselung. Die Achillesverse ist immer der Vergleich und die damit verbundene Zulassung des Startvorganges.

Zitat:

Zitat von Oswin32 (Beitrag 1181085)
..du kannst die hdd serien nummer auslesen...

Irrtum vorbehalten, aber m.W. müsste das Programm Admin-Rechte haben um die SN der HDD auslesen zu können - dies ist in der heutigen Zeit auch eher suboptimal...

Wie Popov richtig bemerkt hat, ist der Schutz zwar gering - aber in den meisten Fällen dürfte ein Schutz in diesem Umfang das Optimum zwischen Aufwand und Sicherheit sein.
Wenn wirkliche Sicherheit gefordert ist, geht der Aufwand massiv in die Höhe und damit auch die (betrieblichen) Kosten.

dunningkruger 2. Sep 2012 20:02

AW: Algorithmus für eine Serialnummer
 
"DiskSize(Ord('C') - 64) div 1024 div 1024" als String + GetUserName. Darüber die "Quersumme" der Buchstaben bilden und als Zahl irgendwo hinterlegen?

Furtbichler 2. Sep 2012 20:34

AW: Algorithmus für eine Serialnummer
 
Will Popov denn die Seriennummer mit dem PC verbinden?
Ich lese aus seinem Post nur, das er den Namen verwenden will.

Popov?

dunningkruger 2. Sep 2012 21:01

AW: Algorithmus für eine Serialnummer
 
Zitat:

Zitat von Furtbichler (Beitrag 1181105)
Will Popov denn die Seriennummer mit dem PC verbinden?
Ich lese aus seinem Post nur, das er den Namen verwenden will.

Popov?

Mein Vorschlag koppelt nicht mit dem PC, sondern mit der Partitionsgröße.

In der Tat!

Popov?

blawen 2. Sep 2012 21:15

AW: Algorithmus für eine Serialnummer
 
Zitat:

Zitat von dunningkruger (Beitrag 1181108)
Mein Vorschlag koppelt nicht mit dem PC, sondern mit der Partitionsgröße.

Welche aber wiederum direkt mit dem eingesetzten PC zusammenhängt :wink:.

Popov 2. Sep 2012 23:46

AW: Algorithmus für eine Serialnummer
 
Sorry, war weg, bin wieder da.

Nein, ich will es nicht an einen PC binden, ich will nur eine einfache Seriennummer. Es kann eine freie Nummer sein, wenn es ginge, so wäre eine Nummer die zusätzlich den Namen mit einbindet, nicht schlecht. Sieht man auch gelegentlich, muß aber nicht sein. Zumindest fürs erste. Ein Bekannter hat paar Leuten ein Tool von mir gezeigt und die wollen es jetzt alle kaufen. Ich will also nur einen simplen Schutz. Wenn ich mal das Programm inc. der Serial im Internet sehe, dann will ich einfach nur wissen wessen Lizenz das ist.

Eine beliebige lange Nummer bilden die einen Bedingung erfüllt, ist wohl weniger ein Problem, es soll aber nicht mal eine zweistellige Zahl und mal eine zehnstellige Zahl sein. Momentan überlege ich wie ich eine z. B. immer achtstellige Nummer bilden kann die einen Bedingung erfüllt. Obwohl das mit Hash und Base64 schon mal interessant klingt.

Furtbichler 3. Sep 2012 06:24

AW: Algorithmus für eine Serialnummer
 
Das Problem mit den Namen wäre z.B. "Hans Meyer", den es doch öfter gibt und dann identische Serials erzeugt. Ich würde wirklich eine GUID nehmen:
Delphi-Quellcode:
uses Sysutils;

var
   NewGUID: TGUID;
begin
   CreateGUID(NewGUID);
   writeln (GUIDToString(NewGUID));
end;

Uwe Raabe 3. Sep 2012 08:06

AW: Algorithmus für eine Serialnummer
 
Zitat:

Zitat von Furtbichler (Beitrag 1181134)
Das Problem mit den Namen wäre z.B. "Hans Meyer", den es doch öfter gibt und dann identische Serials erzeugt.

Sehr richtig! Eine Liste mit Seriennummer und Name/Ort ist auch nicht schwer zu pflegen. Eine simple Adressverwaltung mit integriertem Seriennummerngenerator und eine Liste sortiert nach Seriennummer sollte ausreichen.

Alternativ kannst du ja auch nach der Steuer-ID fragen, wenn alle deine Kunden aus Deutschland kommen.

EWeiss 3. Sep 2012 08:21

AW: Algorithmus für eine Serialnummer
 
Wenn man nur einen Namen zum generieren eines Schlüssels verwendet kann man es sich direkt sparen überhaupt seine Anwenung mit
einer Serialnummer zu verschlüsseln.

Schlüssel aus Name -> Hardware -> Hash generieren in Resource speichern welche auch immer anschließend ne Checksumme generieren.
Schlägt die fehl Anwendung wird beendet.

gruss

sx2008 3. Sep 2012 08:33

AW: Algorithmus für eine Serialnummer
 
Irgendwie werden hier zwei Konzepte durcheinandergewürfelt.
1.) Seriennummer
sollte so erzeugt werden, dass man nicht einfach durch Ausprobieren eine neue Seriennummer erstellen kann.
Wenn man z.B. einen String mit Ziffern und Grossbuchstaben der Länge 10 verwendet ergibt das
36^10 verschiedene Möglichkeiten.
Aus diesem riesigen Raum werden aber deutlich weniger Kombinationen verwendet, die mit einem best. Prüfalgorithmus als gültig erkannt werden.

2.) Fingerprint
Merkmale des Rechners (BIOS-Daten, MAC-Adr der Netzwerkkarten, Serialno der Festplatten,...) werden erfasst, darüber eine Prüfsumme gbildet und abgespeichert.
Stellt das Programm später eine Abweichung fest, hat sich der Rechner geändert.

Neutral General 3. Sep 2012 09:37

AW: Algorithmus für eine Serialnummer
 
Hallo,

Also ich würde es im ersten Moment vllt so machen:

Nummerier die Zeichen die enthalten sein können von 1 bis n.

Du teilst die SN in mehrere Blöcke auf und definierst die Soll-"Quersumme" jedes Blocks.
Bei 2 Blöcken z.B.

Block 1: Quersumme 14
Block 2: Quersumme 10

wenn jeder Block aus 4 Zeichen besteht dann nimmst du dir 4 Zeichen aus deinem nummerierten Zeichensatz und stellst sicher dass die Quersumme = der Soll-Quersumme für diesen Block ist.

In meinem Beispiel benutzen wir mal die Zeichen 0-9 (Nummeriert von 1 bis 10).

Block 1:

5203 (6+3+1+4 = 14)

Block 2:

1041 (2+1+5+2 = 10)

Seriennummer: 5203-1041

Du kannst natürlich noch einige mehr generieren. Umso höher die Soll-Quersummen bzw. die Anzahl der Zeichen pro Block und dem Zeichensatz, desto mehr Möglichkeiten gibt es.

Progman 3. Sep 2012 13:35

AW: Algorithmus für eine Serialnummer
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich möchte hier mal eine von mir verwendete Methode der Key-Erzeugung vorstellen.
Vielleicht ist sie ja für den hier genannten Zweck verwendbar.

Die angehängte zip-Datei enthält auch den gesamten Quellcode, eine readme.txt und Testanwendungen.

WM_CLOSE 3. Sep 2012 14:16

AW: Algorithmus für eine Serialnummer
 
Nehme den Namen
Füge Zufallsbuchstaben hinzu, bis die Länge 20 Zeichen beträgt
Verschlüssele das Ganze mit DES
Codiere es mit Base64
Fertig.

Du kannst dafür das DEC nehmen.

Sofern nicht ein großer Teil der Nutzer Cracker sind brauchst du die Methoden auch nicht verschleiern oder so.

Popov 3. Sep 2012 14:57

AW: Algorithmus für eine Serialnummer
 
Ok, vielen Dank an alle, es was sehr informativ, habe sehr viele Ideen und Anregungen. Und auch wenn ich mich jetzt, da die Zeit drängte, für eine einfache Serial aus Zufallszahlen, der Quersumme inc. Modulo Prüfsumme entschied, werde ich die nächste Version es etwas aufwändiger gestalten. Nur jetzt war die Zeit knapp. Und auch schönen Dank an Progman für das Beispiel, sehr informativ.

shmia 3. Sep 2012 15:48

AW: Algorithmus für eine Serialnummer
 
Zitat:

Zitat von Progman (Beitrag 1181252)
Vielleicht ist sie ja für den hier genannten Zweck verwendbar.

Wenn nicht so viele globalen Variablen rumfliegen würden.
Du könntest das ja mal aufräumen - nicht zur Strafe, nur zur Übung :wink:

Klaus01 3. Sep 2012 16:03

AW: Algorithmus für eine Serialnummer
 
Hallo,

in diesem Post hat corpsman seine TSerial Komponente vorgestellt.

Grüße
Klaus

Progman 3. Sep 2012 17:43

AW: Algorithmus für eine Serialnummer
 
Zitat:

Zitat von shmia (Beitrag 1181291)
Zitat:

Zitat von Progman (Beitrag 1181252)
Vielleicht ist sie ja für den hier genannten Zweck verwendbar.

Wenn nicht so viele globalen Variablen rumfliegen würden.
Du könntest das ja mal aufräumen - nicht zur Strafe, nur zur Übung :wink:

Ich räum da gar nix auf. Das ist mein Stil der Programmierung :-D
Es steht jedem frei, der das nutzen will, es seinem Stil und Bedürfnissen anzupassen bzw. umzubauen :lol:

Oswin32 4. Sep 2012 00:15

AW: Algorithmus für eine Serialnummer
 
was ich nochmal anmerken will

es kann sein das man keine keys für dein programm brauch um es zum laufen zu bringen

die keyabfrage solltest du komplex und oft machen..

was nützt mir die beste keygenerierung wenn ich ein byte im programm ändern muss um es zum laufen zubringen
am besten dann noch ohne key..

also vermeide sowas wie if key='abc' then result:=true // authentiucated := true oder then form1.create ...

Furtbichler 4. Sep 2012 07:11

AW: Algorithmus für eine Serialnummer
 
Zitat:

Zitat von Progman (Beitrag 1181310)
Ich räum da gar nix auf. Das ist mein Stil der Programmierung

:wall:
Ein klassischer Fall von Beratungsresistenz.

Progman 4. Sep 2012 08:14

AW: Algorithmus für eine Serialnummer
 
Zitat:

Zitat von Furtbichler (Beitrag 1181386)
Zitat:

Zitat von Progman (Beitrag 1181310)
Ich räum da gar nix auf. Das ist mein Stil der Programmierung

:wall:
Ein klassischer Fall von Beratungsresistenz.

Mein lieber Furtbichler, ich programmiere seit 1985.
Seit Januar bin ich Rentner und bin nur noch als Geringfügig Beschäftigter tätig.
Und wenn jemand glaubt, alle müssten so programmieren, wie er es für richtig hält, ist mir das schnuppe 8-)
So mancher Kritiker hier sollte erstmal so viele Programme, die auch z.T. in großen Stückzahlen verkauft wurden und werden, erstellen :P

@Oswin32: Die hier geschildert Testanwendung ist nur ein TEST (Demo) :-D
Natürlich wird in meinen "richtigen" Anwendungen der Key verschlüsselt gespeichert und ab da bei jedem Programmstart eingelesen, entschlüsselt, auf Richtigkeit geprüft und das Programm normal gestartet. Die Key-Eingabe geschieht ja nur beim allerersten Start, weil noch keine verschlüsselte Datei vorhanden ist. Nur das wollte ich hier nicht auch noch alles mit rein packen. Es ging ja nur um die ERZEUGUNG von Keys.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 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