Prüfen wann Programm erste Mal gestartet

  • Hallo,

    Ich möchte ein in AutoIt geschriebenes Programm verkaufen und dazu eine 5-Tage-Testversion anbieten.
    Bisher habe ich es so gemacht:

    [autoit]

    Func License()
    If IniRead("Settings.ini", "Other", "License", "") = "True" Then
    $vCryptKey = _Crypt_DeriveKey(@UserName & "...", $CALG_RC4)
    If Crypt(IniRead("Settings.ini", "Other", "Key", ""), True) = "..." Then
    MsgBox(64, Default, "Lizenzcheck erfolgreich!")
    Else
    MsgBox(16, Default, "Fehlerhafte Lizenz!")
    Exit
    EndIf
    Else
    $vCryptKey = _Crypt_DeriveKey("...", $CALG_RC4)
    If Execute(Crypt(IniRead("Settings.ini", "Other", "Key", ""), True) + 5 - @YDAY) > 0 Then
    MsgBox(64, Default, "Lizenzcheck erfolgreich!")
    Else
    MsgBox(16, Default, "Lizenz abgelaufen! (Trial)")
    Exit
    EndIf
    EndIf
    _Crypt_DestroyKey($vCryptKey)
    EndFunc ;==>License
    Func Crypt($vData, $bDecrypt = False)
    If $bDecrypt Then
    Return BinaryToString(_Crypt_DecryptData($vData, $vCryptKey, $CALG_USERKEY))
    Else
    Return _Crypt_EncryptData("" & $vData, $vCryptKey, $CALG_USERKEY)
    EndIf
    EndFunc ;==>Crypt

    [/autoit]

    Leider ist dadurch die TestVersion nur 5 Tage ab dem Tag gültig wo ich sie anbiete, ich möchte sie jedoch 5 Tage nach Download gültig haben.

    Hat jemand eine Idee?

    mfg

    [autoit]

    If ProcessExists("Sig.exe") Then
    ConsoleWrite("@@ mfg")
    Else
    ConsoleWrite("!! -no sig-")
    EndIf

    [/autoit]
  • Ohje, jetzt entbrennt gleich wieder eine Diskussion über Sinn und Zweck solch einer Abfrage, die Dekompilierbarkeit von AutoIt-Programmen und die Speicherung von Keys..... alle Wochen wieder :D

    Du könntest z.B. einen Registry-Eintrag verfassen (oder auch eine Ini-Datei), in denen du das aktuelle Datum und Zeit abspeicherst (falls schon Eintrag vorhanden, nichts neues mehr eintragen!). Bei jedem Programmstart wird dann eben der Eintrag mit der aktuellen Zeit verglichen...

    Aber das hast du ja schon zu einem Teil umgesetzt, wie ich sehe.
    Wo liegt dein Problem? ;)

    Gruß stay

  • Das Problem liegt darin dass in der .ini "ab Werk" der 327. Jahrestag eingetragen ist was bedeutet dass das Programm in wenigen Tagen nicht mehr nutzbar ist.
    Ein generieren in die .ini ist zwecklos, da diese dann zum verlängern lediglich gelöscht werden müsste (befindet sich zwecks anderer Einstellungen im selben Verzeichnis)

    Der Gedanke mit der Registry kam mir auch schon, allerdings lese ich oft Dinge hier und in anderen Foren die dagegen sprechen.
    Zudem weiß ich nicht wo genau ich das in der Registry speichern sollte/könnte, da ich mich damit bisher nicht weiter befasst habe.


    Dekompilieren usw ist mir klar, damit rechne ich auch fest, allerdings wird nur das Datum ver- und entschlüsselt, damit niemand auf die Idee kommt einfach das Datum in der .ini auf 328 oder whatever zu setzen. Zum ver- und entschlüsseln benutze ich für die Testversion ein festgelegtes Passwort, für eine Lizenz eine Kombination aus Usernamen und einem Password um eine Weitergabe des Lizenzkeys zu verhindern.
    Ich möchte auch keinesfalls mit dem Programm eine Internetverbindung aufbauen, da es ohnehin schon 2 von 43 Treffer bei Virustotalt hat

    [autoit]

    If ProcessExists("Sig.exe") Then
    ConsoleWrite("@@ mfg")
    Else
    ConsoleWrite("!! -no sig-")
    EndIf

    [/autoit]
  • Hallo Andy,

    also ich habe das mit einem Registry eintrag gelöst, bzw genauer genommen mit 2 einmal in hklocal maschiene, programme blabla windows -> Name meines programms und den selben Eintrag habe ich noch einmal unter hkuser gesetzt. somit hatte ich zwei werte die glecih sein mussten. in die registry habe ich jeweils das datum eintragen lassen und arbiete zzt. an einer abfrage, das er das registry datum mit dem aktuellen vergleicht und wenn mehr als 14tage dazwischen liegen er nach einem Key fragt. Und die beiden key vergleciht er immer ob sie glecih sind, wenn cniht wird auch da sofort nach einem key gefragt. (beide registry Einträge werden unterschiedlich verschlüsselt erst nach der Entschlüsselung können sie verglichen werden).
    Ok ichhabe bei der keyeingabe eine Internet Verbindung aufgebaut auf meinen Server, wo verglichen wird ob der eingegeben key auch passt. (ist zzt noch eine Billig Lösung per ini die ausgelesen wird....)

    LG
    Icetiger

    „Für sein Volk zu sterben, ist ein großes Opfer.

    Doch es ist weit schwerer, für sein Volk zu leben.“

  • Ob nun Registry oder ini... beides ist leicht gefunden und kann vom Benutzer gelöscht werden um die Laufzeit zu reseten.

    Ein anderer Ansatz wäre folgender:

    Du erstellst serverseitig bei jedem angeforderten Download eine individuelle exe deines Scriptes, welche das Downloaddatum in verschlüsselter Form enthält. Das könnte man zum Beispiel durch automatisierte Scripte, welche das Resources Feld der exe bearbeiten realisieren. Das erfordert natürlich, dass du ein entsprechendes PHP Script schreibst. Dein Lizenzkey den du dem Anwender zukommen lässt enthält dann die maximale Laufzeit in Tagen. Dein Script kann dann prüfen ob die Differenz zwischen aktuellem Datum und Downloaddatum noch in der Toleranz der Lizenzlaufzeit liegt. Ausserdem können aufgrund der serverseitigen und geheimen Verschlüsselung Manipulationen des Downloaddatums ausgeschlossen werden.

    Probleme:

    1. Ein erneuter Download würde die Laufzeit verlängern, das könnte man z.B. vermeiden, wenn man jeder individuellen exe auch noch Regeln für die zugehörigen Lizenzkeys mitgibt, welche regelmässig varieren. Du musst dann nur verhindern, dass man beliebig viele Lizenzkeys bekommen kann, was leider auch nicht wirklich möglich ist.
    2. Manipulationen der Systemuhr würden den Schutz aushebeln.
    3. Wie bei allen Autoit Scripten kann der Schutz leicht durch Decompilen abgeschaltet werden


    Ein wirklich wirksamer Schutz kann meiner Meinung nach nur durch online Prüfungen und temporäres nachladen essentieller Programmteile realisiert werden, welche nur im Speicher zur Laufzeit vorhanden sind. Aber auch das würde einen Profi vermutlich kaum davon abhalten den Schutz auszuhebeln. Selbst die größten Softwarefirmen mit tausenden Programmierern finden keinen Weg um die illegale Nutzung effektiv zu verhindern.