Ablaufdatum für kompilierte exe

  • Hallo Gemeinde,

    hat jemand schon einmal eine Exe entwickelt die ein "Ablaufdatum" enthält, was z.B. sicherstellt, dass die exe nicht mehr benutzt werden kann wenn sie zu alt ist?
    Welcher Ansatz wäre da am sinnvollsten?

    Hintergrund: es soll nur das aktuelle Release eines Programms benutzt werden, da dieses u.a. auf Bios-Optionen zugreift, die sich ja nach einem Bios-Update durchaus ändern können
    oder sogar wegfallen (z.B. Num-lock-Aktivierung bei Keyboards ohne Nummernblock).

  • ... eine Exe entwickelt die ein "Ablaufdatum" enthält, was z.B. sicherstellt, dass die exe nicht mehr benutzt werden kann wenn sie zu alt ist?

    1. Datumsvergleich

    Eine triviale/rustikale Variante wäre, ein Ablaufdatum im Quelltext festzulegen. Beim Start des Programmes wird dieses Datum mit dem aktuellen Systemdatum verglichen und falls größer -> Meldung und Exit.

    Ein mögliches Problem hierbei wäre allerdings, dass man bereits wissen müsste, wann das nächste Release erscheinen wird (es sei denn, man hat feste Intervalle, z.B. alle 3 Monate).

    2. Releasenummer prüfen

    Flexibler wäre es, die Releasenummer der aktuellen Version von einem Server (online) zu lesen. Diese wird mit der intern vergebenen Nummer verglichen und falls größer -> Meldung und Exit.

    Bei einem lokalen Netzwerk könnte man die aktuelle Nummer auch in einer Datei ablegen und gegen diese prüfen.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi (20. Juni 2024 um 17:23)

  • Hallo ihr 2,

    vielen lieben Dank für eure Denkanstöße. Mal sehen ob das wirklich umgesetzt werden soll und welche Variante.
    Da das Tool "Stand alone" funktioniren soll wird es bei Umsetzung wohl auf den Datumsvergleich hinauslaufen.
    Obwohl die BIOS-Version abfragen hätte auch Charme...

  • Wenn Du nachhaltig verhindern willst, dass die exe nach dem Ablaufdatum benutzt wird, musst Du verhindern, dass jemand das Sytemdatum zurücksetzt. Da könnte man auf folgenden Trick verfallen:

    Du suchst Dir eine Datei, die Windows bei jedem Start aktualisiert, nimmst das Datum dieser Datei und gleichst es mit dem Sytemdatum ab. Dateidatum neuer als Systemdatum? -> Manipulation des Systemdatums.


    Gruß


    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Ich habe auch einmal etwas gemacht, was in die Richtung ging: Ich habe geprüft, ob es auf einem Server eine neuere Version gibt und dann konnte man entweder diese neue Version installieren oder das Programm beenden - ein Start der alten Version war nicht mehr möglich.

  • Du kanmnst Dir die aktuelle Uhrzeit aus dem INet holen und vergleichen.

    Spoiler anzeigen

    #include <Constants.au3>

    Local $String = BinaryToString(InetRead ("http://worldtimeapi.org/api/timezone/Europe/berlin.txt%22,1))

    Local $Time = StringRegExp ($String,'datetime: (.+?)T(\d+:\d+:\d+)', $STR_REGEXPARRAYMATCH)

    MsgBox ($MB_SYSTEMMODAL,"",$Time[0] & " " & $Time[1])

    Ist die aus dem INet geholten Zeit größer als das was Du, z. B. im Script als Startzeit stehen hast, dann ....., sonst ......
    .
    Ich würde bei der Installation das Datum verschlüsselt in die Registry schreiben und dann mit der aus dem INet abgleichen.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • so kannst du in autoit direkt die BIOS Version abfragen:

    AutoIt
    Local $iPID = Run('Powershell.exe -Command (gwmi Win32_Bios).SMBIOSBIOSVersion', @DesktopDir, @SW_HIDE, 6)
    If ProcessWaitClose($iPID, 10) = 0 Then SetError(1, 2, 0)
    Local $sOutput = StdoutRead($iPID)
    ConsoleWrite($sOutput & @CRLF)

    Ich denke in deinem Fall sollte man erstmal identifizieren, was der Trigger für ein Software Update darstellt. Zeit ist da ein sehr stumpfer Ansatz wenn es um Usability geht.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Off-Topic

    Local $iPID = Run('Powershell.exe -Command (gwmi Win32_Bios).SMBIOSBIOSVersion', @DesktopDir, @SW_HIDE, 6)

    Warum die WMI-Abfrage mittels Windows PowerShell durchführen? Sollte man nicht für diese Zwecke die CIM-Cmdlets verwenden, weil die WMI-Cmdlets als veraltet gelten?

    Da AutoIt COM-basiert ist, lässt es sich auch nativ mit AutoIt lösen.