Laden...

Konzept Lizenzgenerator und -prüfer

Erstellt von RickJamesZs vor 14 Jahren Letzter Beitrag vor 14 Jahren 5.754 Views
R
RickJamesZs Themenstarter:in
5 Beiträge seit 2009
vor 14 Jahren
Konzept Lizenzgenerator und -prüfer

Hallo Zusammen,

bin vor Kurzem mit meinem Lizenzgenerator fertig geworden und wollte einfach mal nachfragen was ihr davon haltet...

Info: Der Client zieht sich ein Tool in dem er seine Daten eintragen kann und welches ein Hardwareprofil des Rechners erstellt.

(1) Schlüsselpaar mit dem Strong Name Tool (sn.exe) erstellen
(Mit dem snk File werden die LizenzPrüfer.dll und das Programm signiert)
(2) Erstellen der Lizenz.xml -
(2.1) Lizenzdatei enthält eine Signatur
(2.2) Es wird ein Hash der Assembly in das Lizenzfile eingefügt.
(2.3) Das gesamte XML wird nochmal per Rijandael verschlüsselt und erneut als XML gespeichert (sozusagen XML in der XML) und die Signatur ist nur für die innere XML gültig.
(Info) Das Lizenz.xml enthält Persönliche Daten des Clients(Name Mail usw.) und HardwareInformationen (Mainboard Serial, Computername, ProzessorID usw.) und man kann wählen, welche in die Lizenz eingefügt werden.
Somit sollte die Lizenz auch wirklich nur auf dem Clientrechner funktionieren.
Weitergeben ausgeschlossen.
(3) Prüfen der Lizenz -
(3.1) Entschlüsseln der inneren XML mit Rijandael.
(3.2) Prüfen des Assembly Hashes.
(3.3) Prüfen der Signatur der XML indem aus der Signatur der Assembly der PublicKey gezogen wird.
(3.4) Hardwarekonfiguration prüfen.
Fertig!

Hoffe ich hab nichts vergessen.

Was haltet ihr davon? Bin neu auf dem Gebiet und erhoffe mir hier ein paar Ansätze ob das so Ok ist und vielleicht wie man es (noch)besser machen kann.

Wie/Wo würde man ansetzen wenn man sowas knacken wollen würde? Habe da leider nicht wirklich eine Idee, außer versuchen die dll zu tauschen und gegen eine eigene zu ersetzen. Aber das wird doch durch den Strong Name verhindert, oder nicht?
Vielleicht kommen ja ein paar Ansätze zusammen.

Hab auch vor Kurzem einen älteren Artikel auf MSDN gelesen(Decompiler und Obfuscator).
Ist das noch so aktuell? So fern ich es richtig verstanden habe bringt mir also ein Obfuscator doch nur einen sehr geringen Vorteil, oder hat sich da schon was getan?

Danke schonmal.

MfG
Rick

L
770 Beiträge seit 2006
vor 14 Jahren

Wie/Wo würde man ansetzen wenn man sowas knacken wollen würde?

Der Client zieht sich ein Tool in dem er seine Daten eintragen kann

Mit Client meinst du den Anwender oder deine eigene Anwendung? Das Tool liegt ja dann irgendwo am Rechner und somit könnte jeder seine eigene Lizenz erstellen? D.h. ich gebe die Anwendung weiter, der führt das Tool aus und erstellt seine eigene Lizenz und somit kann man die Anwendung auch weiter verwenden.

Oder ich habe dich nicht ganz verstanden,
Lion

lg Lion

238 Beiträge seit 2007
vor 14 Jahren

Hallo Lion1984,
ich glaube viel mehr das dieses Tool nur eine Art Prüfsumme generieren soll, die dann der Client zum Programmierer schickt und der ihm anhand dieser Daten eine signierte Lizenz bastelt und zurückschickt. So würde das für mich mehr Sinn machen, kann auch sein das ich daneben liege 😃

Hallo RickJamesZs,

Wie/Wo würde man ansetzen wenn man sowas knacken wollen würde? Habe da leider nicht wirklich eine Idee, außer versuchen die dll zu tauschen und gegen eine eigene zu ersetzen. Aber das wird doch durch den Strong Name verhindert, oder nicht? Verlass dich nich zu sehr auf den Schutz durch die Signatur des StrongNameKey, diese kann mit Zahlreichen Werkzeugen relativ einfach wieder aus dem Assembly entfernt werden.
Prinzipiell ist die Lizenzierung mittels RSA (also Private- und PublicKey) eine sichere Sache, aber auch nicht unknackbar. Man könnte z.B. den öffentlichen Schlüssel in deiner Anwendung austauschen und sich danach einfach eigene Lizenzen generieren, oder man umgeht direkt die komplette Überprüfung in dem man das Assembly manipuliert.
Du solltest dir aber überlegen in wie weit du den Anwender mit der Aktivierung gängeln möchtest. Denn das wirkt auch oft eher Störend als das es Nutzt. Und was ist wenn der Anwender in 10 Jahren seine Hardware wechselt du aber nicht mehr zu erreichen bist? Dann sitzt dieser vor dem Lizenzdialog und wartet vergeblich auf seinen Aktivierungscode.
Alles dinge die man bedenken sollte 😃

Cheerio

J
1.114 Beiträge seit 2007
vor 14 Jahren

bin vor Kurzem mit meinem Lizenzgenerator fertig geworden und wollte einfach mal nachfragen was ihr davon haltet...

Ich halte von Lizenzgeneratoren allgemein rein gar nichst, und von machinengebundenen Lizenzschlüsseln noch weniger. Ich geh sogar soweit, dass wenn ich an eine machinengebundene Lizenz gezwungen bin, ich die Software gar nicht erst kaufe. Ich hab damit soviel Negativerfahrung gemacht, dass ich solchen Problemen aus dem Weg gehe. Es gibt genug Alternativsoftware, gerade im Sharewarebereich, dass ich mich sicherlich kaum gezwungen fühlen, unbedingt auf eine spezielle Applikation zu binden. Und ich hab meine Gründe: Was mach ich, wenn ich mir einen neuen Rechner zulege. Wo krieg ich einen neuen Lizenzschlüssel her, wenn es den Entwickler z.B. nicht mehr gibt. Ich weiss nicht wie professionell du deine Software vertreibst, oder ob es nur ein Hobby ist für dich. Aber wenn ich als Anwender keine neue Lizenz mehr von dir erhalten kann weil du vielleicht mittlerweilen Surflehrer auf Hawai geworden bist und die Softwareentwicklung komplett an den Nagel gehängt hast? Dann zieh ich als Anwender die A****-Karte wenn ich mir einen neuen Rechner zulege.

Was hast du von deiner Lizenz. Sie schreckt nur ab. Und wenn du wirklich eine so tolle Applikation entwickelt hast, die viele tausend User ansprechen (was ich dir ja wirklich auch wünsche), dann taucht in kurzer Zeit im Internet der erste Crack auf. Es bleibt dir also nichts anderes übrig, als auf deine ehrlichen Anwender zu setzen, die Geld für deine Anwendung ausgeben. Und dann ist es egal, ob du eine machinegebundene Lizenz hast, oder einfach z.B. nur eine Seriennummer.

Edit: DonMaxo war etwas schneller, hat aber die gleichen Grundgedanken aufgeschrieben wie ich

F
10.010 Beiträge seit 2004
vor 14 Jahren

Diese Diskusion haben wir hier so oft.

Wenn SW nicht gekauft wird, liegt es meist an der Funktionalität der SW,
nicht an fehlender Sicherheit.

Irgendwie verwenden dann einige SW Hersteller mehr Zeit in der Pflege und
implementation der Sicherheitsmassnahmen, als in die Pflege der SW
und denken dann, das die Leute mehr kaufen würden, wenn die Sicherheitsmassnahmen
nur besser würden.

Wie Jelly sagte, gibt es so viel OpenSource SW in fast jedem Bereich, das auch ich
bei SW mit einem Key oder einer Zwangsregistrierung ( oder Nagscreens ) gleich den löschen button drücke.

R
RickJamesZs Themenstarter:in
5 Beiträge seit 2009
vor 14 Jahren

Danke schonmal für das Feedback. 👍

ich glaube viel mehr das dieses Tool nur eine Art Prüfsumme generieren soll, die dann der Client zum Programmierer schickt und der ihm anhand dieser Daten eine signierte Lizenz bastelt und zurückschickt. So würde das für mich mehr Sinn machen, kann auch sein das ich daneben liege 🙂

Nein völlig richtig. Genau so ist es gedacht.

Prinzipiell ist die Lizenzierung mittels RSA (also Private- und PublicKey) eine sichere Sache, aber auch nicht unknackbar. Man könnte z.B. den öffentlichen Schlüssel in deiner Anwendung austauschen und sich danach einfach eigene Lizenzen generieren, oder man umgeht direkt die komplette Überprüfung in dem man das Assembly manipuliert.

Wie soll das funktionieren mit dem Schlüssel austauschen? StrongName entfernen ist mir bekannt, dass es da einige Tools gibt.

Diese Diskusion haben wir hier so oft.

Wenn SW nicht gekauft wird, liegt es meist an der Funktionalität der SW,
nicht an fehlender Sicherheit.

Deswegen möchte ich auch in diesem Thread gerne darauf verzichten.
Ich wollte eigentlich nur die Fragen die ich gestellt hatte beantwortet haben.
Nach dem Sinn dieser Lösung habe ich nicht gefragt bzw. bezog sich "was haltet ihr davon" eher auf meine Schilderung des Ablaufs, ob man das als sicher bezeichnen könnte.
Meine Fragst ist lediglich ob die Erstellung so einigermassen sicher ist und wie man hier von der Gegenseite aus ansetzen würde.

Vielleicht kommen ja noch ein paar Antworten.
Danke an DonMaxo, deine Antwort ist schon ein Schritt in die richtige Richtung.

238 Beiträge seit 2007
vor 14 Jahren

Wie soll das funktionieren mit dem Schlüssel austauschen? StrongName entfernen ist mir bekannt, dass es da einige Tools gibt. Nun, sofern ich mich nicht komplett täusche benötigt man ja zum Verifizieren einer Signatur den öffentlichen Teil des RSA Schlüssels. Dieser muss ja auch irgendwo in deinem Assembly als Klartext vorliegen und eben diesen könnte man umpatchen.

Cheerio

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo RickJamesZs,

man kann sich nunmal nicht aussuchen, welche Antworten man bekommt. 😃 Da wir hier kostenlos helfen, können wir uns aussuchen, wobei wir helfen und wobei nicht. Immerhin gestalten wir als Informatiker einen Teil unserer gemeinsamen Zukunft. Und ich möchte nicht an einer Zukunft mitarbeiten, bei der die Rechte der Benutzer unangemessen eingeschränkt werden. Und ich würde mir wünschen, dass du das auch nicht tust. Hardware-Verdongleung ist eine solche unangemessene Einschränkung. Inbesondere im Firmenumfeld würde ich als Entscheider nie hardware-verdonglelte Software einsetzen, weil dann selbst das Vorhalten identischer Hardware nicht mehr gegen Ausfälle schützt, weil das Programm auf der Backup-Hardware Aufgrund anderer IDs ja nicht läuft. Was du vorhast mag nach momentaner Rechtslage legal sein, legitim ist es in meinen Augen nicht.

herbivore

R
RickJamesZs Themenstarter:in
5 Beiträge seit 2009
vor 14 Jahren

man kann sich nunmal nicht aussuchen, welche Antworten man bekommt. 😃 Da wir hier kostenlos helfen, können wir uns aussuchen, wobei wir helfen und wobei nicht. .... Was du vorhast mag nach momentaner Rechtslage legal sein, legitim ist es in meinen Augen nicht.

Ja das ist schon klar. Es soll einfach nur die Möglichkeit bestehen Hardwareinformationen zu integrieren.
Die Person die die Lizenz ausstellt kann frei entscheiden, ob er irgendwelche Hardwareabfragen integrieren will oder nicht.

Letztenendes wird das so auch eher weniger irgendwelche Enduser erreichen, da ich meine Bachelorarbeit über das Thema schreibe und das Programm ein Teil davon ist 😉
Vielleicht hätte ich das dazu schreiben sollen...

Gibt es irgendwo im Netz noch gute Quellen zu der Thematik?

3.825 Beiträge seit 2006
vor 14 Jahren

Hallo Leute,

ich muss mal wieder meine Meinung zu dem Thema sagen :

Leider habe ich mit der Ehrlichkeit der Leute schlechte Erfahrung gemacht : Ein "PC-Fachhändler" hat meine Software geknackt und an viele Firmen verkauft, zu jeweils 5-stelligen Beträgen.

Betrogen wurden auch die Kunden, die nach Bezahlung den Fachhändler nicht mehr erreichen konnten, der war nämlich verschwunden. So gab es keinen Support und keine Gewährleistung.

Ein guter Lizenzschutz hätte das vermeiden können.

In einer Sache sind wir uns aber einig : Der Lizenzschutz soll den ehrlichen Anwender nicht stören.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

F
10.010 Beiträge seit 2004
vor 14 Jahren
49.485 Beiträge seit 2005
vor 14 Jahren

Hallo RickJamesZs,

gerade wenn du eine Bachelorarbeit schreibst, solltest du dich in der Arbeit auch mit den nicht technischen Aspekten von automatisierten Lizenzprüfungen beschäftigen. Das gehört m.E. dazu und ist speziell bei diesem Thema vielleicht sogar wichtiger als die technische Seite.

Hallo BerndFfm,

Ein "PC-Fachhändler" hat meine Software geknackt ... Ein guter Lizenzschutz hätte das vermeiden können.

wenn der Schutz aufwändiger gewesen wäre, hätte das ja erstmal nur den Aufwand für das Knacken erhöht. Es ist nicht gesagt, dass das Knacken dadurch verhindert worden wäre.

herbivore

3.825 Beiträge seit 2006
vor 14 Jahren

Guten Morgen,

wenn der Schutz aufwändiger gewesen wäre, hätte das ja erstmal nur den Aufwand für das Knacken erhöht. Es ist nicht gesagt, dass das Knacken dadurch verhindert worden wäre.

Sicher. So klug war der nicht. Aber es ist richtig dass jeder Kopierschutz das Raubkopieren nur erschwert, aber nicht unmöglich macht.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

3.971 Beiträge seit 2006
vor 14 Jahren

Hallo RickJamesZs,
schmeiß die Verschlüsselung weg, die bringt dir rein garnix, da du den Schlüssel/Passwort eh als Ressource in deinem Programm einbinden musst.

Was du allerdings machen kannst, erstell von deinen Lizensinformationen einen Hash (SHA512 beispielsweise) und signiere diese deinem privaten Schlüssel.

Beim Lesen der Lizensdatei erstellst du wiederum den Hash deiner Lizensinformationen und vergleichst diesen mit dem Hash-Code in der Lizensdatei (natürlich muss der Hash vorher mit dem öffentlichen Schlüssel entschlüsselt werden (VerifyData)).

So kannst du sicher sein, das niemand außer dir eine Lizensdatei erstellen oder nachträglich bearbeiten kann.

Allerdings schützt dich das auch nicht vor geänderten Programmdateien. Dies kannst du nur mit einer entsprechende Aktivierung bewerkstelligen, wo die Hashes deiner Programmfiles mit deinen auf dem Server verglichen werden. Aber auch hier lässt sich als Hacker wiederum ansetzen...

Persönlich finde ich, eine Eingabe der gekauften Seriennummer/Lizensdatei und eine anschließende für den User transparente Aktivierung tut keinem weh.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

R
RickJamesZs Themenstarter:in
5 Beiträge seit 2009
vor 14 Jahren

...solltest du dich in der Arbeit auch mit den nicht technischen Aspekten von automatisierten Lizenzprüfungen beschäftigen....

Ja sowieso, ich hab schon einiges dazu drin.

....schmeiß die Verschlüsselung weg, die bringt dir rein garnix, da du den Schlüssel/Passwort eh als Ressource in deinem Programm einbinden musst.

Also die symmetrische Verschlüsselung ist hier auch nicht der Knackpunkt. Sie dient nur dazu, dass der Inhalt der Lizenz XML nicht sofort offen liegt.
Der Punkt ist die Signatur die durch den PublicKey aus der Assembly verifiziert wird. Sie wird mit dem SNK File erstellt.
Soweit ich weiß bekommt den PublicKey nicht ohne weiteres aus der signierten Assembly (soweit ich das gelesen und ausprobiert hab - kann auch sein das ich da falsch liege).
Ich nutze da einige Rechenoperationen um einen gültigen PublicKey wiederherzustellen damit ich meine Signatur verifizieren kann.
Falls das wirklich einfacher gehen sollte, ist das natürlich sehr schlecht 😉

238 Beiträge seit 2007
vor 14 Jahren

Hallo,

Also die symmetrische Verschlüsselung ist hier auch nicht der Knackpunkt. Sie dient nur dazu, dass der Inhalt der Lizenz XML nicht sofort offen liegt. Wäre es nicht sogar besser die Xml Datei nicht zu verschlüsseln? Gehen wir mal davon aus, dass du diese z.B. nicht an die Hardware dongelst ist da doch die Hemmschwelle höher die Datei zu verteilen, wenn in dieser persönliche Informationen (Name, Anschrift, o.ä.) im Klartext enthalten sind. Nur so als zusätzlichen Gedankengang 😃

Cheerio

6.911 Beiträge seit 2009
vor 14 Jahren

Hallo,

zur Erklärung:

Dieses Konzept ist angelehnt an einen Artikel (den ich gerade nicht finde) und darin geht es darum Client-Informationen in einer digital signierten XML zu speichern.

Die Signatur der XML wird beim Programmstart geprüft um somit festzustellen ob die XML manipuliert worden ist oder nicht. In Folge werden die in der XML gespeicherten Client-Infos mit den tatsächlich vorliegenden Client-Infos verglichen.

Somit steht die ganze Info im Klartext in der XML. Zusätzliche Verschlüsseleung bringt rein gar nichts denn eine Manipulation des Inhalts wird durch die Signaturprüfung erkannt.

Egal wie man zum Thema steht finde ich dieses Verfahren sehr sicher.
Die Umsetzung in .net brignt natürlich die Möglcihkeit mit sich die Prüfung relativ leicht auszuhebeln. Darum der Ansatz dieses Konzepts.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

199 Beiträge seit 2006
vor 14 Jahren

Man muss auch noch den Aspekt der Performance beachten. Eine zu heftige Verschlüsselung frisst wieder Performance. Der ideale Mittelweg ist entscheidend, was auch wieder auf den Einsatz der Software ankommt.

Ich habe kürzlich ebenfalls eine Lizenzierung eingebaut. Urspünglich hatte ich auch die Idee mit dem StrongName, aber das kam mir alles zu wacklig vor. Ausserdem muss man dann wieder alle Assemblies signieren, was zu viel Aufwand gewesen wäre und von der Performance nicht mehr tragbar gewesen wäre.
Ich habe letztendlich eine einfache asynchrone Verschlüsselung verwendet. Im XML-File stehen in Plaintext die Lizenzdaten (Lizenznehmer, Email, lizenzierte Module usw) und zusätzlich auch noch eine Signatur, die aus den Lizenzdaten erstellt wird.
In der Anwendung hängt der public key bidirektional verschlüsselt als Resource drin und wird nur herangezogen, um die Signatur des Lizenzfiles auf Gültigkeit zu prüfen.

Nachwievor gibt es aber auch hier das Problem, dass man ohne Probleme die Lizenzierung aushebeln kann, in dem man mit einem Resource-Hacker den PublicKey ändert oder sogar mit Reflection die gesamte Assembly nachbaut. Bei .NET ist das leider relativ leicht möglich.

Generell war mein Gedankengang dann, dass man einfach das nachvollziehen der Lizenzierung möglichst kompliziert gestalten muss, um einfach den Aufwand des Hackens zu erhöhen. Eine absolute Sicherheit kann man eigentlich gar nicht gewährleisten.

6.911 Beiträge seit 2009
vor 14 Jahren

Der einfachste und womöglich beste Schutzt ist die Urheberrechtsinfo und die Lizenzinfo (zB Name des Kunden) an prominenter Stelle im Programm anzuzeigen (oder zB auf generierten Berichten zu drucken).

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

199 Beiträge seit 2006
vor 14 Jahren

Der einfachste und womöglich beste Schutzt ist die Urheberrechtsinfo und die Lizenzinfo (zB Name des Kunden) an prominenter Stelle im Programm anzuzeigen (oder zB auf generierten Berichten zu drucken).

mfG Gü

Stimmt, das ist auch noch drin 😃

R
RickJamesZs Themenstarter:in
5 Beiträge seit 2009
vor 14 Jahren

Danke soweit für die Antworten.

@Mossi
Also Performance mach ich mir eigentlich keine Sorgen, da die Validierung schon sehr schnell von statten geht.

@gfoidl
Das mit dem Namen ist eine gute Idee. Mein Testprogramm was Lizensiert wird, zeigt beim Start auch den Lizenznehmer mit Email an. Hab auch in der Arbeit das kurz erwähnt, dass sowas eine abschreckende Wirkung haben kann.

Hat jemand eine Ahnung wo man noch ein paar gute Artikel zu der Thematik finden könnte?
Speziell suche ich zur Zeit noch was zum aktuellen Stand der Technik. Sofern sowas zu finden ist...
Hab schon mehrfach Google bemüht, aber leider ohne großen Erfolg.

6.911 Beiträge seit 2009
vor 14 Jahren

Mein Testprogramm was Lizensiert wird, zeigt beim Start auch den Lizenznehmer mit Email an.

Das würde mich jedoch noch nicht abschrecken.

Stell dir ein Software vor die (Geschäfts-) Rechnungen erstellt. Wenn auf jeder Rechnung in der Fusszeile der Lizenznehmer steht wird sich wohl kaum einer der Fa. X trauen die Rechnung auszuhändigen wenn in der Fusszeile steht: "Lizenziert für Fa. Y". Das würde die Fa. X unseriös machen.

Das soll allerdings nur ein Denkanstoss sein wo es möglich ist/wäre diese Info anzuzeigen.

Ich kann mich auch errinner dass früher bei Studentenversionen von Software diese Info über den Lizenzstatus omnipräsent war. Somit war es gar nicht möglich eine Software seriös weiterzugeben.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"