Trial-Version erstellen

langer1801

Erfahrenes Mitglied
Hallo, ich möchte von meinem Projekt eine Trial-Version erstellen, die voll funktionsfähig 30 Tage läuft und mittels Registrierungskey freigeschaltet wird. Ich habe schon hier, bei Code-Project und Code-Guru gesucht, bin aber nicht so richtig fündig geworden. Die einzige von mir gefundene Variante schreibt die Daten in die Registry - das ist zu unsicher, weil blitzschnell zu knacken. Außerdem ist der Registrierungs-Key im Code fest vorgegeben, ich will ihn aber personalisieren. Weiß jemand eine Variante oder einen Link, wo man da nachlesen kann?

Mfg

langer
 
Irgendwo wirst du etwas speichern müssen. Ich würde es sogar als Datei machen. Wenn der Code eingegeben ist und geprüft worden ist, wird die Datei angelegt. Die Daten darin enthalten einfach den Namen und den Code. Bei jedem Start wird die Datei gesucht und wenn da, wird der Code geprüft. Wenn jemand so dämlich ist, die Datei wegzulöschen, muss er eben den Code wieder neu eingeben.

Wenn der Code weitergegeben wird, muss er auch den Namen weitergeben. Das wirst du in irgendeiner Form nicht verhindern können, aber dann weisst du wenigstens (wenn du es rausfindests), welcher User das war. Den User kannst du in einer der nächsten Versionen dann sperren.
 
So ungefähr hatte ich mir das auch vorgestellt. Die Weitergabe des Codes mit dem Namen ist gut. Nur mit der Personalisierung beim Key-Erstellen bin ich mir noch nicht sicher, was da für eine Variante geht. Ich neige im Moment dazu, einen wild zusammengewürfelten String im Programm-Code zu speichern und persönliche Angaben des Users damit über XOR zu verschlüsseln. Wenn der User seine persönlichen Daten und diesen Key dann eingegeben hat, werden die Daten ebenso verschlüsselt und mit dem Key verglichen. Wenn dann beide übereinstimmen, okay. Ich hoffe, es klappt so, wie ich es mir vorstelle. Oder gibt es noch eine bessere Variante, einen personalisierten Key zu erzeugen?

Mfg

langer
 
Ich möchte hier mal meine Version der Abfrage des Trial-Modus zur Diskussion stellen (nicht das Registrieren):

Beim Start prüfe ich, ob die ini.xml-Datei im Projektverzeichnis und eine zweite, versteckte, Datei vorhanden ist. Sind beide nicht vorhanden, ist es der erste Start.

Der erste Start:
Es wird die ini.xml-Datei erstellt, darin verschlüsselt gespeichert, daß das Programm nicht freigeschalten ist und die Start-Zeit als CTime. Gleichzeitig wird an einer anderen Stelle eine versteckte Datei erzeugt, in der die Zeit als CTime steht.

Weitere Starts:
Die ini.xml wird gelesen und geprüft, ob freigeschaltet wurde. Wenn nicht, werden
beide Dateien gelesen, der CTime-Wert verglichen. Stimmt er überein, wird geprüft, ob der Trial-Zeitraum überschritten wurde, in diesem Fall der Programm-Start nur nach Registrierung ermöglicht. Ist der Zeitraum nicht überschritten, wird das Programm gestartet. Stimmt der CTime-Wert nicht überein, wurde manipuliert und der Programmstart wird verhindert.
Fehlt die ini.xml und die andere Datei ist vorhanden, hat jemand die ini.xml gelöscht (in der Hoffnung vielleicht, daß dann alles von vorn losgeht). Dann wird ebenfalls nur nach Registrierung gestartet.
Wenn der User dann nicht durch Zufall die versteckte Datei findet und sie dann auch noch mit dem Programm in Zusammenhang bringt, kann er nichts machen. In der Registry findet er jedenfalls keinen Hinweis. Die ini.xml ist aber sehr leicht zu finden und zu manipulieren, deshalb dieser Schutzmechanismus.

Vielleicht etwas umständlich, aber ich denke, so ist es relativ sicher. Oder hat jemand 'ne einfachere Idee?

langer
 
Hi langer,ich habe mich mit diesem Thema noch nicht beschäftigt, aber werde mir deinen Eintrag mal merken. Hört sich logisch an :)
 
Noch ein Tipp:

Setze den Dateinamen der versteckten Datei dynamisch zusammen (zum Beispiel einzelne Zeichen in ein Array) und verwende ihn nicht als konstante Zeichenkette. Ansonsten könnte man diesen in einem Hexviewer recht einfach aufspüren.
Den Dateinamen der ini.xml könntest Du ja absichtlich als konstante Zeichenkette drin lassen. :)
vop
 
Um die Weitergabe der Rgistrierung zu verhindern, könntest Du den Registrierungscode ja auch mit der Harddisk-ID verknüpfen. Dann kann der Code nur mitsamt der Festplatte weitergegeben werden. Wenn der Anwender dann allerdings die Festplatte tauscht, dann muß er neu registrieren.
 
Das geht mit
Code:
BOOL GetVolumeInformation(
   LPCTSTR lpRootPathName,        // address of root directory of the 
                                  // file system
   LPTSTR lpVolumeNameBuffer,     // address of name of the volume
   DWORD nVolumeNameSize,         // length of lpVolumeNameBuffer
   LPDWORD lpVolumeSerialNumber,  // address of volume serial number
   LPDWORD lpMaximumComponentLength,
                                  // address of system's maximum 
                                  // filename length
   LPDWORD lpFileSystemFlags,     // address of file system flags
   LPTSTR lpFileSystemNameBuffer, // address of name of file system
   DWORD nFileSystemNameSize      // length of lpFileSystemNameBuffer
 );
 

Neue Beiträge

Zurück