Zeit ablesen und kürzen

  • Guten Tag,


    ich wollte fragen wie es geht das der Script von i-einer website (so ist es wahrscheinlich am sichersten) die momentane uhrzeit abließt (Yahr monat tag stunden minuten).

    Und dann wenn man jetzt auf einen Button klickt soll es anfangen ab diesem zeitpunkt 30 tage zählen und nach diesen 30 tagen funktioniert der script nichtmehr.

    Das brauche ich für die testversion eines Programmes ich will machen das man das programm 30 tage testen kann nach diesen 30 tagen ist die testversion abgelaufen aolso kann man nichtmehr auf den testbutton klicken und man kann dann einen serial eingeben


    Ich hoffe ihr habt mich soweit verstanden ihr könnt mich ja nochmal fragen.

    Ich verzweifle schon langsam xDDD

    Vielen dank, were nett wenn ihr einen beispiel script dazu posten könnt

  • Unsichere Version:

    Uhrzeit von Webseite(am besten nen eigenes Php script dafür anlegen) momentanes Datum in die Registry schreiben,
    dannach bei jedem Programm start die Uhrzeit über das Php Script abrufen und vergleichen.

    Sichere Version:

    Bei der ersten benutzung das Momenatne Datum in einer MySQL oder what ever Datenbank speichern und oben wieder Abfragen ob die30 Tage vergangen sind.

    Mit nem Code bespiel kann ich grade nicht dienen, ist aber vieleicht ein Denkanstoß :thumbup:

  • Man weiß ja nicht wann jemand die testversion nutzt wenn man das als opensource programm stellt ^^ php ist eine gute idee aber ich habe gedacht ihr kennt euch mit php (so wie ich ^^) nicht so aus als autoitler würde mich freuen wenn mir da jemand behilflich sein kann mit einem beispiel, hab da schon tausende sachen versucht, entweder zu unsicher oder man kann es leicht knacken^^

  • Was aber momentan wichtiger ist ist diese Problem:

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <mysql.au3>
    #include <libMySQLdll.au3>
    #include <Inet.au3>
    #include <Crypt.au3>
    #include <Misc.au3>

    [/autoit][autoit][/autoit][autoit]

    $first_benutzer = IniRead("cache.ini", "settings", "benutzer", "Benutzername")
    $first_passwort = IniRead("cache.ini", "settings", "pw", "Passwort")
    Global $modus = IniRead("cache.ini", "runterfahren", "modus", -1), $var

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Global $MySQLConn
    Global Const $toolname = "Serial Sicherung"
    Global Const $short = "Serial Sicherung"
    Global Const $Username = "XXXXXXXXXXXXX"
    Global Const $Password = "XXXXXXXXXXXXXX"
    Global Const $MySQLServerName = "XXXXXXXXXXXX"
    Global Const $dbname = "serialcode"
    Global Const $Database = $dbname
    Global Const $table = "Schutztool"
    Global Const $link = "XXXXXXXXXXXXX"
    Global Const $linkfaq = "XXXXXXXXXXXXXXXX"
    Global Const $linkvollversion = "XXXXXXXXXXXXXXXXXXX"
    Global $i_wunschaccount = ""
    Global $i_wunschpasswort = ""
    Global $login = 0

    [/autoit][autoit][/autoit][autoit]

    _MySQL_InitLibrary()
    If @error Then
    TrayTip('Error', 'libmysql.dll konnte nicht gefunden werden', 10, 3)
    Sleep(10000)
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    Global $MySQLConn = _MySQL_Init()
    $Connected = _MySQL_Real_Connect($MySQLConn, $MySQLServerName, $Username, $Password, $Database)
    If Not $Connected Then
    TrayTip('Error', 'Verbindung zur Datenbank konnte nicht hergestellt werden', 10, 3)
    Sleep(10000)
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Serial Überprüfung", 478, 300, 296, 132)
    $part1 = GUICtrlCreateInput("", 50, 64, 50, 17)
    GUICtrlSetLimit(-1, 5)
    $part2 = GUICtrlCreateInput("", 110, 64, 50, 17)
    GUICtrlSetLimit(-1, 5)
    $part3 = GUICtrlCreateInput("", 170, 64, 50, 17)
    GUICtrlSetLimit(-1, 5)
    $part4 = GUICtrlCreateInput("", 230, 64, 50, 17)
    GUICtrlSetLimit(-1, 5)
    $part5 = GUICtrlCreateInput("", 290, 64, 50, 17)
    GUICtrlSetLimit(-1, 5)
    $Button1 = GUICtrlCreateButton("Login", 216, 144, 89, 25)
    $Button2 = GUICtrlCreateButton("Vollversion kaufen", 112, 144, 97, 25)
    $Button3 = GUICtrlCreateButton("Testversion", 8, 144, 89, 25)
    $Label3 = GUICtrlCreateLabel("Sie nutzen die:", 32, 200, 74, 17)
    $Label4 = GUICtrlCreateLabel("Testversion", 120, 200, 113, 17)
    GUICtrlSetColor(-1, 0xFF0000)
    $Label5 = GUICtrlCreateLabel("Verbleibende Tage:", 32, 220, 97, 17)
    $Label6 = GUICtrlCreateLabel("(no time)", 136, 220, 58, 17)
    $Label7 = GUICtrlCreateLabel("Serial Programm", 144, 16, 80, 17)
    $dateimenu = GUICtrlCreateMenu("Datei")
    $vollversionitem = GUICtrlCreateMenuItem("Vollversion", $dateimenu)
    $exititem = GUICtrlCreateMenuItem("Exit", $dateimenu)
    $fragemenu = GUICtrlCreateMenu("?")
    $kontaktitem = GUICtrlCreateMenuItem("Kontakt", $fragemenu)
    $aboutitem = GUICtrlCreateMenuItem("About", $fragemenu)
    $faqitem = GUICtrlCreateMenuItem("FAQ´s", $fragemenu)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Case $Button1
    $serial = GUICtrlRead($part1) & "-" & GUICtrlRead($part2) & "-" & GUICtrlRead($part3) & "-" & GUICtrlRead($part4) & "-" & GUICtrlRead($part5)

    [/autoit][autoit][/autoit][autoit]

    If (StringLen($serial) < 5) Then
    MsgBox(0, "Fehler", "Ihr Serial ist nicht lang genug. Bitte überprüfen sie Ihre Eingabe!")
    Else
    $accountregistrieren = _mysql_checkserial($MySQLConn, $table, $serial)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If Not $accountregistrieren Then
    TrayTip('Error', 'Serial Code wurde nicht gefunden', 10, 3)
    Sleep(3000)
    Exit
    Else
    ;////////////////////////////////////
    ;WEnn man den Serial richtig eingegeben hat dann will ich das in der spalte aktiviert eine 1 reingeschrieben wird der bot das abfrägt wenn man einen
    ; Serial eingibt und guckt ob eine 1 (für schon benutzt) oder eine 0 da steht
    ; Wenn es geht das er auch die GUi zum serial eingeben nicht mehr anzeigt (WEnn man den serial richtig eingegeben hat)
    ;///////////////////////////////////
    GuiDelete($Form1)
    MsgBox(0,"Login","Sie haben sich erfolgreich eingeloggt")
    #Region ### START Koda GUI section ### Form=
    $Form1_1 = GUICreate("Epic World Sicherung", 556, 303, 574, 143)
    $Combo1 = GUICtrlCreateCombo("Bitte wählen", 64, 56, 113, 25)
    GUICtrlSetData(-1, "Herunterfahren|Strom aus|Abbrechen")
    $Button4 = GUICtrlCreateButton("Start", 240, 56, 121, 33)
    GUICtrlSetFont(-1, 12, 800, 0, "Comic Sans MS")
    $Lable1 = GUICtrlCreateLabel("Made by Epic World", 288, 32, 100, 17)
    $Label1 = GUICtrlCreateLabel("Wir haften nicht für irgendwelche Schäden", 168, 224, 206, 17)
    $Label2 = GUICtrlCreateLabel("Copyright by Epic World", 216, 256, 117, 17)
    $Benutzername = GUICtrlCreateInput($first_benutzer, 72, 128, 121, 21)
    $Passwort = GUICtrlCreateInput("Passwort", 72, 168, 121, 21, BitOR($ES_PASSWORD, $ES_AUTOHSCROLL))
    $Label3 = GUICtrlCreateLabel("Dies ist der Benutzername und das Passwort wo Sie später", 208, 136, 284, 17)
    $Label4 = GUICtrlCreateLabel("fürs auschalten brauchen.", 208, 168, 127, 17)
    $Checkbox1 = GUICtrlCreateCheckbox("Benutzername speichern", 240, 104, 140, 17)
    GUICtrlSetState($Checkbox1, $GUI_CHECKED)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit][autoit][/autoit][autoit]

    If $modus = 0 Then
    GUICtrlSetData($Combo1, "Herunterfahren")
    ElseIf $modus = 1 Then
    GUICtrlSetData($Combo1, "Strom aus")
    EndIf
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button4
    If GUICtrlRead($Combo1) = "Bitte wählen" Then
    MsgBox(48, "Fehler", "Bitte wählen Sie eine Option aus!")
    ElseIf GUICtrlRead($Combo1) = "Herunterfahren" Then
    IniWrite("cache.ini", "runterfahren", "modus", 0)
    If BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED) Then
    IniWrite("cache.ini", "settings", "benutzer", GUICtrlRead($Benutzername))
    IniWrite("cache.ini", "settings", "pw", _Crypt_HashData(GUICtrlRead($Passwort), $CALG_MD5))
    EndIf
    $LoginBenutzer = GUICtrlRead($Benutzername)
    If GUICtrlRead($Passwort) <> $first_passwort Then
    $PW = _Crypt_HashData(GUICtrlRead($Passwort), $CALG_MD5)
    Else
    $PW = GUICtrlRead($Passwort)
    EndIf
    GUIDelete()
    _Sicherung(0, $PW, $LoginBenutzer)
    ElseIf GUICtrlRead($Combo1) = "Strom aus" Then
    IniWrite("cache.ini", "runterfahren", "modus", 1)
    If BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED) Then
    IniWrite("cache.ini", "settings", "benutzer", GUICtrlRead($Benutzername))
    IniWrite("cache.ini", "settings", "pw", _Crypt_HashData(GUICtrlRead($Passwort), $CALG_MD5))
    EndIf
    $LoginBenutzer = GUICtrlRead($Benutzername)
    If GUICtrlRead($Passwort) == $first_passwort Then
    $PW = _Crypt_HashData(GUICtrlRead($Passwort), $CALG_MD5)
    Else
    $PW = GUICtrlRead($Passwort)
    EndIf
    GUIDelete()
    _Sicherung(1, $PW, $LoginBenutzer)
    Else
    Exit
    EndIf
    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit]

    EndIf

    [/autoit][autoit][/autoit][autoit]

    ;### Tidy Error -> if Not closed before "Func" statement.
    ;### Tidy Error -> "func" cannot be inside any IF/Do/While/For/Case/Func statement.

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Case $exititem
    Exit

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;### Tidy Error -> "endswitch" is closing previous "case" on line 84
    EndSwitch
    ;### Tidy Error -> "wend" is closing previous "switch" on line 83
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;### Tidy Error -> while Not closed before "Func" statement.
    ;### Tidy Error -> "func" cannot be inside any IF/Do/While/For/Case/Func statement.

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;### Tidy Error -> while Not closed before "Func" statement.
    ;### Tidy Error -> "func" cannot be inside any IF/Do/While/For/Case/Func statement.
    Func _vollerversion()
    ShellExecute("htttp://google.de")
    EndFunc ;==>_vollerversion

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _Sicherung($var=0, $sPasswort = "Passwort", $sBenutzername = "Benutzername")
    MSGBOx(0,"WOOOOOOW","DU HAST EINEN BUTTON GEKLICKT!?!?!?!?!? O.o UNGLAUBLICH!!!")
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    ;### Tidy Error -> while Not closed before "Func" statement.
    ;### Tidy Error -> "func" cannot be inside any IF/Do/While/For/Case/Func statement.
    Func _mysql_checkserial($connection, $table, $account)
    _MySQL_Real_Query($connection, StringFormat("SELECT `Serial` FROM `%s` WHERE `Serial` = '%s'", $table, _MySQL_Real_Escape_String($connection, $account)))
    If @error Then
    Return SetError(-1, @error, '')
    Else
    Local $hResult = _MySQL_Store_Result($connection)
    Local $aReturn = _MySQL_Fetch_Row_StringArray($hResult)
    _MySQL_Free_Result($hResult)
    If UBound($aReturn) = 0 Then
    Return SetError(-2, @error, '')
    Else
    Return $aReturn[0]
    EndIf
    EndIf
    EndFunc ;==>_mysql_checkserial

    [/autoit]

    Wobei ich eure hilfe braucht steht im script =/

  • Wobei ich eure hilfe braucht steht im script =/


    Ist jetz echt nicht böse gemeint aber du musst endlich mal lernen dein Problem genau zu beschreiben.
    Du sagst nur was du haben willst. Wo da dein Problem liegt kann keiner wissen.
    Wenn du deine Probleme genau beschreibst brauchst du übrigens auch nicht in der Shoutbox rumzupushen.
    Hier sind viele Leute die sich gut auskennen und die auch gerne helfen.
    Wenn Sie wissen was du willst ist das auch sehr schnell erledigt.

    Gruß
    Schnitzel

    • Offizieller Beitrag

    Ich halte es für wenig sinnvoll ein Skript mit einer Laufzeitbegrenzung zu versehen.
    Das funktioniert nur, wenn du die Version mit einem hardcodierten Installationsgrenzdatum versiehst. Danach kann man die Version weder installieren noch starten.
    Eine Begrenzung in der Form: "Installdatum + Testzeitraum" läßt sich doch spätestens mit einem virtuellen System einfach umgehen.
    Man kann natürlich recht verwinkelte Wege gehen um das Installationsdatum zu verstecken und es so dem User zu erschweren das zu manipulieren. Aber dann sollte man darüber nicht in einem offen zugänglichen Forum diskutieren. Da könntest du auch deinen Wohnungsschlüssel verstecken und das Versteck in der Zeitung bekannt geben. :rofl:

  • ^^
    Ja sorry aber das mit der Zeitbgrenzung lass ich erst mal lieber erst mal an das andere problem gehen. Sorry ich bin nicht gerade der beeste erklären und erst recht ned um 0:0 Uhr
    Also liegt darin das ich nicht weiß wie ich es macheen soll das er in die selbe spalte von dem serial eine 1 bei aktiviert schreibt. Ich könnte wahrscheinlich noch in eine andere tabelle das schreiben aber das bringt mir nichts da er wissen muss welcher serial schonmal aktiviert ist.
    Und ich weiß auch nicht wie er überprüft ob da eine 1 oder eine 0 steht und bei einer 1 es nicht funktioniert also aus einer Datenbank was ausließt
    Bei dem das der Script nurnoch den "Hauptscript" nach der richtigen serialeingabe öffnet verzweifel ich komplett.

    DatenbanK: serialcode in dieser datenbank ist die Tabelle Schutztool und darins ind
    Serial
    aktiviert (hier soll dann die 1 stehen für den serial wenn er aktiviert wird)
    Time /brauch ich erstmal nicht
    Version

  • so um das mal klar zu stellen:
    1. ein einfaches php script ist genauso unsicher wie ne mysql-abfrage... kommt nämlich aufs selbe raus, dass man sniffen kann und sich nen eigenen server bauen kann bzw einfach die anfrage per host-file umleiten kann :P
    2. für eine online abfrage muss immer internet vorhanden sein... nicht sehr nutzlerfreundlich ;)
    3. eine weitere unsichere methode die zeit abzufragen ist einfach den http-header der serverantwort auszuwerten und zu guckn was der server für eine zeit hat
    4. offline könntest du doch einfach den timestamp nehmen und bei jedem start guckn ob die zeit niedriger ist, wenn ja dann wurde gefuscht...
    5. aber allgemein kann man sagen, das sollche Trialversionen innerhalb von sekunden gecrackt werden ;)