Seriennummerngenerator (nicht illegal, andersrum)

jccTeq

Erfahrenes Mitglied
Hallo,

wir müssen für die Software die wir entwickeln ein Verfahren für Seriennummern/CDKeys finden, welches die Möglichkeit bietet, abhängig vom eigenen Code bestimmte Projekte freizuschalten.

Unsere Software besteht aus vielen einzelnen Projekten. Der Kunde kauft die Basis Software und ein individuell zusammengestelltes Paket aus Projekten. Es werden jedoch grundsätzlich alle Projekte mitgeliefert, was der Kunde nicht weiß, nicht wissen muss und was ihn auch nicht interessiert. Der Kunde erhält zu dem Paket eine Seriennummer/einen CDKey, welcher die vom Kunden gekauften Projekte geschlüsselt enthalten soll. Diese Seriennummer soll sich in ihrem Format nicht ändern. Was sich jedoch ändert, das ist die Anzahl Projekte, die dem Kunden insgesamt zur Verfügung stehen. Der eingegebene Key selektiert im Laufe der Installation die für den Kunden in seiner erworbenen Lizenz zur Verfügung stehenden Projekte und schaltet sie ihm frei.

Wie kann man sowas machen? Wie kann man in einem in seiner Form statischen CD Key eine beliebige Auswahl Projekte aus einem variablen Gesamt-Kontingent schlüsseln?
 
Also eine Möglichkeit wäre folgende:
Jedes Produkt hat einen eindeutigen Bezeichner, z.B. Produkt-ab23 womit ihr erkennen könnt was es ist.
Dieser Produktbezeichner wird dann Verschlüsselt und daraus wird dann ein Key erzeugt.
Verschlüsselungsverfahren gibt es viele (das einfachste wäre eine XOR Operation).
Innerhalb eures Programmcodes müsst ihr dann den Schlüssel abfragen:
Code:
if(GetKey("Produkt-ab23")==true)
{
  //  alles OK
}
else
{
  // kein gültiger Key
}
Idealerweise solltet ihr keine if's oder sonstige Kontrollstrukturen verwenden (oder davon möglichst viele) damit man die Key-Abfrage nicht "cracken" kann.

Desweiteren könnt ihr Versionsnummern in dem Key unterbringen, somit könnte man einen neuen Key benötigen, bzw. der Kunde ist dann nur bedingt updateberechtigt.

Auch eine Sicherheitseinrichtung wäre der Schutz über eine Rechnerabhänige Hardwareid (meist MAC-Adresse, Festplatten-ID oder Dongle)

Gruß Homer
 
Abgesehen davon dass es ne ziemlich blöde idee is alle Packete mitzugeben, versteckt einfach ne Regel im Key:
Wenn packet 1 eingekauft is, muss der ASCIICODE von Zeichen 14 und 12 gerade sein :)
Oder durch xyz ohne rest teilbar sein u

und am ende habt ihr im Key noch ne Checksumme so dass ihr für jedes gerade ne 1 gebt und für ungerade 0 und wenn die richtige Anzahl packete nich übereinstimmt, mit dem was im key als chekcsumme drinnen steht, hat sich jemand damit gespielt.
 
Danke Daniel! So sieht die Praxis nämlich aus. Der Kunde weiß auch, daß er alle Pakete hat, aber er wird sich hüten, alle einzusetzen, weil er auch nach dem Kauf noch eng mit uns zusammen arbeitet, und wir wissen, welche Pakete er erworben hat und welche nicht. Und wenn er dann auf einmal mit Fragen zu einem Paket kommt, das er gar nicht erworben hat... naja... ist bisher noch nicht passiert.

Es wäre viel zu aufwändig, für jeden Kunden ein individuelles Paket zu schnüren, obwohl dies durchaus möglich wäre. Aber den Aufwand lohnt es eben nicht.

Darum brauchen wir eben jenen Serien-Nummern-Algorithmus, welcher eben je nach Inhalt der Seriennummer bestimmte Pakete freischaltet. Das ganze muss folgende Punkte abdecken:

- Anzahl ausgelieferte Pakete ist variabel (zukünftige Distros enthalten evtl. mehr Pakete)
- Nummern-Format muss gleich bleiben (z.B. xxx-xxxx-xxxx-xxxx-x oder sowas)
- Der Kunde darf nicht durch rumprobieren andere Pakete freischalten können (optional)


Wenn diese drei Punkte in einem Algorithmus mit dem Feature der individuellen Paketfreischaltung zusammen gepackt werden können, dann haben wir, was wir brauchen.
 
Bei einem allgemeinen Algorithmus wird der Kunde durch "Rumspielen" andere Pakete freischalten können. Das ist ja das Problem der Seriennummer-Generierung.

Hier stellt sich die Frage - und da weiß ich nicht wieviele Kunden ihr habt - ob ihr vielleicht nicht mit Dongle arbeiten solltet. Denn Seriennummern kann man berechnen, sobald man die Stelle im Code gefunden hat, die dafür zuständig ist. Verstecken (zum Beispiel durch viele viele If-Verzweigungen) fast unmöglich. Ein guter Cracker wird die Stelle finden.
 
Also unsere Software IST teuer, aber es wird sicher niemanden geben, der da versucht, die Installation zu cracken. Unsere Software wird quasi industriell eingesetzt. Genauer gesagt, zum Last simulieren auf Amts-TK-Anlagen bei Teletaub und Konsorten. Es wird sicher niemand auf die Idee kommen, einfach mal ein paar Nummern zu ändern. Und wenn doch, dann muss der Algorithmus zumindest so intelligent sein, daß der Kunde nicht gleich nach zwei, drei Versuchen erfolgreich ist.
 
Hm hab dir doch eh ne Möglichkeit gesagt? Passt die oder willst enoch mehr ideen?
Öhm Lastsimulation für ne TK-Analge lustige Vorstellung ^^

Und ja öhm wieviel kostet den so ein Gesamtpacket? (Dongels sind kacke!)
 
Hi!

Ergänze den verwendeten Zahlenraum doch einfach um das Alphabet. Dann wird das mit dem Herumspielen schon schwieriger, weil sich niemand etwas unter B*C-13 vorstellen kann... Wenn du dann noch nicht mit A=1 (oder 65) und B=2 (oder 66) etc. arbeitest, sondern dort bunt mischst, wird die Sache schon unübersichtlicher.

Und da du nach eigenen Angaben keine Angst haben brauchst, dass deine Software gecrackt wird (sie ist ja scheinbar nicht für den Alltagseinsatz jedes Script-Kiddies), sehe ich auch keinen Sinn darin, soetwas großartig zu verstecken. Ein bisschen Vertrauen muss man in die Menschheit schon haben, oder?

Mamphil
 

Neue Beiträge

Zurück