Laden...

Programm darf nur n Mal Starten in n Stunden

Erstellt von wisher78 vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.727 Views
wisher78 Themenstarter:in
101 Beiträge seit 2011
vor 8 Jahren
Programm darf nur n Mal Starten in n Stunden

Hallo Zusammen,

im Rahmen eines Lizensierungskonzepts muss es einem Programm ohne gültige Lizenz trotzdem möglich sein, dass es nach dem ersten Start noch 2 Mal innerhalb von 24 Stunden startbar ist.

Die Idee ist, Anzahl der bereits getätigten Start und den Zeitpunkt des ersten Starts verschlüsselt in der Registry abzulegen. Als Problem sehe ich jetzt, dass man für das Schreiben in HKLM Adminrechte benötigt. Und wenn ich die Informationen nach HKEY_CURRENT_USER lege, könnte durch mehrere User die Einschränkung "n Mal in n Stunden" umgangen werden.

Hat Jemand von Euch Ideen wie ich das am geschicktesten löse?

Bitte keine Philosophiedebatte über die Art der Restriktion. Das Konzept ist so zwischen der GF und dem Kunden vereinbart und muss umgesetzt werden. 😕

Vielen Dank

U
135 Beiträge seit 2009
vor 8 Jahren

Dann wirst Du IMHO um einen zentralen Lizenzierungsserver nicht herumkommen, an den Du Deinen Lizenzschlüssel übermittelst, der die gewünschte Prüfung ("Ist eine gültige Lizenz vorhanden? Falls nein, wurde auf diesem Client die Software schon n mal in n Stunden gestartet") durchführt und ein "Du darfst" oder "Du darfst nicht" an den Client zurückliefert.

Wenn Du es lokal auf dem Client speichern willst, stehst Du immer vor dem Problem: entweder Du legst es userbezogen im Profil ab (egal ob Registry oder Dateisystem) - dann gibt es den von Dir beschriebenen Workaround, die Applikation als anderer User zu starten.
Oder Du schreibst es außerhalb des Profils - dann trifft Dich sehr wahrscheinlich die UAC bzw. die fehlenden Administratorrechte.

Beim Lizenzierungsserver musst Du Dir aber natürlich auch wieder eine hochverfügbare Lösung einfallen lassen - denn wenn der ausfällt, ist natürlich Schluss für ALLE 😉

Ich persönlich würde die Infos wahrscheinlich trotzdem im Userprofile ablegen... den Aufwand, sich x Useraccounts einzurichten und die App immer wieder mit andren Accounts zu starten wird sich kaum einer machen. Das Risiko wäre zumindest für mich eher tragbarer, als versehentlich alle User auszusperren.

wisher78 Themenstarter:in
101 Beiträge seit 2011
vor 8 Jahren

Danke für die Antwort.

Die total sichere Highend Lösung ist nicht von Nöten. Nach dem Fahrradschlossprinzip wollen wir mit überschaubarem Aufwand verhindern, dass das Programm ohne Lizenz ohne Einschränkung frei verwendet werden kann.

Momentan geht die Idee dahin, dass wir die Informationen nicht in die Registry schreiben, sondern in eine verschlüsselte Datei und die im Programmdata Ordner ablegen. Die Datei wird mit Programminstallation dort initial abgelegt. Fehlt sie, startet das Programm nicht. Startet das Programm wird die Information aus der Datei gelesen bzw. geschrieben.
Beschreibbar sollte meines Wissens nach der Programmdata Ordner sein.

16.806 Beiträge seit 2008
vor 8 Jahren

Dann kannst auch direkt das [Tutorial] Konfigurationsmodell im .NET Framework nehmen und die Werte verschlüsselt speichern.
Wäre genauso "sicher" wie eine Datei in ProgramData.

F
10.010 Beiträge seit 2004
vor 8 Jahren

Wäre eher noch sicherer, denn ProgramData ist recht einfach zu finden.

Der User-Settings Ordner jedoch etwas trickier.

W
955 Beiträge seit 2010
vor 8 Jahren

Weitere Möglichkeit ist das IsolatedStorage. Kann jedoch ebenfalls mit nativen Apps erreicht werden.

wisher78 Themenstarter:in
101 Beiträge seit 2011
vor 8 Jahren

Das "Konfigurationsmodell im .NET Framework" ist dann aber wieder User gebunden und somit könnte ein anderer User das Programm wieder 3 Mal in 24 Stunden starten, so wie ich das sehe.

Ich mache es nun über verschlüsselte Serialisierung und lege die Datei in ProgramData ab. Der Anwender kann mit der Datei in verschlüsseltem Zustand nichts anfangen. Bleibt sowieso noch das Problem, dass er den Zeitstempel seines Rechners zurücksetzen könnte und dann wäre auch die Restriktion der 24h hinfällig. Aber wie gesagt, hier herrscht das Fahrradschlossprinzip. Ein bisschen Sicherheit schützt vor Gelgenheitsdieben. 😃

U
1.688 Beiträge seit 2007
vor 8 Jahren

Der Anwender kann mit der Datei in verschlüsseltem Zustand nichts anfangen. Bleibt sowieso noch das Problem, dass er den Zeitstempel seines Rechners zurücksetzen könnte und dann wäre auch die Restriktion der 24h hinfällig.

Es reicht aus, einmalig eine Sicherheitskopie der Datei zu erstellen, und diese vor jedem Start per Batch wiederherzustellen.

Gelöschter Account
vor 8 Jahren

Unterm Strich benötigst du hier ein Systemwide-Singleton also ein nichts anderes als ein Singleton das nicht nur für die AppDomain gültig ist sondern für die gesamte Workstation. Der Rest ist Handarbeit(Anwendung prüft auf RunningIsLegal) Dafür bietet sich entweder die ROT(COM Running Object Table) oder IPC basiertes Remoting an. Beides hat den Nachteil das es nur im UserContext unterwegs ist. Ein Singleton unter "Run As Admin" wäre für ein Program mit niederen Rechten unerreichbar(vice versa). Das liesse sich mit einem netzwerkbasierten Remoting Protokoll über 127.0.01 allerdings umgehen.

(Es gäbe noch weitere Implementierungsmöglichkeiten wie Shared Memory oder Named Pipes, wie du das realisierst obliegt deiner Entscheidung. Vom Design-Aspekt her wäre besagter systemwide-Singleton aber sicher die sauberste Lösung. Jede gute Suchmaschine wird bei "C# systemwide Singleton" ein gutes Tutorial abliefern. )

16.806 Beiträge seit 2008
vor 8 Jahren

Das "Konfigurationsmodell im .NET Framework" ist dann aber wieder User gebunden und somit könnte ein anderer User das Programm wieder 3 Mal in 24 Stunden starten, so wie ich das sehe.

Nö.

How to share custom application configuration settings across projects in .NET

wisher78 Themenstarter:in
101 Beiträge seit 2011
vor 8 Jahren

Es reicht aus, einmalig eine Sicherheitskopie der Datei zu erstellen, und diese vor jedem Start per Batch wiederherzustellen.

😁 Wäre ich vermutlich früher oder später selbst drauf gekommen. (Hoffentlich)
Allerdings trifft dies auf die Konfigurationsdatei ebenfalls zu. Einfach kopieren vor Start und hinter her wieder ersetzen.