_runOnlyOnThis() UDF

    • Offizieller Beitrag

    Hi,

    ich habe eine Funktion geschrieben, die eine Ausführung der Skript.exe auf bestimmte Kriterien beschränkt. Dies bewirkt, dass eine aktivierte Skript.exe nach einer Kopie nicht auf anderen PCs / etc. ausgeführt werden kann.

    Die UDF (user defined function) schreibt bei der Aktivierung einen generierten verschlüsselten Code in die Registry. Anschließend wird
    dieser Code im Skript entschlüsselt und überprüft. Bei keiner Übereinstimmung wird das Skript beendet.

    Spoiler anzeigen
    [autoit]


    #include <String.au3>

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

    ; Added the option to specify whether it runs only on this windows, or this harddrive.
    If _runOnlyOnThis("", "", -1, "test", 1) <> 1 Then Exit (0)

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

    ; Put your script code below here

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

    MsgBox(64, "Secured Program", "Yeah, the secured main-program started!" & _
    @CRLF & @CRLF & "Thanks & and have fun!" & @CRLF & @CRLF & "Mega")

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

    ;===============================================================================
    ;
    ; Function Name: _runOnlyOnThis ...
    ; Description: Activation by parameter sets a unique registry key
    ; After a successful activation, checks for the regkey
    ; If correct go on, else Exit(0)
    ;
    ; Parameter(s): (Script) First time, the activation key
    ; (Func) $s_KeyName = RegKeyName
    ; $s_EncryptPassword = Encryption passphrase
    ; $i_EncryptLevel = Level (quantity)
    ; $s_ActivationKey = key which starts the func
    ; $i_Option (default =1)
    ;
    ; _runOnlyOnThis ... $i_Option
    ; 1 = Windows installtion (Date)
    ; 2 = HardDrive
    ;
    ; Return Value(s): On Success - Returns 1
    ; On Failure - Returns -1 RegWrite Problem,
    ; Returns -2 Not activated,
    ; Returns -3 Wrong registry key
    ; Returns -4 Couldn't DriveGetSerial
    ;
    ; Note(s): Basically useful to prevent user starting the script on
    ; non activated PCs
    ; String.au3 has to be included
    ;
    ; Author(s): Thorsten Meger
    ;
    ;===============================================================================
    Func _runOnlyOnThis($s_KeyName, $s_EncryptPassword, $i_EncryptLevel, $s_ActivationKey, $i_option = 1)

    If $s_KeyName = "" Then $s_KeyName = "Version"
    If $s_EncryptPassword = "" Then $s_EncryptPassword = "thisPc"
    If $i_EncryptLevel = -1 Then $i_EncryptLevel = 2
    If $s_ActivationKey = "" Then $s_ActivationKey = "activate"
    If $i_option <> 1 Or $i_option <> 2 Then $i_option = 1

    If $i_option = 1 Then
    Local $stringToCrypt = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "InstallDate")
    ElseIf $i_option = 2 Then
    Local $stringToCrypt = DriveGetSerial(StringLeft(@SystemDir, 3))
    If @error = 1 Then Return -4
    EndIf

    Local $crypted = _StringEncrypt(1, $stringToCrypt, $s_EncryptPassword, $i_EncryptLevel)
    If $cmdLine[0] > 0 And $cmdLine[1] = $s_ActivationKey Then
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\" & StringLeft(@ScriptName, StringLen(@ScriptName) - 4), $s_KeyName, "REG_SZ", _
    StringTrimLeft($crypted, 4))
    Return -1

    ElseIf RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\" & StringLeft(@ScriptName, StringLen(@ScriptName) - 4), $s_KeyName) = "" Then
    MsgBox(64, "Error", "You are not allowed to run this program!", 5)
    Return -2

    ElseIf RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\" & StringLeft(@ScriptName, StringLen(@ScriptName) - 4), $s_KeyName) <> _
    (StringTrimLeft($crypted, 4)) Then
    MsgBox(64, "Error", "You are not allowed to run this program on this computer!", 5)
    Return -3
    EndIf
    Return 1
    EndFunc ;==>_runOnlyOnThis

    [/autoit]


    Aktivierungsskript:

    Spoiler anzeigen
    [autoit]

    _activateScript("RunOnlyOnThisPc.exe", "test")

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

    ;===============================================================================
    ;
    ; Function Name: _activateScript
    ; Description: Activates the script which is protected by _runOnlyOnThisPC
    ;
    ; Parameter(s): $s_programName = name (script.exe)
    ; $s_ActivationKey = key which starts the func
    ;
    ; Return Value(s): Non
    ;
    ; Note(s): Basically useful to start(activate) the _runOnlyOnThisPC
    ; protected script
    ; Should be on own script.exe in the same folder!
    ;
    ; Author(s): Thorsten Meger
    ;
    ;===============================================================================
    Func _activateScript($s_programName, $s_ActivationKey)
    Run(@ScriptDir & "\" & $s_programName & " " & $s_ActivationKey)
    Local $cmdfile
    FileDelete(@TempDir & "\scratch.cmd")
    $cmdfile = ':loop' & @CRLF _
    & 'del "' & @ScriptFullPath & '"' & @CRLF _
    & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
    & 'del ' & @TempDir & '\scratch.cmd'
    FileWrite(@TempDir & "\scratch.cmd", $cmdfile)
    Run(@TempDir & "\scratch.cmd", @TempDir, @SW_HIDE)
    EndFunc;==>_activateScript

    [/autoit]

    Mit der Bitte um Feedback...

    So long,

    Mega

    bernd670: Hab mal die PHP-Tags durch AutoIt-Tags ersetzt.

    • Offizieller Beitrag

    Hallo

    aslo, wie schon gesagt bin ich ein aufmerksamer englishen forum leser und da habs ich schon ausprobiert! ich benutze aber mal davon abgesehen, fast immer copy&paste da ich ein "kurzdrinbleib" ordner habe wo 14 au3 dateien drin sind die darauf wartet voll gemacht zu werden ;)

    Mfg Spider

  • Nützliche sache aber ich versteh es nicht so ganz, ich möchte dammit mein eigenes script sichern (browsergame bot) aber ich weis nicht wo ich das einfügen soll

  • Hallo,

    das Script funzt prima. Wie könnte man realisieren das man bei erfolgreicher Aktivierung eine Mail bekommt ? Ich habe mir mal das XProtec angeschaut, habe das aber nicht wirklich zum laufen bekommen.

  • Finde ich gut, nur zwei Fragen habe ich.
    Erstens, ich müsste also immer wieder aktivieren wenn ich meinen PC/Notebook neu installiere?
    Zweitens, wenn erstens zutrifft, kann ich also eine VM nehmen, einmal aktiviren und die VM weiter geben? Das sind nur so mal meine ersten Gedanken gewesen :)

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

    • Offizieller Beitrag

    Hi,

    klar - man kann sehr vieles. Aber was nützt dir das? Wie stellst du dir den Ablauf insgesamt vor?

    Edit: In der Kaffeepause hat McPoldy noch was geschrieben. :D

    Also, die Funktion bietet nicht das was X-Protect bietet. Das Konzept sieht eigentlich vor, dass man selbst die Anwendung aktiviert und nicht der "Kunde" das Aktivierungsskript besitzt. Weil dann kann man dieses ja kopieren und immer wieder benutzen.

    Mega

  • Einfach um eine Übersicht zu haben, wie oft das Script installiert wurde. Ich stricke da was zusammen, was in einer Firma später eingesetzt wird.

  • Nun ich hätte gerne eine Übersicht wie oft das Script installiert wurde, Internet ist vorhanden und frei nutzbar. Wenn´s Netz mal nicht da ist soll´s trotzdem laufen, soll ja nicht so sein das es dann überhaupt nicht mehr funktioniert. Hätte nun gedacht das man mit der Aktivierung zum Beispiel es so machen kann das man eine Mail bekommt.

    • Offizieller Beitrag

    Okay, du willst also keinen bestimmten Vorteil dadurch erwirken, sondern lediglich einen Mailversand versuchen wenn es jemand aktiviert.
    Dann würde ich am besten einen SPAM-Account nutzen die Emailsendefunktion einbauen und die Daten im Code fest hinterlegen. Obfuscator laufen lassen, sodass die Daten nicht ganz so einfach aus dem Code zu entnehmen sind und fertig.

    Mega

  • Dazu zwei vielleicht doofe Fragen:

    - Emailsendefunktionen --> von AutoIt ?
    - Obfuscator --> öhm ... das "verschlüsselt" dann das Script ?

    Ich habe gerade mal Google gefragt im englischen Forum gibt es ja vieles zum Thema Obfuscator ... das included man in sein Script, compilen fertig und schon hat man es schwerer zu decompilen (und Passwörter sind einigermaßen sicher)?

  • Super Tips. Habe alles zusammen und nun mache ich folgendes: Über die Aktivierung bekomme ich eine Mail. Klappt prima.