C++ Software "ablaufen lassen"

TuxuT

Ensign
Registriert
Sep. 2011
Beiträge
251
Hallo Gemeinde.

Im PC-Alltag kommt es ab und an vor, dass sich eine Software nach Ablauf einer 30tägigen Testzeit nicht mehr starten lässt. In der Vergangenheit half manchmal ein simples zurückstellen der Systemzeit. Heute geht dies meist nicht mehr...
Ich hätte gerne gewusst, welche Möglichkeiten mir sich bieten, eine solches "Ablaufen" in C++ unter Windows zu realisieren?

Beispiel: Ich möchte, dass sich mein Programm genau am 24.12.2012 nicht mehr starten lässt (der Trick mit der Uhr darf auf keinen Fall Anwendung finden).

Meine ersten Lösungsansätze sehen derzeit so aus:
1. Über einen Eintrag in der Registry (Countdown).
2. Zeit des Ablaufs hart in den Code bzw. der EXE bzw. in einer DLL hinterlegen.

Ich würde mich über mehr Informationen zu diesem Thema freuen.

Vielen Dank.
 
frage: hat dein programm z.m. bei der installation zugriff auf's internet? einmal reicht. wenn nicht, dann geht das nicht, ausser du erlaubst eine funktionierende neuinstallation ;)
 
Merk dir doch einfach anhand einer Internet Uhr ( Webservice ) das Installationsdatum und prüf bei jedem Start gegen diese Uhrzeit mithilfe des gleichen Webservices.
 
Die Erkennung, ob die Systemzeit manipuliert wurde, funktioniert meist so:
- Die Zeit, die das Programm lief, wird geloggt. Sollte die Systemzeit auf einmal vor den geloggten Zeiten liegen, würde ich das Programm den Dienst verweigern lassen. Der Versuch der Manipulation ist ja dann offensichtlich.
- Weiterhin wird auch gerne mal die Erstellungszeit oder der Zeitpunkt des letzten Zugriffs bestimmter Programmdateien überwacht und mit der Systemzeit abgeglichen. Sollte da eine Unvereinbarkeit auftreten, liegt auch hier eine versuchte Manipulation nahe.
- Du kannst die Zeit über das Internet abfragen lassen (zB von einem NTP-Server) und bei Nichterreichbarkeit den Dienst mit Hinweis auf erforderliche Internetverbindung verweigern. Immerhin musst du hier nicht auf die Systemzeit zurückgreifen, die manipulierbar ist.

Speichern würde ich die dafür nötigen Informationen in einem verschlüsselten Datensatz in der Registry oder auf der Platte (oder beides!).

Btw, Programme kann man ja zB in Visual Studio "zertifizieren" lassen (also so, dass bei Ausführung der Hersteller angezeigt wird - hat sicher jeder schon mal gesehen). Kann man da ein Ablaufdatum angeben? Dann würde sich Windows um das ganze Zeitgedöns kümmern. Es wäre jedenfalls sehr schön, wenn das möglich ist.
 
Du erstellst beim installieren eine verschlüsselte Datei/Regkey wo das Installationsdatum gespeichert wird. Ohne diesen key/Datei startet dein Program nicht.
zusätzlich merkst du dir beim jeden Start in einer Datei/Regkey die uhrzeit wann es gestartet wird.

durch den ersten eintrag kriegst du mit wan die 30 Tage abgelaufen sind
durch den zweiten merkst du ob jemand mit der Uhrzeit/Datum spielt

Das ist natürlich nur ein geringer Schutz, wenn jemand will kann er das trotzdem umgehen.
normalerweise ist es aber einfacher mit einen Debugger die abfragen zu finden als nach den Keys zu suchen...
Deswegen mache ich/wir auch keine online nachfrage, da vor allem in Firmen nicht selbstverständlich ist das jedes Programm einen Inetzugang bekommt (Firewallsettings usw.)
Und zum knacken mit Debugger sind beide gleich schwierig.
Ergänzung ()

e-Laurin schrieb:
Btw, Programme kann man ja zB in Visual Studio "zertifizieren" lassen (also so, dass bei Ausführung der Hersteller angezeigt wird - hat sicher jeder schon mal gesehen). Kann man da ein Ablaufdatum angeben? Dann würde sich Windows um das ganze Zeitgedöns kümmern. Es wäre jedenfalls sehr schön, wenn das möglich ist.
Nope geht nicht
Weiß jetzt nicht genau was du meinst mit zertifizieren,aber es gibt zwei stufen.
Erstens, du signierst den Installer mit einer gültigen Crypto-Signature.
Zweitens, du machst das Zertified vor Windows xxx programm mit, dann gibts du MS deinen Sourcecode, und die überprüfen ob du dich eh brav an die gültigen Schnittstellen haltest.

Aber beides hat nix mit einenm ablaufdatum oder ähnliches zu tun.
 
wenn online nicht beim installieren eine erstinstallation überprüft werden kann, dann reicht das löschen all dieser keys aus um es einfach neu zu installieren.
 
die sache mit der online verifikation hat aber auch sein hacken. Man muss die kommunikation aufjedenfall verschlüßeln. sonst schaue ich einfach wo dein programm nach der uhrzeit schaut und leite diese anfrage an einen server von mir um der dann eine manipulierte Zeit sendet.

reg einträge kann man auch manipulieren? Genauso wie die zugriffszeiten auf datein? Da könnte man sich halt nur helfen indem man geheimhält welche datein man dort benutzt, allerdings kann man auch das rausfinden wenn man sich anschaut auf welche resourcen das programm zugreift?

sind alles nur theoretische überlegungen!
 
@the_nobs
Schade. Ich habe gehofft, dass es an der Stelle einen Mechanismus gibt, auf den man zurückgreifen kann.
 
Mercsen schrieb:
Man muss die kommunikation aufjedenfall verschlüßeln. sonst schaue ich einfach wo dein programm nach der uhrzeit schaut und leite diese anfrage an einen server von mir um der dann eine manipulierte Zeit sendet.

Das geht auch mit verschlüsselter Kommunikation. Einfacher Replayangriff. Wenn man das
vernünftig machen will, braucht es schon ein durchdachtes Protokoll. Und wenn man davon
keine Ahnung hat, bekommt man es unter Garantie nicht hin.

Einfach nur Verschlüsselung draufknallen macht eine Sache nicht auf einmal sicher.
 
Zurück
Oben