Software-Lizenzierung für eine NET-Anwendung die minimalen Schutz bietet?
-
Dass jedes System umgangen werden kann steht nicht zur Debatte. In der .NET-Welt ist es aber zu einfach eine Lizenzprüfung zu umgehen.
Irgendwo im Code, i.d.r. am Anfang der main, steht eine Abfrage ob das Keyfile gültig ist. Jetzt ist es keine ernsthafte Hürde, die Assembly zu dekompilieren und abzuändern (z.b. mit Reflexil), s.d. die Prüfung einfach umgangen wird. Nunja früher war es ja auch oft einfach No-CD-Cracks für Spiele zu erstellen mit einem Dissasembler und Hexeditor. Aber NET setzt dem nochmal die Krone auf ... das ganze Lizenzsystem ist wertlos.
Obfuscator helfen zu wenig. Der kritische Code ist schnell zu finden, auch mit kryptischen Bezeichnernamen.
Den Code zur Prüfung der Lizenz könnte im Installer (msi) untergebracht und bei der Installation ausgeführt werden. Da die msi keine simple Assembly ist, greifen NET-Decompiler schonmal nicht. Problem ist damit, dass nur einmal bei der Installation der Key geprüft wird und die Software danach beliebig kopiert werden könnte. Effektiv also garkein Schutz.
Ich bin etwas ratlos, wie man wenigstens minimalen Lizenzschutz realisiert bei NET-Anwendungen.
Das gleiche Problem übrigens auch bei USB-Dongeln, die wir mit manchen Programmen vertreiben. Im Grunde nur Augenwischerei.Was tun bzw wie macht ihr es?
Grüße
-
Kritische Berechnungen auslagern, die soll der Server im Internet machen.
Wenns echt lokal sein muss, dann tut die Lizenzprobe nicht mit if nur feststellen, OB das Programm geht, sondern schreibt ohne jedes if tausende von Variablen voll. Und wer geschummelt hat, bekommt eben 95% Mehrwertsteuer und so nen Kack.
-
volkard schrieb:
Kritische Berechnungen auslagern, die soll der Server im Internet machen.
Es muss wahrscheinlich lokal sein. Aber selbst die Serverlösung ändert doch nichts, dass die Lizenzabfrage ausgehebelt werden kann. Oder meinst Du allgemein "wertvolle" Berechnungen der Software auslagern? Das wird nicht gehen.
volkard schrieb:
Wenns echt lokal sein muss, dann tut die Lizenzprobe nicht mit if nur feststellen, OB das Programm geht, sondern schreibt ohne jedes if tausende von Variablen voll. Und wer geschummelt hat, bekommt eben 95% Mehrwertsteuer und so nen Kack.
Ich weiß nicht genau was Du damit meinst. Wenn man an einer Stelle der Software die Prüfung umgehen kann, dann auch an beliebig vielen evtl sogar per Volltextsuche.
Kannst Du das verdeutlichen?
-
Vllt. wäre .NET Encryptor dann etwas für euch?!
-
Doge schrieb:
volkard schrieb:
Wenns echt lokal sein muss, dann tut die Lizenzprobe nicht mit if nur feststellen, OB das Programm geht, sondern schreibt ohne jedes if tausende von Variablen voll. Und wer geschummelt hat, bekommt eben 95% Mehrwertsteuer und so nen Kack.
Ich weiß nicht genau was Du damit meinst. Wenn man an einer Stelle der Software die Prüfung umgehen kann, dann auch an beliebig vielen evtl sogar per Volltextsuche.
Kannst Du das verdeutlichen?Keine "Prüfung", kein if! Aus dem eingegebenen Lizenzcode wird was berechnet. Zum Beispiel
a[0]=code; //zwischen -2 und 2 for i=1 to 999 a[i]=a[i-1]*a[i-1]-2;
und statt mwst wird Math.floor(a[563]*100)/100 genommen.
Meine Formel ist fehlerverstärkend und chaotisch. Klar kann der Benutzer den Fehler mit der Mehrwertsteuer rausfinden und reparieren. Aber Du hast ja a[] an tausenden von Stellen im Programm benutzt, da isses für ihn billiger, es neu zu schreiben oder einfach zu kaufen.
-
Ich weiß nicht genau was Du damit meinst. Wenn man an einer Stelle der Software die Prüfung umgehen kann, dann auch an beliebig vielen evtl sogar per Volltextsuche.
Du meintest doch das das Problem ist dass mein .Net leicht viel leichter und besser dekompilieren kann als Assembly ?
Klar wenn man lediglich ne simple If-Abfrage hat die prüft ob der Key gültig ist ist das total easy zu knacken, ist es aber auch wenn die Datei in Form von Assembly vorliegt
Drum wird man auch bei .Net irgendwelche Tricks einsetzen um die Schwierigkeit zu erhöhen, z.B. eben viele Überprüfungen von denen nur eine den Key überprüft, der Rest nur irgendwas rumrechnet. Oder halt eine überkomplizierte Berechnung die dann von außen nur schwer nachvollziehbar ist.
Alternativ kann man den Code ja auch irgendwie zur Laufzeit erzeugen, auch in der .NET Welt gibt es Tricks Code zur Laufzeit zu generieren, selbstmodifizierenden Code zu basteln. Dann reicht simples dekompilieren schon mal nicht aus.
-
Th69 schrieb:
Vllt. wäre .NET Encryptor dann etwas für euch?!
Danke das ist ganz interessant. Das könnte ausreichen, ich schaue es mir mal näher an.
@Volkard
Ich hoffe das ist, im Hinblick auf Wartbarkeit, ein Scherz.
-
Doge schrieb:
@Volkard
Ich hoffe das ist, im Hinblick auf Wartbarkeit, ein Scherz."Wasch mich, aber mach mich nicht nass!" Willst Du den Hacker ausnahmsweise mal ärgern oder doch nur verhätscheln? Außerdem kann man's doch automatisieren, Alda!
-
Was ist mit Themida? Frisst auch .NET Anwendungen und bring auch ein Lizenzierungstool mit.
-
.NET-Anwendungen sind nun einmal mit einem Disassembler wie ildasm.exe problemlos lesbar und können leicht geändert werden.
Eine integrierte Lizenzprüfung erfordert deswegen etwas Mühe. Eine einfache if-Abfrage ist unzureichend.Ich denke für eine Offline-Lösung wäre folgendes möglich:
- Eine verschlüsselte Datei mit einem Lizenzcode
- Eine Dll zum Lesen und Interpretieren des Lizencodes
- Bei unkorrektem Lizenzcode in der Anwendung Darstellung und Berechnungen durch Dll-Methoden an zahlreichen Stellen unübersichtlich ändern.Man muss dem Lizenzknacker seine Bemühungen so schwer wie irgend möglich machen. Bessere Vorschläge sind willkommen!
-
berniebutt schrieb:
- Eine verschlüsselte Datei mit einem Lizenzcode
Verschlüsselt mit welchem Schlüssel? Den, den du dem Benutzer dann doch wieder zusammen mit dem Programm aushändigen musst?
Ist doch alles Blödsinn.
-
bruuuh schrieb:
Verschlüsselt mit welchem Schlüssel? Den, den du dem Benutzer dann doch wieder zusammen mit dem Programm aushändigen musst?
Ist doch alles Blödsinn.
Vielleicht haben wir die Fragestellung gemeinsam falsch verstanden? Es geht um einen einfachen Lizenzschutz einer
.NET-Anwendung. Bei einer Offline-Lizenzprüfung im Programm muss diese dem lizensierten Anwender schon mitgeteilt sein.Mein Vorschlag soll es allein einem Testanwender erschweren, ohne den durch Kauf angeforderten Lizensschlüssel das
Programm auf lizensierte Vollversion zu manipulieren. Mehr nicht, nur das. Und so waren auch die bisherigen Antworten hier
gemeint.Mache bessere Blödsinn-freie Vorschläge!
-
Nun, ich bin der Meinung, dass das Problem unlösbar ist und jede Implementierung eine Verschwendung von Zeit ist, die man auch mit etwas nützlichem (oder zumindest spaßigem) verbringen könnte. Man kann einem nicht etwas zugänglich machen, es aber gleichzeitig vor ihm geheim halten.
IMHO wird jegliches Ärgernis, das man einem potenziellen Kopierer bereiten kann, durch die Nachteile für den ehrlichen Kunden mehr als nur aufgewogen. Ich möchte als Nutzer keinen obfuskierten Code mit Sollbruchstellen kaufen, bei dem es nur eine Frage der Zeit ist, bis das DRM-System mit irgendwelchen Änderungen in der Umgebung nicht klarkommt und mir den Ärger bereitet, der eigentlich für den Kopierer gedacht war. Wenn ein Programm meint verstecken zu müssen, was es auf meinem Computer anstellt, finde ich das ebenfalls zutiefst abstoßend.
-
bruhster schrieb:
Nun, ich bin der Meinung, dass das Problem unlösbar ist und jede Implementierung eine Verschwendung von Zeit ist, die man auch mit etwas nützlichem (oder zumindest spaßigem) verbringen könnte. Man kann einem nicht etwas zugänglich machen, es aber gleichzeitig vor ihm geheim halten.
Doch.
bruhster schrieb:
IMHO wird jegliches Ärgernis, das man einem potenziellen Kopierer bereiten kann, durch die Nachteile für den ehrlichen Kunden mehr als nur aufgewogen. Ich möchte als Nutzer keinen obfuskierten Code mit Sollbruchstellen kaufen, bei dem es nur eine Frage der Zeit ist, bis das DRM-System mit irgendwelchen Änderungen in der Umgebung nicht klarkommt und mir den Ärger bereitet, der eigentlich für den Kopierer gedacht war. Wenn ein Programm meint verstecken zu müssen, was es auf meinem Computer anstellt, finde ich das ebenfalls zutiefst abstoßend.
Wohl schlechte Erfahrungen mit "Kopierschutz"-Dingen gehabt, die sich tief im System einnisten und Virus spielen.
-
Die Softwareersteller sind einfach nur böse, wenn sie ihre Programme auch verkaufen wollen und für unlizensierte
Testanwender sich etwas einfallen lassen.Zum Thema: Es geht - wie mehrfach geschildert - auch für .NET mit ausreichendem Schutz gegen unerwünschte Manipulation.
Die Wartbarkeit des Programmes muss darunter nicht leiden. Die Prüfung eines Lizenzschlüssels ist einfach zu handhaben und sollte
mit einem Disassembler nicht sofort erkennbar sein. Alle Lösungswege dafür machen jedoch etwas zusätzliche Mühe.