Habe ein Script geschrieben, dass bei Start eine Seriennummer generiert. Die Produkt muss erst aktiviert werden, bevor man ein Programm vollständig nutzen kann (ohne Probezeit).
Das könnte man z.B. dazu verwenden, wenn man wirklich mal ein Script verkaufen will. Man muss es dann nur ein wenig umschreiben, dass dem Script eben von Anfang an eine Seriennummer zugeschrieben ist, die man dann durch das Aktivieren noch bestätigen muss.
Wenn es nicht aktiviert wird, befindet man sich in der Probezeit und kann das Programm nur 50x benutzen.
Seriennummer, Aktivierungscode und Restliche Probezeit werden in der Registry gespeichert.
Das Script ist an sehr vielen Ecken noch Verbesserungswürdig. Vorallem, die Methode der Aktivierung lässt zu wünschen übrig. Einen Sinn hat das Script im aktuellen Zustand nicht wirklich, das weis ich auch... Aber man kann ihm einen Sinn geben.
serial.au3
Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <Inet.au3>
#include <IE.au3>
Global $ran[16]
Global $key[16]
Dim $lefttime
Opt("GUIOnEventMode", 1)
$ser = GUICreate("Serial Beta Programm", 306, 186, 193, 125)
$Label1 = GUICtrlCreateLabel("Bevor sie das Programm nutzen können, müssen sie es aktivieren.", 8, 8, 292, 41)
$Label2 = GUICtrlCreateLabel("Ihre Seriennummer lautet: XXXXX - XXXXX - XXXXX", 8, 162, 292, 33)
$Label5 = GUICtrlCreateLabel("Seriennummer aktivieren?", 80, 52, 150, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Button3 = GUICtrlCreateButton("Aktivieren.", 80, 68, 145, 25, 0)
$Label4 = GUICtrlCreateLabel("Produkt kostenlos testen? ", 88, 100, 130, 17)
$Button2 = GUICtrlCreateButton("Produkt jetzt kostenlos testen.", 40, 124, 225, 25, 0)
GUISetState(@SW_SHOW)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
GUICtrlSetOnEvent($Button2, "freetest")
GUICtrlSetOnEvent($Button3, "act")
Opt("GUIOnEventMode", 1)
$serform = GUICreate("Aktivierungsformular", 274, 184, 193, 126)
$Group1 = GUICtrlCreateGroup("", 120, 0, 145, 141)
$name = GUICtrlCreateInput("Hans", 128, 16, 129, 21)
$nachname = GUICtrlCreateInput("Mustermann", 128, 40, 129, 21)
$street = GUICtrlCreateInput("Musterstraße 1", 128, 64, 129, 21)
$ort = GUICtrlCreateInput("Musterhausen / 12345", 128, 88, 129, 21)
$serialinput = GUICtrlCreateInput("xxxxx - xxxxx - xxxxx", 128, 112, 129, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("", 2, 10, 117, 27)
$namelabel = GUICtrlCreateLabel("Vorname", 8, 18, 53, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup("", 2, 34, 117, 27)
$nachnamelabel = GUICtrlCreateLabel("Nachname", 8, 42, 64, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("", 2, 81, 117, 27)
$ortlabel = GUICtrlCreateLabel("Wohnort / PLZ", 8, 89, 89, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group5 = GUICtrlCreateGroup("", 2, 57, 117, 27)
$streetlabel = GUICtrlCreateLabel("Straße", 8, 65, 41, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group6 = GUICtrlCreateGroup("", 2, 106, 117, 27)
$seriallabel = GUICtrlCreateLabel("Seriennummer", 8, 114, 100, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group7 = GUICtrlCreateGroup("", 2, 140, 269, 41)
$sendbutton = GUICtrlCreateButton("Abschicken", 6, 154, 123, 21, 0)
$abortbutton = GUICtrlCreateButton("Abbrechen", 142, 154, 123, 21, 0)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked3")
GUICtrlSetOnEvent($abortbutton, "CLOSEClicked3")
GUICtrlSetOnEvent($sendbutton, "sendact")
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_HIDE)
$serialop = IniRead("settings.ini", "Settings", "Opt1", "error")
If $serialop = "error" Then
MsgBox(64, "Schwerwiegender Fehler aufgetreten!", "Die Datei 'settings.ini' ist entweder beschädigt oder wurde gelöscht!"&@CRLF&"Sie können das Programm nur noch im Probemodus ausführen!")
Else
GUICtrlSetData($Label2, "Ihre Seriennummer lautet: "&$serialop)
GUICtrlSetData($serialinput, $serialop)
InetGet("http://serialsql.se.ohost.de/serials/"&$serialop&".ini", @AppDataDir&$serialop&".ini")
$inetactcheck = IniRead(@AppDataDir&$serialop&".ini", "Serials", "actkey", "actlost")
FileDelete(@AppDataDir&$serialop&".ini")
If $inetactcheck = "actlost" Then
MsgBox(64, "Produktaktivierung", "Sie haben das Programm noch nicht aktiviert und befinden sich derzeit in der Probezeit!")
Else
$sread = $serialop
For $i = 0 To 15
$s = $i + 1
$ran[$i] = StringMid($sread, $s, 1)
If $ran[$i] = "A" Or $ran[$i] = "2" Or $ran[$i] = "7" Then
$ran[$i] = "C"
ElseIf $ran[$i] = "B" Or $ran[$i] = "U" Or $ran[$i] = "W" Then
$ran[$i] = "6"
ElseIf $ran[$i] = "T" Or $ran[$i] = "9" Or $ran[$i] = "0" Then
$ran[$i] = "Z"
ElseIf $ran[$i] = "Q" Or $ran[$i] = "5" Or $ran[$i] = "V" Then
$ran[$i] = "X"
ElseIf $ran[$i] = "4" Or $ran[$i] = "3" Or $ran[$i] = "H" Then
$ran[$i] = "J"
ElseIf $ran[$i] = "E" Or $ran[$i] = "N" Or $ran[$i] = "8" Then
$ran[$i] = "P"
ElseIf $ran[$i] = "C" Or $ran[$i] = "X" Or $ran[$i] = "Y" Then
$ran[$i] = "8"
ElseIf $ran[$i] = "G" Or $ran[$i] = "F" Or $ran[$i] = "1" Then
$ran[$i] = "V"
ElseIf $ran[$i] = "O" Or $ran[$i] = "Z" Or $ran[$i] = "W" Then
$ran[$i] = "I"
ElseIf $ran[$i] = "6" Or $ran[$i] = "D" Or $ran[$i] = "I" Then
$ran[$i] = "K"
ElseIf $ran[$i] = "J" Or $ran[$i] = "K" Or $ran[$i] = "L" Then
$ran[$i] = "F"
ElseIf $ran[$i] = "M" Or $ran[$i] = "P" Or $ran[$i] = "R" Then
$ran[$i] = "5"
ElseIf $ran[$i] = "S" Then
$ran[$i] = "G"
EndIf
Next
$actcheckwithinet = $ran[0]&$ran[1]&$ran[2]&$ran[3]&$ran[4]&$ran[5]&$ran[6]&$ran[7]&$ran[8]&$ran[9]&$ran[10]&$ran[11]&$ran[12]&$ran[13]&$ran[14]&$ran[15]
If $inetactcheck = $actcheckwithinet Then
GUISetState(@SW_HIDE, $ser)
Run("notepad.exe")
FileDelete(@AppDataDir&$serialop&".ini")
Exit
Else
MsgBox(0, "Schwerwiegender Fehler!", "Der uns gespeicherte Aktivierungs-Code stimmt nicht mit der ihrer Seriennummer überein! Bitte wenden Sie sich an den Support!")
EndIf
EndIf
EndIf
Func freetest()
$testseterror = InetGet("http://serialsql.se.ohost.de/serials/"&$serialop&".ini", @AppDataDir&$serialop&".ini")
FileDelete(@AppDataDir&$serialop&".ini")
If $testseterror = 0 Then
$timeusable = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\SERIALACT", "Time")
If @error Then
$timeusable = 0
Else
$timeusable += 1
EndIf
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\SERIALACT", "Time", "REG_SZ", $timeusable)
$resttime = 30 - $timeusable
If $resttime <= 0 Then
MsgBox(64, "Probezeit abgelaufen", "Bitte aktivieren sie das Produkt! Ihre Probezeit ist abgelaufen.")
Else
MsgBox(64, "Produkt nicht aktiviert", "Ihr Produkt ist nicht aktiviert! Sie können es nur noch "&$resttime&"-Mal benutzen.")
FileDelete(@AppDataDir&$serialop&".ini")
Exit
EndIf
Else
FileDelete(@AppDataDir&$serialop&".ini")
Run("notepad.exe")
EndIf
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func act()
$inetseterror = InetGet("http://serialsql.se.ohost.de/serials/"&$serialop&".ini", @AppDataDir&$serialop&".ini")
FileDelete(@AppDataDir&$serialop&".ini")
If $inetseterror = 0 Then
GUISetState(@SW_SHOW, $serform)
Else
MsgBox(64, "Fehler aufgetreten", "Das Produkt wurde bereits aktiviert.")
EndIf
FileDelete(@AppDataDir&$serialop&".ini")
EndFunc
Func sendact()
$name2 = GUICtrlRead($name)
$nachname2 = GUICtrlRead($nachname)
$street2 = GUICtrlRead($street)
$ort2 = GUICtrlRead($ort)
$serialinput2 = GUICtrlRead($serialinput)
For $i = 0 To 15
$s = $i + 1
$ran[$i] = StringMid($serialinput2, $s, 1)
If $ran[$i] = "A" Or $ran[$i] = "2" Or $ran[$i] = "7" Then
$ran[$i] = "C"
ElseIf $ran[$i] = "B" Or $ran[$i] = "U" Or $ran[$i] = "W" Then
$ran[$i] = "6"
ElseIf $ran[$i] = "T" Or $ran[$i] = "9" Or $ran[$i] = "0" Then
$ran[$i] = "Z"
ElseIf $ran[$i] = "Q" Or $ran[$i] = "5" Or $ran[$i] = "V" Then
$ran[$i] = "X"
ElseIf $ran[$i] = "4" Or $ran[$i] = "3" Or $ran[$i] = "H" Then
$ran[$i] = "J"
ElseIf $ran[$i] = "E" Or $ran[$i] = "N" Or $ran[$i] = "8" Then
$ran[$i] = "P"
ElseIf $ran[$i] = "C" Or $ran[$i] = "X" Or $ran[$i] = "Y" Then
$ran[$i] = "8"
ElseIf $ran[$i] = "G" Or $ran[$i] = "F" Or $ran[$i] = "1" Then
$ran[$i] = "V"
ElseIf $ran[$i] = "O" Or $ran[$i] = "Z" Or $ran[$i] = "W" Then
$ran[$i] = "I"
ElseIf $ran[$i] = "6" Or $ran[$i] = "D" Or $ran[$i] = "I" Then
$ran[$i] = "K"
ElseIf $ran[$i] = "J" Or $ran[$i] = "K" Or $ran[$i] = "L" Then
$ran[$i] = "F"
ElseIf $ran[$i] = "M" Or $ran[$i] = "P" Or $ran[$i] = "R" Then
$ran[$i] = "5"
ElseIf $ran[$i] = "S" Then
$ran[$i] = "G"
EndIf
Next
$activateerror = InetGet("http://serialsql.se.ohost.de/serials/"&$serialinput2&".ini", @AppDataDir&$serialinput2&".ini")
FileDelete(@AppDataDir&$serialinput2&".ini")
If $activateerror = 0 Then
$activate = $ran[0]&$ran[1]&$ran[2]&$ran[3]&$ran[4]&$ran[5]&$ran[6]&$ran[7]&$ran[8]&$ran[9]&$ran[10]&$ran[11]&$ran[12]&$ran[13]&$ran[14]&$ran[15]
$oIE = _IECreate("http://serialsql.se.ohost.de/serials/serials.php?file="&_INetExplorerCapable($serialinput2)&"&serial="&_INetExplorerCapable($serialinput2)&"&actkey="&_INetExplorerCapable($activate)&"&name="&_INetExplorerCapable($name2)&"&nachname="&_INetExplorerCapable($nachname2)&"&wohnort="&_INetExplorerCapable($ort2)&"&street="&_INetExplorerCapable($street2), 0, 0 )
_IELoadWaitTimeout( 3000 )
_IELoadWait( $oIE )
_IEQuit( $oIE )
If @error = 1 Or @error = 3 Or @error = 4 Or @error = 6 Or @error = 8 Or @error = 9 Then
MsgBox(0, "Fehler aufgetreten!", "Es konnte keine Verbindung mit dem Server hergestellt werden! Bitte kontrollieren Sie, dass sie mit dem Internet verbunden sind und schalten Sie Ihre FireWall vorrübergehend aus!")
Else
MsgBox(64, "Aktivierungscode", "Vielen Dank für ihre Geduld! Ihre Software wurde aktiviert!")
EndIf
Else
MsgBox(64, "Fehler aufgetreten", "Das Produkt wurde bereits aktiviert.")
EndIf
FileDelete(@AppDataDir&$serialop&".ini")
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func CLOSEClicked()
FileDelete(@AppDataDir&$serialop&".ini")
Exit
EndFunc
Func CLOSEClicked3()
FileDelete(@AppDataDir&$serialop&".ini")
GUISetState(@SW_HIDE, $serform)
EndFunc
While 1
Sleep(100)
WEnd
Externer Aktivierungscode-Generator:
generator.au3
Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
Global $ran[16]
Global $key[16]
Opt("GUIOnEventMode", 1)
GUICreate("Activation Generator", 186, 146, 193, 125)
GUICtrlCreateLabel("Serienummer hier eingeben:", 8, 8, 161, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$sernum = GUICtrlCreateInput("Seriennummer...", 8, 32, 169, 21)
GUICtrlCreateLabel("Aktivierungs-Key:", 8, 96, 103, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$actkey = GUICtrlCreateInput("Aktivierungskey wird hier erstellt", 8, 112, 169, 21)
$gener = GUICtrlCreateButton("Aktivierungs-Key generieren!", 8, 64, 169, 25, 0)
GUISetState(@SW_Show)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
GUICtrlSetOnEvent($gener, "generate")
For $i = 0 To 15
$ran[$i] = Random(0, 9, 1)
$key[$i] = Random(1, 26, 1)
If $key[$i] = 1 Then
$key[$i] = "Q"
ElseIf $key[$i] = 2 Then
$key[$i] = "W"
ElseIf $key[$i] = 3 Then
$key[$i] = "E"
ElseIf $key[$i] = 4 Then
$key[$i] = "R"
ElseIf $key[$i] = 5 Then
$key[$i] = "T"
ElseIf $key[$i] = 6 Then
$key[$i] = "Z"
ElseIf $key[$i] = 7 Then
$key[$i] = "U"
ElseIf $key[$i] = 8 Then
$key[$i] = "I"
ElseIf $key[$i] = 9 Then
$key[$i] = "O"
ElseIf $key[$i] = 10 Then
$key[$i] = "P"
ElseIf $key[$i] = 11 Then
$key[$i] = "A"
ElseIf $key[$i] = 12 Then
$key[$i] = "S"
ElseIf $key[$i] = 13 Then
$key[$i] = "D"
ElseIf $key[$i] = 14 Then
$key[$i] = "F"
ElseIf $key[$i] = 15 Then
$key[$i] = "G"
ElseIf $key[$i] = 16 Then
$key[$i] = "H"
ElseIf $key[$i] = 17 Then
$key[$i] = "J"
ElseIf $key[$i] = 18 Then
$key[$i] = "K"
ElseIf $key[$i] = 19 Then
$key[$i] = "L"
ElseIf $key[$i] = 20 Then
$key[$i] = "Y"
ElseIf $key[$i] = 21 Then
$key[$i] = "X"
ElseIf $key[$i] = 22 Then
$key[$i] = "C"
ElseIf $key[$i] = 23 Then
$key[$i] = "V"
ElseIf $key[$i] = 24 Then
$key[$i] = "B"
ElseIf $key[$i] = 25 Then
$key[$i] = "N"
ElseIf $key[$i] = 26 Then
$key[$i] = "M"
EndIf
$koz = Random(0, 1, 1)
$kozcheck = $koz + $ran[$i]
If $kozcheck = $ran[$i] + 1 Then
$ran[$i] = $key[$i]
Else
$ran[$i] = $ran[$i]
EndIf
Next
$serialop = $ran[0]&$ran[1]&$ran[2]&$ran[3]&$ran[4]&$ran[5]&$ran[6]&$ran[7]&$ran[8]&$ran[9]&$ran[10]&$ran[11]&$ran[12]&$ran[13]&$ran[14]&$ran[15]
GUICtrlSetData($sernum, $serialop)
IniWrite("settings.ini", "Settings", "Opt1", $serialop)
While 1
Sleep(100)
WEnd
Func CLOSEClicked()
Exit
EndFunc
Func generate()
Local $ran[16]
$sread = GUICtrlRead($sernum)
For $i = 0 To 15
$s = $i + 1
$ran[$i] = StringMid($sread, $s, 1)
If $ran[$i] = "A" Or $ran[$i] = "2" Or $ran[$i] = "7" Then
$ran[$i] = "C"
ElseIf $ran[$i] = "B" Or $ran[$i] = "U" Or $ran[$i] = "W" Then
$ran[$i] = "6"
ElseIf $ran[$i] = "T" Or $ran[$i] = "9" Or $ran[$i] = "0" Then
$ran[$i] = "Z"
ElseIf $ran[$i] = "Q" Or $ran[$i] = "5" Or $ran[$i] = "V" Then
$ran[$i] = "X"
ElseIf $ran[$i] = "4" Or $ran[$i] = "3" Or $ran[$i] = "H" Then
$ran[$i] = "J"
ElseIf $ran[$i] = "E" Or $ran[$i] = "N" Or $ran[$i] = "8" Then
$ran[$i] = "P"
ElseIf $ran[$i] = "C" Or $ran[$i] = "X" Or $ran[$i] = "Y" Then
$ran[$i] = "8"
ElseIf $ran[$i] = "G" Or $ran[$i] = "F" Or $ran[$i] = "1" Then
$ran[$i] = "V"
ElseIf $ran[$i] = "O" Or $ran[$i] = "Z" Or $ran[$i] = "W" Then
$ran[$i] = "I"
ElseIf $ran[$i] = "6" Or $ran[$i] = "D" Or $ran[$i] = "I" Then
$ran[$i] = "K"
ElseIf $ran[$i] = "J" Or $ran[$i] = "K" Or $ran[$i] = "L" Then
$ran[$i] = "F"
ElseIf $ran[$i] = "M" Or $ran[$i] = "P" Or $ran[$i] = "R" Then
$ran[$i] = "5"
ElseIf $ran[$i] = "S" Then
$ran[$i] = "G"
EndIf
Next
$activate = $ran[0]&$ran[1]&$ran[2]&$ran[3]&$ran[4]&$ran[5]&$ran[6]&$ran[7]&$ran[8]&$ran[9]&$ran[10]&$ran[11]&$ran[12]&$ran[13]&$ran[14]&$ran[15]
GUICtrlSetData($actkey, $activate)
EndFunc
serials.php (Nur benötigt wenn ihr es auf eurem server testen wollt. Dazu muss der Code angepasst werden)
Spoiler anzeigen
<?php
$file = fopen($_GET['file'].".ini", "a+");
fwrite ($file, "\n");
fwrite ($file, "[Serials]");
fwrite ($file, "\n");
fwrite ($file, "serial=");
fwrite ($file, $_GET['serial']);
fwrite ($file, "\n");
fwrite ($file, "actkey=");
fwrite ($file, $_GET['actkey']);
fwrite ($file, "\n");
fwrite ($file, "name=");
fwrite ($file, $_GET['name']);
fwrite ($file, "\n");
fwrite ($file, "nachname=");
fwrite ($file, $_GET['nachname']);
fwrite ($file, "\n");
fwrite ($file, "wohnort=");
fwrite ($file, $_GET['wohnort']);
fwrite ($file, "\n");
fwrite ($file, "street=");
fwrite ($file, $_GET['street']);
fclose($file);
?>
Alles anzeigen
Wäre cool, wen ihr dabei helfen könntet das Script auszubauen und zu vervollständigen.
Wer das wirklich nutzen möchte, sollte die Art und Weise, wie der Aktivierungscode generiert wird verändern, ansonsten macht das wenig Sinn.
### Updates/Fixes.................................................
* 21.06.2008:
- Es wurde ein Fehler behoben, der ein doppeltes einschreiben in die *.ini auf dem Webspace ermöglichte.
- Es wurde ein Form-Fehler behoben.
- Es wurde ein Fehler behoben, der das Script nach Ablauf der 30 Probe-Tests nicht richtig deaktiviert hat.
* 20.06.2008:
- Die Aktivierungsdaten werden nun in einer, durch eine *.php Datei erstellte *.ini Datei, auf einem WebSpace gespeichert.
- Arbeitsprinzip überarbeitet.
...................................................................###
## Info: Wenn ihr das Script aktiviert, sind eure eingegebenen Daten auf: http://serialsql.se.ohost.de/serials/ frei zugänglich.