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.:
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 )
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:
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
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.:
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 )
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:
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“ ()