Laden...

Sicherheit durch Lizenzvergabe für Software

Erstellt von baer999 vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.845 Views
B
baer999 Themenstarter:in
375 Beiträge seit 2007
vor 13 Jahren
Sicherheit durch Lizenzvergabe für Software

Ich bin gerade dran eine Software in die Betaphase zu schicken.
Da ich sie danach als Lizenzmodell vermarkten will, muss ich sie ausreichend vor Manipulation und
Unsachgemäßer Nutzung schützen.

Hierbei wäre ich für Vorschläge sehr dankbar.

Grundsätze:

  1. Die Lizenz darf nur von einem Rechner verwendet werden (MAC Adresse)
  2. Die Dauer der Lizenz ist begrenzt (Enddatum)
  3. Der Algorithmus soll möglichst schwer einsehbar sein (auf Grund von Reflection evtl. WebServices?)
  4. Freischaltung soll mit einer Serial o.ä. geschehen (evtl. auch eine Key-Datei mit den Infos?)

a. Was haltet ihr von Webservices bzw. würdet ihr eher zu integriertem Code in der EXE raten?
b. Welche Verschlüsselung ist schwer zu knacken?
c. Welche Art von Freischaltung würdet ihr bevorzugen?
d. Welche Parameter sollten zu Rate gezogen werden? (MAC, Windows-Username, etc.??)

thx

2.891 Beiträge seit 2004
vor 13 Jahren
  1. Der Algorithmus soll möglichst schwer einsehbar sein (auf Grund von Reflection evtl. WebServices?)

Welcher Algorithmus?

  1. [...] (evtl. auch eine Key-Datei mit den Infos?)
    a. Was haltet ihr von Webservices bzw. würdet ihr eher zu integriertem Code in der EXE raten?
    b. Welche Verschlüsselung ist schwer zu knacken?

Wir haben es stellenweise so gemacht: Assembly signieren, eine XML-Lizenzdatei erstellen und die mit dem gleichen Schlüssel signieren. Die XML kannst du dann einfach mit dem PublicKey der Assembly verifizieren lassen. Da der Schlüssel asymmetrisch ist, brauchst du auch nicht viel verschleiern (außer vll. die Aufrufe des Lizenzmangers - dafür gibt's Obfuskatoren).

Die Lizenz darf nur von einem Rechner verwendet werden (MAC Adresse)[...]
4.d. Welche Parameter sollten zu Rate gezogen werden? (MAC, Windows-Username, etc.??)

Wir benutzen in einigen Lizensierungsmechanismen (nur) die Domänen-SID (WindowsIdentity.GetCurrent().User.AccountDomainSid). Kommt aber auf die Art der Software an.

Worauf es bei den ganzen Überlegungen ankommt: Wovor genau willst du dich/die Anwendung schützen? Bzw. welche Benutzergruppe soll abgehalten werden?

Gruß,
dN!3L

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo baer999,

siehe Software mit Registrierungsschlüssel schützen

Was mir besonders wichtig ist:

vorneweg: von dem Gedanken von (ständigen) Online-Prüfungen solltest du dich dringend verabschieden. Das stellt eine unangemessene Benachteiligung deiner Kunden da. Gerade wenn du nur eine kleine Firma hast oder sogar als Einzelunternehmer auftrittst, würden die Kunden bei Geschäftsaufgabe, Insolvenz o.ä. das bezahlte Programm nicht mehr nutzen können. Mal ganz abgesehen von den Regressansprüchen, die auf dich zukommen, wenn der Lizenz-Server mal nicht verfügbar ist.

Das gleiche gilt für Hardware-Verdongelung (MAC-Adresse).

Verfalle ohnehin nicht in Paranoia. Leute, die sich den Sourcecode einfach mal angucken wollen, sind keine Gefahr. Uns selbst von denen wird es weit weniger geben, als du vielleicht denkst. Und wenn sich anderseits deine Konkurrenz oder ein engagierter Cracker ernsthaft an die Analyse deiner Software machen, kannst du nicht mehr als ihren Aufwand erhöhen, sie aber sowieso nicht davon abhalten.

herbivore

B
baer999 Themenstarter:in
375 Beiträge seit 2007
vor 13 Jahren

Also in der Branche, in welcher ich die Software vertreibe ist Raubkopieren und illegale Weitergabe leider sehr sehr wahrscheinlich, insofern muss ich mich und die Firma, welche meine Software vertreibt schützen vor großen Umsatzeinbußen : )

Meine Idee:

  1. eine XML Datei mit der MAC Adresse und einem Enddatum für die Lizenz. Die MAC Adresse würde im Software-Lizenzvertrag als einzige Hardware mit Nutzungsrechten per Handschrift vereinbart werden. Natürlich mit der Möglichkeit des Wechsels des PCs, also eine neue XML Datei mit anderer MAC Adresse.
  2. Diese Datei wird mit einem öffentlichen Schlüssel verschlüsselt und dem KUnden zugeschickt.
  3. Dieser muss in regelmäßigen Zyklen seine Authentizität bestätigen indem er die Datei bei Programmstart automatisiert an unseren Server schickt, bspw. per WebService. Wir entschlüsseln mit dem privaten Schlüssel entschlüsselt. Zusätzlich wird im Webservice ein Parameter mit der PC-MAC Adresse mitübermittelt

>>> private bool CheckLicense (File XMLFile, MACAdress MAC)

Bei Serverausfällen gibt es eine Kulanz von 10 Tagen in denen die Lizenz weiterläuft, somit haben die Kunden kaum Regressanspruchsmöglichkeiten, da innerhalb von 10 Tagen jeder Server gefixt sein sollte.

Die Funktion CheckLicense gibt true zurück bei korrekter Lizenz oder false bei keiner gültigen Lizenz. Damit kann man dann leicht das Programm öffnen oder sperren.

Was haltet ihr davon, welche Probleme könnte es geben? thx

2.891 Beiträge seit 2004
vor 13 Jahren

[...]welche Probleme könnte es geben?[...]
Die Funktion CheckLicense gibt true zurück bei korrekter Lizenz oder false bei keiner gültigen Lizenz.

Ich ersetze in deiner Assembly alle CheckLicense-Calls, sodass immer true zurück gegeben wird. Falls deine Assembly digital signiert ist, schalte ich natürlich noch die entsprechende CAS-Policy aus.
Oder ich leite die Anfrage auf deinen Server auf meinen um, der immer true zurück gibt.
Vorher stelle ich natürlich die Systemzeit um, damit die Lizenz nicht merkt, dass sie abgelaufen ist bzw. damit es nicht zu den "regelmäßigen Zyklen" kommt.

Gruß,
dN!3L

699 Beiträge seit 2007
vor 13 Jahren

Bei Serverausfällen gibt es eine Kulanz von 10 Tagen in denen die Lizenz weiterläuft, somit haben die Kunden kaum Regressanspruchsmöglichkeiten, da innerhalb von 10 Tagen jeder Server gefixt sein sollte.

Will ja jetzt nicht den schwarzen Peter an die Wand malen. Aber gehe mal davon aus, was eventuell passieren kann, wenn besagter Kunde den Server trotzdem nicht erreichen kann, da es ja durchaus auch passieren kann/könnte, das der Server zwar einwandfrei läuft, aber durch dumme umstände das Internet bei besagtem Kunde nicht geht.

Man darf ja nicht zwangsläufig davon ausgehen, das immer jedes Unternehmen eine Internet Verbindung hat, aber der Betrieb weiter gehen muss.

Genauso verhält sich das mit privaten Kunden. Wer sagt Dir, das besagter Rechner, welcher die Software betreiben soll, auch zugriff auf das Internet hat.
Es gibt durchaus leute, die 2 Rechner bei sich stehen haben. 1 Internet Rechner und einen für den Rest, wo keinen zugriff auf das Internet hat.
Was willst Du dann machen?

Ich denke, wie herbivore auch, das es besser ist, von solchen zwängen abstand zu nehmen. Zumindest wollte ich selbst dies auch nicht haben, das mich eine Software am Samstag morgen, nachdem ich meine Netzwerkkarte tauschen musste ( defekt ) auffordert einen neuen Key zu beantragen.... etc....

Grüße Stephan

2.891 Beiträge seit 2004
vor 13 Jahren

Man darf ja nicht zwangsläufig davon ausgehen, das immer jedes Unternehmen eine Internet Verbindung hat,[...]

Weil z.B. ein trotteliger Bauarbeiter die Telefonleitung durchhackt - wie bei uns schon mal geschehen...

Guck dir z.B. mal rhino-licensing an. Da hast du mal ein Beispiel für die Signierung von XML-Lizenzdateien, Prüfung des Ablaufs anhand Timeserver im Internet, automatische Beantragung neuer Lizenzen vor Ablauf der alten, uvm.

Gruß,
dN!3L

Gelöschter Account
vor 13 Jahren

Ich ersetze in deiner Assembly alle CheckLicense-Calls, sodass immer true zurück gegeben wird.

viel zu aufwendig. ich würde in die erste zeile der methode einfach "return true" injizieren. -> fertig. oder was acuh lustig ist, den prozess in seine eigene appdomain laden und den checkmethoden eigene instanzen von check-klassen unterjubeln 😄

also nun im ernst. wenn betrügen sehr wahrscheinlich ist in deiner branche (... vermutlich die dunkle seite der programmiererbranche 😉 ), dann hast du eh keine chance.

das einzige was einigermaßen wirksam schützt ist ein webservice in dem die zu schützenden codeteile liegen und daher die ständige verbindung zum service bestehen muss. (ja... der ubisoft-kopierschutz ist wirksam). es gibt zwar die möglichkeit diesen service zu emulieren, allerdings muss man dafür den ausgelagerten code reimplementieren und wenn das relativ viel code ist oder besonders kompliziert, ist der aufwand meist extremst hoch. das ganz am besten noch über verschlüsselte kanäle und schon sind 90% aller cracker überfordert.

allerdings musst du dann diesen service immer und zur jederzeit verfügbar halten und btw... das ist alles andere als kundenfreundlich. ich habe mir z.b. trotz großem interesse kein neues ubisoft spiel gekauft....

265 Beiträge seit 2006
vor 13 Jahren

(ja... der ubisoft-kopierschutz ist wirksam)

naja, mittlerweile gibt es Cracks (wobei ich nicht weiß, ob die wirklich 100%-ig funktionieren) und die ehrlichen Käufer müssen selbst für den Singleplayer ständig online sein (praktisch, wenn man mit dem Notebook unterwegs ist), wobei hingegen der Cracker zumindest den Singeplayer immer spielen kann. Ich denke das schreckt eher Kunden ab, als dass es Ubisoft hilft.

ich habe mir z.b. trotz großem interesse kein neues ubisoft spiel gekauft

ich auch nicht

-=MasterMax=-

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo baer999,

Was haltet ihr davon, welche Probleme könnte es geben? thx

um das gleich vorweg zu nehmen. Ich halte überhaupt nichts davon und Probleme kann und wird es massenhaft geben (dazu gleich mehr). Mal ganz abgesehen von den Umsatzeinbußen, die es durch den Kopierschutz geben wird, denn ich würde weder als Privatmensch noch als verantwortlicher in einer Firma eine solchermaßen geschützte Software einsetzen und damit natürlich gar nicht erst kaufen. Und jeder vernünftig denkende Entscheider wird genauso handeln.

Also in der Branche, in welcher ich die Software vertreibe ist Raubkopieren und illegale Weitergabe leider sehr sehr wahrscheinlich

Kannst du das belegen oder ist das mehr ein Gefühl? Und was bedeutet "sehr, sehr wahrscheinlich"?

  1. eine XML Datei mit der MAC Adresse und einem Enddatum für die Lizenz.

Wie schon gesagt, stellte eine Hardware-Verdongelung eine unangemessene Benachteiligung deiner Kunden da. Sie vereitelt die Vorsorgestrategien des Kunden. Selbst wenn dieser eine baugleiche Maschine als Hardware-Backup vorhält, würde die Software nicht darauf laufen.

Natürlich mit der Möglichkeit des Wechsels des PCs, also eine neue XML Datei mit anderer MAC Adresse.

Diese Möglichkeit besteht aber nur, solange eure Firma existiert. Außerdem kann ich mir selbst dann nicht vorstellen, dass ihr uneingeschränkt neue Lizenzen liefern würdet. Das würde ja dem Sinn des Schutzes entgegenlaufen. Der Kunde, der das Programm immer gerade auf dem Rechner installieren will, dessen Sachbearbeiter damit arbeiten muss, wird vermutlich spätestens nach der dritten Lizenz innerhalb eines Vierteljahres im Regen stehen. Er müsste sich dann die neue Lizenz erst gerichtlich erstreiten. Bei mehrfachem Hardwareausfall oder -wechsel das gleiche Bild. Ihr müsste nicht mehr dem Kunden eine illegale Nutzung nachweisen, sondern er euch eine korrekte. Das mag verlockend sein, ist aber verkehre Welt. Mal ganz abgesehen, von den Regresskosten für den (langen) Nutzungsausfall während der Prozessdauer, die der Kunde gelten macht, wenn er den Prozess gewinnt.

  1. Dieser muss in regelmäßigen Zyklen seine Authentizität bestätigen indem er die Datei bei Programmstart automatisiert an unseren Server schickt, bspw. per WebService.

Hardware-Verdongelung plus regelmäßige online Prüfung ... du scheinst, nur deine Interessen im Kopf zu haben und einen Interessensausgleich zwischen dir und dem Kunden völlig aus dem Blick verloren zu haben. Es wurden in diesem Thread schon mehrere ernsthafte Probleme der Online-Prüfung genannt. Wenn man sich dann noch vergegenwärtigt, dass ein Cracker - wie JAck30lena ausgeführt hat - nur ein return true in die Check-Methode injizieren muss, um das ganze aufwändige, den Kunden einschränkende und benachteiligende Modell auszuhebeln, sollte spätestens klar sein, dass du mit einem kooperativen Modell besser fahren würdest. Wenn die zahlenden Kunden mit zahlreichen Nachteilen belegt sind, während Nutzer einer gecrackte Version vollkommen davon befreit sind, wundert es mich nicht, wenn du keine zahlenden Kunden bekommst.

Bei Serverausfällen gibt es eine Kulanz von 10 Tagen in denen die Lizenz weiterläuft,

Hübsch formuliert. Ändert aber nichts daran, dass hier der Kunde kulant euch gegenüber sein müsste, wenn er sich auf sowas einlässt. Bis zu 10 Tage mit der bezahlten Software nicht arbeiten können ist wirklich eine Zumutung.

Vergiss nicht, es sind unsere Entscheidungen als Software-Entwickler, die die Welt verändern. Ja, die Welt ist manchmal ungerecht. Und es ist auch wirklich nicht fair, wenn sich Leute durch Raubkopien Leistungen erschleichen. Aber das gibt einem noch lange nicht das Recht, ungerecht gegenüber den eigenen, zahlenden Kunden zu werden.

Mein Vorschlag in dem anderen Thread ist letztlich genauso wirksam, nur dass keiner in die Versuchung kommt, die Software alleine wegen der Nachteile, die der Schutz mit sich bringt (und gar nicht wegen des Preises), zu cracken.

herbivore

J
1.114 Beiträge seit 2007
vor 13 Jahren

Fullack, Herbivore. Besser kann man's nicht formulieren. 👍

Gelöschter Account
vor 13 Jahren

naja, mittlerweile gibt es Cracks

hehehe... ja es gibt immer einen weg und wenn jemand sowas will, dann ist er nciht davon abzuhalten.