Lizenzsystem für Programme

    • VB.NET

    Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Annoxoli.

      Lizenzsystem für Programme

      Moin,

      des öfteren habe ich nun gelesen, wie man sein Programm mit einem Lizenzsystem schützen kann etc.
      Daher gebe ich euch hierfür mehrere beispiele, wie man Lizenzsysteme erstellen kann.

      Teil 1:

      Welche Varianten stehen einem zur Verfügung ?
      Das wohl bekannteste Lizenzsystem ist, wenn ein Programm mit einer Datenbank verbunden ist.
      Neben diesem, gibt es noch Möglichkeiten von KeyFiles, HWID, Algorithmus, u.s.w

      Datenbank
      Eine Direkte Verbindung zu einer Public Datenbank ist zu unsicher.
      Da man dafür diverse Sensible Daten in das entsprechende Produkt einbauen muss.
      Daher empfiehlt es sich, dafür eine ServerAnwendung zu Programmieren, oder alles via PHP Script machen.

      Das kann man Vertiefen wie man möchte.
      Was Optional ist, damit es einigermaßen sicher ist, sind folgende Kenntnisse / Daten:
      Programmierkenntnisse in PHP, MySQL / TSQL oder SQLITE ( wobei alle sehr ähnlich sind, oder gleich )
      Optional ein Zertifiziertes SSL Zertifikat, oder ein eigenes, damit die Daten entsprechend verschlüsselt übertragen werden können
      Web,- Datenbankserver

      Das wars im großen und ganzen.
      Aufbau der Datenbank ( Optimal )
      SER_ID ( Primary Key, Typ BigInt );
      SER_NR ( Seriennummer, Typ Varchar (30));
      RowInsert ( Datum beim hinzufügen der Serial, Typ DateTime );

      Das wäre ein Grundgerüst.
      Natürlich kann man dieses ausweiten auf, maximale Aktivierungen, Personen gebunden, HWID Gebunden etc.
      im PHP Script selber, müsst Ihr auf die entsprechende Datenbank Verbinden, und Abfragen ob die Seriennummer XY Vorhanden ist oder nicht, und gebt entsprechend ein Returnwert.
      Wenn Ihr mehrere Produkte habt, solltet Ihr entweder den Produktname, oder die Produkt ID entsprechend mit einbinden.

      Wie sicher ist das ?
      Relativ sicher, ABER:
      Man muss den PHP Script so Programmieren, das ein SQL Injection nicht möglich ist, ich denke das muss ich nicht weiter erklären.

      Wenn man im PHP Script ein Returnwert "TRUE" oder "FALSE" gibt, besteht die Gefahr, das man ein eigenes PHP Script hochladen kann
      den Aktivierungsserver auf der Host umleitet, und stumpf "TRUE" zurück gibt.
      Hierbei kann man dann den wert TRUE in MD5 Packen. Optional mit einer entsprechenden Zufallsvalue dranhängen
      Bsp.:

      Quellcode

      1. MD5(TRUE + 123l1j23lö1j231g3l1l)

      Sprich irgend ein wirres Zeug, wo keiner drauf kommt. Das sollte man im Programm entsprechend abfangen und überprüfen.
      Das gleiche bei FALSE.
      Wenn ich hierbei was vergessen habe, könnt ihr mich gerne korrigieren.

      KeyFile
      In einer Keyfile, kann man folgende Daten reinschreiben:
      Betriebssystem, Vor,-Nachname, LizenzID, Datum Erstellungsdatum, Ablaufdatum(Optional),
      Versionsbeschränkung, ist Updatefähig, Lizenztyp ( Professional, Ultimate, Enterprise usw.) etc.

      Die Keyfile solltet Ihr entsprechend verschlüsseln, damit diese nicht jeder erstellen kann bzw ändern kann.
      Das wars im großen und ganzen. Diese keyfile KANN dann im Programm Stammverzeichnis eingebunden werden,
      und im FormLoad Event entsprechend abgefragt werden.

      DemoVersionen
      30 Tage Demo Versionen gibt es im Internet genug.
      Wie Funktionieren diese ?
      Im Prinzip sehr einfach, beim ersten starten auf dem Betriebssystem wird das Aktuelle Datum abgespeichert ( zb. in einer Textdatei, registry etc )
      und wird entsprechend bei jedem Start überprüft. Nach 30 Tagen, ist die Software entsprechend zu Registrieren / Lizenzieren oder man hat eben pech.

      Jetzt besteht aber die gefahr, das man stumpf das Datum ändern kann ( lokalen PC ) oder, das man den Speicherort herausfindet, und das Datum editiert.
      Daher: Das Abzuspeichernde Datum immer Verschlüsseln ( es gibt hier glaube ich ein nettes tutorial, wie man das Datum in Chinesischer Schrift "Verschlüsseln" kann :P )
      Was das Lokale PC Datum angeht:
      Versucht, das ihr das Datum, von einem "Datumsserver" bekommt. Dafür kümmt ihr ein PHP Script erstellen, was euch das Aktuelle Datum wiedergibt, oder ihr nimmt globale
      Datumsserver.


      Algorithmus
      Die hohe Kunst der Mathematik wird hier benötigt.
      Nehmen wir ein Beispiel:

      Quellcode

      1. ABCDA-OLAJD-391A-93AS-0012K

      Netter Code, aber was müsste dieser beinhalten ?
      Für Welches Produkt es bestimmt ist, Ablaufdatum, email adresse des Nutzers, vor,- Nachname des Nutzers, Produkt Version, ob es update fähig ist
      ob es für das Betriebssystem geeignet ist usw.

      Das ist nicht Grade einfach, alles in einem Key einzubinden.
      Hierfür kann ich selber leider kein Beispiel geben, da ich dabei noch selber am tüfteln bin.

      Feste Seriennummer / Lizenzschlüssel
      Natürlich kann man auch 20 Key's in einer TXT Datei packen, und im Installierten Programm mitliefern
      oder diese entsprechend im Programm abfragt, allerdings ist man hierbei sehr eingeschränkt.

      KeyFiles Streamen // Whitelist
      Ansonsten kann man auch eine .txt Datei vom Server Streamen, und überprüft ob die eingegebene Seriennummer übereinstimmt.
      Vorteil: Einfach und schnell
      Nachteil: bei einer nicht verschlüsselten Verbindung, hat man den Direktenpfad, und kann alles lesen.

      Ansonsten gibt es eine Whitelist, worüber Ihr die HardwareID des Nutzers benötigt, und diese einfach in die Textdatei auf dem Server einbindet.
      Beim Starten des Programms überprüft Ihr ob die HWID XYXYXYXX1234XYXYXYXYX in der Textdatei vorhanden ist, oder nicht.

      Vorteil: Die Lizenz ist nur für EINEN PC gültig, lässt sich nur durch eine Hostmodifizierung umgehen.
      Nachteil: Ohne Internet -> Keine Lizenz

      Alternative
      Eine Nette Alternative habe ich in dem HTML Editor "Phase 5" gefunden. Das Lizenzsystem läuft so:
      Von Anfang an, hat man dort eine Lizenz.zip Datei, darin befindet sich eine .txt Datei, welche Verschlüsselt ist, sowie mit einem Passwort versehen ist.

      Für die Lizenzaktivierung, benötigt man lediglich das ZIP Passwort, und fertig!
      Dann ist das Programm Lizenziert. Was genau in der TXT Datei steht, wissen nur die Entwickler von dem entsprechenden Programm.
      Nachteil hierbei ist, man weiß nicht wer wo die Software Aktiviert, wo diese gestartet wird, wie oft, von wem, und ob der User wirklich eine
      gekaufte, oder "gefundene" Lizenz hat.

      Ansonsten gibt es noch mehr Möglichkeiten, wie man was machen kann. Das sind aber die bekanntesten

      Ich selber weiß auch nicht alles zu 100% daher:
      Wenn Ihr noch Sachen habt, schreibt diese gerne dazu, oder Korrigiert mich, werdet aber nicht beleidigend ^^

      Bei fragen stehe ich, oder ander aus dem Forum, gerne zur Verfügung.

      Gruß, Annoxoli

      Bedenkt bitte:
      ALLE Lizenzsysteme haben Vor,- und Nachteile und sind niemals zu 100% sicher.
      Man sollte ebenfalls NIEMALS Sensible Daten in ein Programm einbinden.
      .net ist nur ein etwas größerer Sandkasten, vergesst das nicht.
      Dazu kann man .net Programme relativ einfach Dekompilieren.
      Daher sollte man dein Programm Obfusicaten.
      Infos / Tutorial dazu könnt Ihr euch hier ansehen:
      [VB.NET] Obfuscation - CodeKlau erschweren

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

      Hier ist mal ein zweiter Teil:

      Hardware ID gebundende Lizenz
      Bevor wir anfangen, was ist eine Hardware ID ?
      Eine Hardware ID kann sich aus folgenden Komponenten zusammensetzen:

      Prozessor ID, Grafikkarten ID, Festplatten ID, Motherboard ID, Laufwerk ID
      im Prinzip alles, was mit Hardware zu tun hat. nur sollte man darauf achten, das man
      keine verschleißteile wie "Laufwerke" nimmt.

      Eine Hardware ID, ist weltweit einzigartig, wenn man diese ID noch zzgl.
      mit einem "SALT" ( Random Zahl / String ) addiert oder Verbindet, ist es zu 100% Einzigartig.

      Eine Hardware ID würde sich nach dem Wechsel eine Festplatte, Ram Stick etc. ändern
      Diese ID kann entweder direkt von anfang an in eine Lizenz eingebunden werden, oder wird in einer DB ( Datenbank )
      abgespeichert, und bei jedem, oder jeden 3 - X Start des Programms überprüft.

      Eine solche Lizenzmethode verwendet die Software "SmartFTP"

      Nutzer / Betriebssystem gebundene Lizenz
      Man kann vor der Lizenz erstellung vom nutzer Abfragen welches Betriebssystem er verwendet, und die Lizenz entsprechend anpassen.
      Ganz gemein, aber wirkungsvoll ist es dabei zzgl. noch, wenn man den aktuellen Nutzernamen vom PC verwendet

      Als Beispiel wäre dann folgende sache:
      Benutzername: Hans-Dieter/PC
      Betriebssystem: Windows 7 Ultimate

      In der Datenbank kann man dann folgendes Abspeichern:
      MD5 ( Hans-Dieter/PC Windows 7 Ultimate )
      Ergibt: f0d609b9dfc79bc08326976ce070e7c5

      Optional, mit einem SALT:
      MD5 ( Hans-Dieter/PC Windows 7 Ultimate 123453252da34%§" )
      Ergibt: bb507bd1c3a8901fe711e92b10c49199

      mit einem Salt, weiß nie einer genau, wie sich was zusammensetzt ( ist sicherer )
      großer nachteil hierbei:
      wenn man den Nutzernamen am PC ändert, oder ein höherwertiges betriebssystem holt.
      Hierbei muss man dann den Support Kontaktieren, oder eine neue Lizenz erwerben.

      Speicherorte auf dem PC, für eine Lizenz
      Registry:
      Hierbei kann man Problemlos die Lizenz abspeichern.
      Wenn die Lizenz zb. die folgende ist:
      AASC-44532-A65S4D-W82A-12

      kann man diese im Klatext in der Registry abspeichern.
      Dabei sollte man aber ( optional ) folgendes machen:
      In der Registry selbst den Nutzernamen, Vor,- Nachnamen,- Email mit abspeichern
      und dabei einen Security Key erstellen.
      Wenn man die Registry dann Exportiert, und auf PC XY Einbindet, kann er ja lizenziert sein,
      das ist damit nicht gegeben

      SecrutiyKey = MD5 ( Vorname,- Nachname.- Betriebssystemname,- ProduktName,- Email,- + SALT )
      Bsp.: MD5 ( Hans, Dieter, Windows 7 Ultimate, PRODUKTNAME, hans-dieter@mustermann.com, 4a1s8w25a )
      Ergibt: 51434fd9473959c379cb8dd527266993
      dieser key, ist mehr als eindeutig. Birgt aber auch wiederum gefahren, das man ihn knacken kann.

      Speicherorte gehen auch, in einer Stumpfen .txt datei
      hierbei kann der Security Key folgendes sein:
      ( siehe oben ) zzgl. das "LastEditFileDate" nehmen, und mit in den MD5 hash packen
      grund: wenn man die lizenz editiert oder Modifiziert stimmt der SecurityHash nicht mehr überein.

      Online zwang
      Das Produkt "Steam" macht es vor,-
      Ohne Internet = Keine Produkte.
      So kann man es auch machen, das man Nutzername + PW braucht für die Lizenz.
      Die Daten können entweder selbst mittels PHP überprüft werden
      oder via schnittstelle zu Burning Board, vBulletin or what ever verknüpft werden.


      Vorteil: Kaum möglichkeiten zum umgehen
      Nachteil: keine chance im Offline Modus // Nutzer mögen sowas nicht ( man siehe die "glücklichen" nutzer bei steam an )

      Dazu gibt es dann auch noch "Sicherheitssoftware" wie
      SecuRom ( Wiki: de.wikipedia.org/wiki/SecuROM )
      SafeDisc ( Wiki: de.wikipedia.org/wiki/SafeDisc )
      PunkBuster ( Wiki: de.wikipedia.org/wiki/Punkbuster )
      Info: Punkbuster, ist nicht nur eine Anti-Cheat-Software sondern überprüft zb. bei CoD 4 // BF die Software Lizenzen

      Das Tutorial ist ebenfalls hier zu finden: Klick hier

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Annoxoli“ ()