• Hi das ist meine erste UDF: Die CheckSerial UDF
    Sie ist dazu da um Scripte nur mit Seriennummern auführen zu können. Und zwar offline ohne MySQL Datenbank. Ich habe nämlich schon öfter die Frage gehört wie man denn ein script mit seriennummer schützen kann. Und da dachte ich mir: "Mach doch einfach eine UDF" Vielleicht kann es ja jemand gebrauchen

    Beispiel
    [autoit]

    #include <SerialCheck.au3>

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

    $check = _IniCheckSerial_Valid(@ScriptDir & "\test.ini", True, "its333")
    If $check = 0 Then
    MsgBox(0, "Hinweis", "Sie benutzen eine gültige Seriennummer")
    Else
    If $check = 2 Then MsgBox(16, "Warnung!", "Registrierungsdatei fehlt!")
    _SerialCheck_Valid("([A-Z0-6]{4}(-|$)){4}", @ScriptDir & "\test.ini", True, "its333",True)
    If @error = 1 Then
    Exit
    EndIf
    EndIf

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

    MsgBox(0, "Weiter", "Und das Skript läuft weiter")

    [/autoit]
    CheckSerial UDF
    [autoit]

    #include <String.au3>

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

    ;===============================================================
    ; Name: _SerialCheck_Valid
    ; Description: Schützt Scripte dadurch in dem man einen Lizenkey eingeben muss.
    ; man diese selbst am Script Anfang abfragen.
    ; Parameter(s): $Pattern = RegEx Such Pattern zum finden einer gültigen Seriennummer.
    ; [Optional] $ini = Kompletter Datei Pfad zu einer .ini
    ; [Optional] $Encrypt = Per _StringEncrypt Verschlüsseln
    ; [Optional] $EncryptPass = Ecryption Passwort für _StringEncrypt Standard ist "_SerialCheck_Valid".
    ; [Optional] $InvalidExit = Exit wenn ungültiger Code eingegeben wurde. Standard ist True
    ; Return Value(s): @Error Values
    ; 0 = Erfolgreich
    ; 1 = ungültiger Key
    ; 2 = Kein RegEx Pattern angegeben
    ; Return Values:
    ; 0 = Erfolgreich
    ; 1 = ungültiger Key
    ; 2 = Kein RegEx Pattern angegeben
    ;
    ; Author(s): Molaynox <molaynox.bplaced.net> <[email='black.eyes.soft@gmx.de'][/email]>
    ; Version: 0.9 (BETA)
    ; Date: 09.11.2010
    ;===============================================================

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

    Func _SerialCheck_Valid($Pattern, $ini = "", $Encrypt = False, $EncryptPass = "_SerialCheck_Valid",$InvalidExit = True)
    If $Pattern = "" Then
    SetError(2)
    Return 2
    EndIf
    $pass = InputBox("Authorization needed!", "Um das Script weiter benutzen zu können müssen sie einen Lizenkey eingeben!", "")
    $CheckKey = StringRegExp($pass, $Pattern, 1)
    If $CheckKey = 0 Then
    MsgBox(16 + 262144, "WARNUNG!", "Achtung ihr Lizenzkey ist ungültig. Bitte wiederholen sie den Vorgang." & _
    @CRLF & "WARNING! Your License Key is invalid. Please try again.")
    If $InvalidExit = True Then Exit
    If Not $ini = "" Then
    If $Encrypt = True Then
    $write = IniWrite($ini, "_SerialCheck_Valid", "Validation", _StringEncrypt(1, "invalid", $EncryptPass))
    If $write = 0 Then
    MsgBox(16, "ERROR", "Zum Registrieren des Programmes sind Admin Rechte erforderlich. Bitte als Admin wiederholen.")
    Exit
    EndIf
    Else
    $write = IniWrite($ini, "_SerialCheck_Valid", "Validation", "invalid")
    If $write = 0 Then
    MsgBox(16, "ERROR", "Zum Registrieren des Programmes sind Admin Rechte erforderlich. Bitte als Admin wiederholen.")
    Exit
    EndIf
    EndIf
    EndIf
    SetError(1)
    Return 1
    Exit
    Else
    MsgBox(262144, "License Key ist Gültig", "Ihr Lizenzkey ist gültig." & _
    @CRLF & "Your License Key is valid.")
    If Not $ini = "" Then
    If $Encrypt = True Then
    $write = IniWrite($ini, "_SerialCheck_Valid", "Validation", _StringEncrypt(1, "valid", $EncryptPass))
    If $write = 0 Then
    MsgBox(16, "ERROR", "Zum Registrieren des Programmes sind Admin Rechte erforderlich. Bitte als Admin wiederholen.")
    Exit
    EndIf
    Else
    $write = IniWrite($ini, "_SerialCheck_Valid", "Validation", "valid")
    If $write = 0 Then
    MsgBox(16, "ERROR", "Zum Registrieren des Programmes sind Admin Rechte erforderlich. Bitte als Admin wiederholen.")
    Exit
    EndIf
    EndIf
    EndIf
    SetError(0)
    EndIf
    Return 0
    EndFunc ;==>_SerialCheck_Valid

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

    ;===============================================================
    ; Name: _IniCheckSerial_Valid
    ; Description: Prüft ob
    ; man diese selbst am Script Anfang abfragen.
    ; Parameter(s): $ini = Kompletter Datei Pfad zu einer .ini
    ; [Optional] $Encrypt = Wenn ini in _SerialCheck_Valid verschlüsselt wurde auf True
    ; [Optional] $EncryptPass = Ecryption Passwort für _StringEncrypt Standard ist "_SerialCheck_Valid".
    ; Return Value(s): @Error Values
    ; 0 = .ini existiert
    ; 1 = .ini existiert nicht
    ; Return Values:
    ; 0 = valid Key
    ; 1 = invalid Key
    ; 2 = Problem mit .ini
    ;
    ; Author(s): Molaynox <molaynox.bplaced.net> <[email='black.eyes.soft@gmx.de'][/email]>
    ; Version: 0.9 (BETA)
    ; Date: 09.11.2010
    ;===============================================================

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

    Func _IniCheckSerial_Valid($ini, $Encrypt = False, $EncryptPass = "_SerialCheck_Valid")
    If Not FileExists($ini) Then
    SetError(1)
    Return 2
    Else
    SetError(0)
    EndIf
    If $Encrypt = True Then
    $validation = IniRead($ini, "_SerialCheck_Valid", "Validation", "NotFound")
    $crypt = _StringEncrypt(0, $validation, $EncryptPass)
    If $crypt = "valid" Then
    Return 0
    ElseIf $crypt = "invalid" Then
    Return 1
    EndIf
    ElseIf $Encrypt = False Then
    $validation = IniRead($ini, "_SerialCheck_Valid", "Validation", "NotFound")
    If $validation = "valid" Then
    Return 0
    ElseIf $validation = "invalid" Then
    Return 1
    EndIf
    EndIf
    EndFunc ;==>_IniCheckSerial_Valid

    [/autoit]
    • Offizieller Beitrag

    Ist meines erachtens vollkommen überflüssig, da dein Script von jedem der Google bedienen kann, innerhalb von ein Paar Minuten geknackt wird.
    Autoit ist eine Scriptsprache und ist schneller zu dekompilieren als man denkt.

    Edit: Bevor jetzt wieder absolut unsinnige Kommentare wie decompilieren ist verboten kommen....
    Alles was verboten ist reizt um so mehr. :P

  • Edit: Bevor jetzt wieder absolut unsinnige Kommentare wie decompilieren ist verboten kommen....
    Alles was verboten ist reizt um so mehr. :P

    Ouja (Wenn man mal so daran denkt, was man mit DLLs so schönes machen kann) :thumbup:

    @Topic:
    Naja, hat man sich im Notfall auch fix selber zusammengeschustert^^ Ansonsten, wenn wer faul ist, nicht schlecht^^


  • Ouja (Wenn man mal so daran denkt, was man mit DLLs so schönes machen kann) :thumbup:

    www.i_tell_you_olly_dbg.de ;)
    Nein, ohne flax, du kannst irgendwie IMMER an ein PW rankommen, Problem ist nur: du verschwendest die Zeit deines Lebens wenn du 2 Jahre an nem PW sitzt, was innerhalb von 5 min geändert is

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Zitat

    Edit: Bevor jetzt wieder absolut unsinnige Kommentare wie decompilieren ist verboten kommen....

    Decompilieren ist nicht nur verboten sondern gleichzeitig auch eine Straftat, sofern es durch den Autor untersagt wurde :whistling: .


    Molaynox: So eine ähnliche Idee hatte ich auch mal. Ich hatte dabei aber eine andere Variante im Kopf. Also zuerst wird eine mitgelieferte verschlüsselte Zip-Datei via FileInstall nach @TempDir kopiert und dort auch entpackt. Die Entpackte Datei könnte z.B. eine Ini-Datei sein, das nur MD5-Hashwerte von gültigen Seriennummern enthält. Dadurch kann niemand alle Serials in die Finger bekommen. :D
    So, dann wird die eingegebene Serialnummer in einen MD5 Hashwert umgewandelt und mit den in der Ini-Datei verglichen. Stimmt einer mit den überein, ist das eben gültig. Wenn man jetzt nicht weiß, dass man das Programm dekompilieren kann, ist es schon ziemlich sicher ;)