Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Einfacher Zeitschutz gesucht (TimeBomb) (https://www.delphipraxis.net/100325-einfacher-zeitschutz-gesucht-timebomb.html)

moelski 26. Sep 2007 11:35


Einfacher Zeitschutz gesucht (TimeBomb)
 
Moin !

Wir möchten in unserer Anwendung einen einfachen Zeitschutz implementieren. Der soll vornehmlich bewirken das nach dem Zeitpunkt X eine Meldung kommt / die Anwendung nicht mehr rennt.
Um es vorweg zu nehmen ... Es geht uns nicht darum einen effektiven Schutz einzubauen der ein Starten unmöglich macht. Viel mehr geht es darum dem User zu signalisieren ... "Ab heute müsstest du mal über eine neue Version nachdenken".

Mir ist durchaus bewusst das man gerade so einfache Mechanismen wie eine Datumsprüfung sehr leicht umgehen kann wenn man nur das Biosdatum verstellt. Aber wie gesagt ... Gesucht ist hier nicht der perfekte Schutz. Sagen wir es mal so ... Es muss für den User einfacher sein eine neue Version zu laden, als den Startschutz zu umgehen.

Habt ihr da ein paar brauchbare Ideen / Lösungen?

shmia 26. Sep 2007 13:05

Re: Einfacher Zeitschutz gesucht (TimeBomb)
 
Du kannst es dir ja mal ganz einfach machen.
* beim Starten prüfen, ob in der Registry unter einem bestimmten Pfad ein Wert (Zahl) steht.
* falls nicht wird das Ablaufdatum in die Registry geschrieben
Delphi-Quellcode:
var
   ablaufdatum : TDateTime;
   rwert : integer;
begin
   ablaufdatum := EncodeDate(2007, 10,1);
   rwert := Round(ablaufdatum); // in rwert steht jetzt "39356"
   // rwert wird jetzt in die Registry geschrieben
   ...
   reg.WriteInteger('MainColor', rwert-44444);
Dadurch, dass die Zahl "39356" in die Registry geschrieben wird, wird die
Bedeutung verschleiert.
Wer möchte kann von Zahl auch noch 44444 abziehen; damit wird die Zahl negativ und
der Zusammenhang mit einem Datum noch stärker verschleiert.
* falls der Wert in der Registry gefunden wird, die Umwandlung einfach umkehren:
Delphi-Quellcode:
   ablaufdatum := reg.ReadInteger('MainColor')+44444;

Florian H 26. Sep 2007 13:53

Re: Einfacher Zeitschutz gesucht (TimeBomb)
 
Da man shmias Vorschlag ja immernoch sehr leicht umgehen kann, indem man einfach die Systemzeit verstellt, könntest du auch noch die Zeitpunkte der letzten 3 Starts (o.ä.) speichern.
Wenn diese gleich sind oder ein Start sogar laut Zeitangabe vor dem letzten Start stattfand, gleich einen Manipulationsversuch melden.

Die Zeitangaben natürlich wieder schlau "verschlüsseln", so wie shima es vorschlug.

Reinhard Kern 26. Sep 2007 16:44

Re: Einfacher Zeitschutz gesucht (TimeBomb)
 
Zitat:

Zitat von moelski
Moin !

Wir möchten in unserer Anwendung einen einfachen Zeitschutz implementieren. Der soll vornehmlich bewirken das nach dem Zeitpunkt X eine Meldung kommt / die Anwendung nicht mehr rennt.
Um es vorweg zu nehmen ... Es geht uns nicht darum einen effektiven Schutz einzubauen der ein Starten unmöglich macht. Viel mehr geht es darum dem User zu signalisieren ... "Ab heute müsstest du mal über eine neue Version nachdenken".

Mir ist durchaus bewusst das man gerade so einfache Mechanismen wie eine Datumsprüfung sehr leicht umgehen kann wenn man nur das Biosdatum verstellt. Aber wie gesagt ... Gesucht ist hier nicht der perfekte Schutz. Sagen wir es mal so ... Es muss für den User einfacher sein eine neue Version zu laden, als den Startschutz zu umgehen.

Habt ihr da ein paar brauchbare Ideen / Lösungen?

Hallo,

meine persönliche Meinung: ich würde keine Mühe darauf verschwenden, eine Verstellung der Systemzeit zu entdecken. Für jemanden, der seinen Rechner ernsthaft benutzt, ist nämlich eine falsche Systemzeit mit unabsehbar vielen Nachteilen verbunden, daher lasse ich gleich die Finger davon; abgesehen davon, dass ich ein Verteilsystem mit Atomuhr habe und das erst mal ausschalten müsste. Wer aber qualifiziert genug ist, extra eine virtuelle Maschine einzurichten, um eine bestimmte Software weiter benutzen zu können, dem fällt auch was anderes ein, und ausserdem kann man kaum was dagegen machen, wenn das von Anfang an geplant wird und daher keine Zeitüberschneidungen auftreten.

Was man aber tun sollte, ist den Endzeitpunkt sorgfältig zu verschlüsseln, damit es nicht genügt, einfach ein neues Datum in die Lizenzdatei zu schreiben, das wäre dann doch zu einfach.

Gruss Reinhard

generic 27. Sep 2007 08:48

Re: Einfacher Zeitschutz gesucht (TimeBomb)
 
Wenn du noch zusätzlich zu der Systemzeit paar Windowsdateien abfragst, hättest du ein schlecht veränderbares Datum.

Kandidaten sind z.B.:
Swapdatei - Änderungsdatum
Registry - Änderungsdatum

moelski 11. Okt 2007 08:32

Re: Einfacher Zeitschutz gesucht (TimeBomb)
 
Moin !

So das Datum verschlüsselt ablegen habe ich nun. Ich verwende einfach ein RC4 codiertes Datum (gab hier im Forum dazu eine Unit RCx) und den Schlüssel dafür findet man in der EXE :wink:

Ich denke das ist ausreichend genug geschützt. Man kann jedenfalls aus dem Hex der exe nicht mehr so einfach Texte auslesen.


Ich würde aber dennoch gerne das Startdatum irgendwo ablegen. Also wann wurde die Anwendung auf diesem System zum ersten mal gestartet. Ich habe nur bis dato noch keine Idee wie ich das machen kann.
Denn einfach nur eine Datei anlegen ist sinnlos. Das kann man löschen und hat den Urzustand wieder. Selbiges gilt für die Registry.

Also, wie kann ich irgendwo / irgendwie ein Datum so ablegen, das man es nicht "mal eben" wieder entfernen kann?

Alexander 11. Okt 2007 14:11

Re: Einfacher Zeitschutz gesucht (TimeBomb)
 
Also ich persönlich mag überhaupt keine Software, die irgendwo (am besten noch in eine Windows-Datei) irgendwelche Einträge ablegt.
Eigentlich bleiben für dich nur das Anwendungsverzeichnis, ggf. ein zusätzliches Verzeichnis, in dem du Settings-Dateien ablegst (?), und die Registry. Dann evtl. noch eine DB, die deine Software nutzt. Mehr "sinnvollere Verstecke" gibt es meiner Meinung nach nicht. Aber wenn du diese Info an all diesen Stellen versteckst, geht das schon in Ordnung.
Aber bedenke, man kann es immer knacken!

Alternativ kannst du dir auch teure Komponenten zu legen, die dann ausgeklügelter sind und vielleicht einen "ernsteren" Schutz liefern.

OregonGhost 11. Okt 2007 14:56

Re: Einfacher Zeitschutz gesucht (TimeBomb)
 
Wo hier gerade soviel geredet wurde über Alternate Data Streams (ADS) - wäre das nicht auch ein interessanter Ort, Daten abzulegen? Hätte den Vorteil, dass sie mit dem Löschen der Datei auch sicher verschwinden. Aber vermutlich geht das nicht, wenn die Programmdatei schreibgeschützt. Könnte mir aber vorstellen, z.B. das Installationsdatum da mit hineinzuschreiben während der Installation oder ähnliches.
Naja, war nur so ein Gedanke.

DeddyH 11. Okt 2007 15:00

Re: Einfacher Zeitschutz gesucht (TimeBomb)
 
@OregonGhost: soweit ich das verstanden habe, funktionieren ADS aber nur unter NTFS. Ist die Installationspartition auf dem Zielrechner FAT-formatiert, war's das leider schon.

OregonGhost 11. Okt 2007 15:16

Re: Einfacher Zeitschutz gesucht (TimeBomb)
 
Das würde ich als Schwund einsortieren :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz