Lizenzierungssystem

  • VB.NET

Es gibt 45 Antworten in diesem Thema. Der letzte Beitrag () ist von nikeee13.

    Lizenzierungssystem

    Hallo,
    nachdem ich meine unknackbare zeitlich begrenzte Testversion endlich erfolgreich fertig gestellt habe, möchte ich mich jetzt in nächster Zeit mehr mit einem Lizenzierunssystem beschäftigen.
    Kann mir jemand vielleicht sagen, ob und wie es möglich ist mit HTML eine Eingabe in der TextBox auf meiner Internetseite in eine andere TextBox zu übersetzen? Ungefähr so wie TextBox2.Text = TextBox1.Text.Replace("A", "BARF345").
    Ich weiß nicht, ob das wirklich die beste Idee für ein Lizenzierunssystem ist aber ich möchte sie folgend gestalten:
    Schritt eins wird darin bestehen den verschlüsselten Code auf meiner Internetseite zu entschlüsseln, nachdem man bezahlt hat. Natürlich werde ich kein richtiges Bezahlungssystem anwenden wollen (darf ich auch noch gar nicht), sondern man muss einfach nur einen Button klicken und darf den Code entschlüsseln. Der entschlüsselte Code wird angezeigt. Und diesen kann der Benutzer jetzt in die TextBox in dem Programm einfügen, welches aktiviert werden soll. So solls funktionieren. Habt ihr da noch andere Ideen oder sagt ihr eher, dass das eine gute Methode ist.
    Forensuchfunktion benutzen. Das wäre mal ein Anfang:
    [VB.NET] Lizenzsystem für Programme

    Bzw. logischer weise benötigst du dann eine Datenbank in du des einträgst, und so überprüfst ob der Code schon benutzt worden ist.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Hallo Michael,

    ich bin ehrlich, ich habe die Erklärung nicht ganz verstanden. Was ich dir aber sagen kann, ist, dass dieser Ansatz der total falsche ist. HTML kannst du für die Verbindung von Server zu Datenbank vergessen. Richte dir einfach eine MySQL Datenbank ein und fülle sie mit allen Lizensierungsnummern, die richtig sind. Um die MySQL-Datenbank auszulesen solltest du das Passwort derselben auf keinen Fall angeben, programmiere dir stattdessen ein PHP-Script, dem man eine Lizensiernummer übergeben kann und das dann zurückgibt, ob die Lizensierungnummer in der Datenbank vorhanden ist oder nicht. Optional kannst du in diesem Script auch nach jeder Abfrage einer Nummer auch diese gleich aus der Datenbank löschen, um das Nutzen zweier Nummern zu verhindern.

    Gruß, Jan
    Ja, ich habe ungefähr sowas ja auch vor. Sagt mal, jetzt ganz vom Thema weg:
    Wie funktioniert eigentlich so ein Bezahlungssystem? Man hat doch verschiedene Zahlungsmöglichkeiten wie girocard oder so. Wie läuft so etwas im genauen ab? Kostet das für den Programm Entwickler was?
    Wie schon erwähnt, möchte ich so etwas nicht einrichten, ich darf es auch noch gar nicht. Ich werde auch niemals so gute Programme schreiben können, sodass ich sie verkaufen kann. Mich interessiert eigentlich nur, wie so eine Bezahlung bei Amazon oder irgendwo anders abläuft.
    Ich glaube ja die haben (logischerweise) einen Vertrag mit ner Bank etc. die wickeln das intern ab.
    bzw. Sachen wie PSC, bei denen musst mein "Entwickler" also bei PaySafeCard ansfragen.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    J-F schrieb:

    Um die MySQL-Datenbank auszulesen solltest du das Passwort derselben auf keinen Fall angeben, programmiere dir stattdessen ein PHP-Script, dem man eine Lizensiernummer übergeben kann und das dann zurückgibt, ob die Lizensierungnummer in der Datenbank vorhanden ist oder nicht. Optional kannst du in diesem Script auch nach jeder Abfrage einer Nummer auch diese gleich aus der Datenbank löschen, um das Nutzen zweier Nummern zu verhindern.

    Und zum umgehen simuliert man einfach den Server und sendet das erwartete Ergebnis zurück....

    Es gibt aber bereits ein paar fertige Lösungen, die zumindest alle Hobby-Cracker abhalten.

    z.B.:
    installkey.codeplex.com/
    http://www.vb-paradise.de/programmieren/hauptforum/79674-registrierungsschluessel/

    Natürlich nutzt dir das beste Lizenzierungssystem nichts, wenn "jeder" deinen Code dekompilieren kann und sich die Lizenzierungslogik ansehen kann. Darum sollte auch ein guter Obfuscator her.
    Beim Obfuscieren muss man allerdings auch dazu sagen, dass, wie bei der Lizenzierung, man mit dem entsprechenden Aufwand wahrscheinlich jede Methode irgendwie umgehen kann.

    Falls du also nicht vor hast, ein paar 1000 Kopien pro Jahr zu verkaufen, reicht es wahrscheinlich aus wenn du eines der oben genannten Systeme verwendest und einen halbwegs guten Obfuscator. Alles andere (z.B.: eigene Logik für mehr Sicherheit basteln, Teures Lizensierungssystem kaufen) wäre den Aufwand / das Geld nicht Wert.

    Wenn du dich doch entscheidest ein teures Lizensierungssystem zu kaufen, musst du dir auch dessen Bewusst sein, dass auch das nichts bringen wird, wenn man es falsch implementiert.

    Edit: Falls du etwas Geld für einen guten Obfuscator/Protector ausgeben willst: Themida

    Noch ein Edit: confuser.codeplex.com/ Ist ein sehr guter Obfuscator.
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BiedermannS“ ()

    BiedermannS schrieb:

    Natürlich nutzt dir das beste Lizenzierungssystem nichts, wenn "jeder" deinen Code dekompilieren kann und sich die Lizenzierungslogik ansehen kann. Darum sollte auch ein guter Obfuscator her.
    Bei digitalen Signaturen wäre es praktisch "egal", ob das jemand sehen könnte, da man, um Lizenzen zu generieren den privaten Schlüssel benötigt. Das Verfahren ist aber dafür relativ leicht zu umgehen. (Einfach die MSIL-Opcodes etwas abändern, aber so ist das ja bei allen Lizenzsystemen ;))

    Ich habe hier etwas geschrieben:
    [VB.NET] Brauche gute Vorchläge für ein Lizenz-System
    Von meinem iPhone gesendet

    J-F schrieb:

    Um die MySQL-Datenbank auszulesen solltest du das Passwort derselben auf keinen Fall angeben


    So, meint ihr alle jetzt, dass obfuscaten keine gute Idee ist?

    Und, und kann man denn das FTP-Passwort auch bei obfuscatem Programm sehen? Oh nein, bitte nicht ;( :S
    Je nachdem wie gut die Verschlüsselung ist, kann man natürlich auch das Passwort auslesen. Du solltest bei solchen wichtigen Daten, wie Passwörter nie auf Obfuscater setzen.

    Wenn du abfragen möchtest, ob ein bestimmter Schlüssel in einer MySQL Datenbank ist, solltest du auf keinen Fall selbst eine Verbindung mit der SQL-Datenbank aufnehmen, sondern ein PHP Script auf der Website programmieren, das, wenn man den richtigen Schlüssel übergibt, ein "TRUE" zurückgibt.

    Gruß, Jan

    Michael K. schrieb:

    Und, und kann man denn das FTP-Passwort auch bei obfuscatem Programm sehen? Oh nein, bitte nicht ;( :S
    Doch, so ist es leider. Und selbst wenn deine FTP-Daten im Programmtext selber unlesbar sind - sie stehen immer im RAM und allerspätestens offenbaren sie sich, wenn du die Verbindung zum FTP-Server aufbaust. Es ist also praktisch unmöglich, dass man seine FTP-Daten keinem preisgibt.

    Wenn du MySQL auf der Serverseite benutzen willst, dann verwende nicht die MySQL-Lib von Dodo, da diese viel zu unsicher ist (sorry, Dodo). Das wäre praktisch das gleiche, als würdest du deine FTP-Daten im Programm abspeichern.

    Der Trick bei der PHP-Methode ist, dass man nur die Parameter für eine Query übergibt, nicht die ganze Query (denn dann kann jeder seine eigenen Querys schicken!). Eine HTTPS-Verbindung zum Server ist empfehlenswert.

    Alles im allen bringt dir das Ganze meist so oder so nichts. Selbst Sublime Text oder ReSharper lassen sich vergleichsweise "einfach" knacken (hab ich so gehört). Und diese Programme werden für 70$ (Sublime Text) und ab 179€ (ReSharper) verkauft.

    Ich sage immer, dass sie die Arbeit, die sie in so ein Lizenzsystem investieren würden, lieber in das Programm und seine Funktionalitäten an sich stecken sollten. So wird es wenigstens bekannter und besser. Ansonsten ist eine Online-Aktivierung meist einfach nur nervig für den Benutzer. Eine Offline-Aktivierung ist IMO mindestens genauso effektiv und stört weniger.

    @Samus Aran:
    Die MySQL-Lib braucht keine Login-Daten für die Datenbank, da irgendwie mit Authentifizierung auf der PHP-Seite gearbeitet wird. Trotzdem ist sie wirklich unsicher. Von der produktiven Verwendung rate ich ab.
    Von meinem iPhone gesendet
    Ich habe die Frage des TE so verstanden:

    Er möchte ein Lizensierungssystem erstellen, indem er alle Registrierungsschlüssel (Ich gehe da mal von einfachen Strings aus "123-123-123-123") in einer Datenbank speichern möchte. Der Nutzer gibt beim Start den Schlüssel ein und das Programm soll prüfen, ob dieser in der MySQL Datenbank vorhanden ist und dem Benutzer den Zugang zum Programm ermöglichen.

    Wenn das Programm selbst Kontakt mit der MySQL Datenbank aufnehmen sollte, muss das Passwort derselben ja irgendwo im Code stehen, ergo es ist auslesbar. Da er aber nur auslesen möchte, ob ein Schlüssel vorhanden ist, reicht es vollkommen aus, ein PHP Script auf dem Server zu erstellen. Das Programm kann dann den vom Nutzer eingegenbenen Schlüssel an das Script per "Post" oder "Get" übertragen und dieses kann in der Datenbank prüfen, ob der Schlüssel vorhanden ist und gibt entsprechend ein "True" oder "False" zurück.

    Gruß, Jan