keygen

  • ich arbeite grade an einem programm das überprüft ob ein key vorhanden ist und nur dann startet
    ich bräuchte also einen keygen der einen key nach einem algorythmus erstellt und eine funktion die überprüft ob der key gültig ist

    vg
    JuraX

  • Sowas hab ich mal gemacht.

    Serial-Create:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ; by Jautois 2008

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

    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    Global $pInputSerial
    Global $sWinTitle = "Serial-Generator - Jautois v1.0"
    Global $iPars[3] = [Random(111, 999, 1), Random(111, 999, 1), Random(111, 999, 1)], $iFSNA[4]
    Global $sComboKeys[2] = ["HDD - Hard Drive Disk Serial", "Random Number"]
    Global $sComboFuns[2] = ["_GenerateFSNFromHDD", "_GenerateFSNFromRandomNumber"]
    Global $sTemp = ""
    Global $iCurPars[4] = ["", $iPars[0], $iPars[1], $iPars[2]]

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

    $hWindow = GUICreate($sWinTitle, 322, 170)
    GUISetIcon("shell32.dll", -45)
    $pInputSerial = GUICtrlCreateInput("", 8, 104, 305, 21)
    $pButtonGenerate = GUICtrlCreateButton("Generate", 8, 128, 153, 33, 0)
    $pLabelSeeder = GUICtrlCreateLabel("Seeder: " & $iPars[0] & " - " & $iPars[1] & " - " & $iPars[2], 8, 8, 200, 17)
    $pCombo = GUICtrlCreateCombo("", 8, 80, 305, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
    For $i = 0 To UBound($sComboKeys) - 1
    $sTemp &= $sComboKeys[$i] & "|"
    Next
    GUICtrlSetData(-1, $sTemp)
    Global $pCheckboxSeeder = GUICtrlCreateCheckbox("Seeder constant", 8, 32, 105, 17)
    $pInputSerialNum = GUICtrlCreateInput("10", 75, 55, 73, 21)
    $pCheckboxMSN = GUICtrlCreateCheckbox("Generate", 8, 56, 65, 17)
    GUICtrlCreateLabel("Serials", 152, 59, 35, 17)
    $pButtonInfo = GUICtrlCreateButton("Info", 240, 6, 73, 25)
    GUISetState(@SW_SHOW)

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

    While 1
    If GUICtrlRead($pCheckboxMSN) = 1 Then
    GUICtrlSetState($pCheckboxSeeder, $GUI_CHECKED)
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $pButtonGenerate
    $sT = GUICtrlRead($pCombo)
    $iFunNum = _ArraySearch($sComboKeys, $sT)
    If $iFunNum <> -1 Then
    Call($sComboFuns[$iFunNum])
    Else
    MsgBox(16, "Info - Error", "Please select a Seedersource!")
    EndIf
    Case $pButtonInfo
    MsgBox(1, "Info", "Seeder - With these 3 numbers the serials were generated. They will later need to test the validity of the serials. Serials apply only to the incorporated seeder. " & @CRLF & @CRLF & "[Checkbox] Seeder constant - The Seeder remain constant to create several Serials manually.")
    EndSwitch
    WEnd

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

    Func _GenerateSerial($iSeed = 0, $iFiveDataSeed = 0, $iSevenDataSeed = 0, $iNineDataSeed = 0)
    Local $bDone, $iDataF, $iDataN, $iDataS

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

    If $iFiveDataSeed <= 2 Or $iSevenDataSeed <= 2 Or $iNineDataSeed <= 2 Then
    GUICtrlSetData($pInputSerial, "0000-0000-0000")
    MsgBox(16, "Info - Error", "Invalid Seeder Values!")
    Else
    $bDone = False
    $iDataF = ($iSeed * Random(2, 20, 1)) + 5
    Sleep(100)
    $iDataS = ($iSeed * Random(2, 20, 1)) + 7
    Sleep(100)
    $iDataN = ($iSeed * Random(2, 20, 1)) + 9

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

    While Not $bDone
    $bDone = True
    If Mod($iDataF, $iFiveDataSeed) <> 0 Then
    $iDataF = $iDataF - 1
    $bDone = False
    EndIf
    If Mod($iDataS, $iSevenDataSeed) <> 0 Then
    $iDataS = $iDataS - 1
    $bDone = False
    EndIf
    If Mod($iDataN, $iNineDataSeed) <> 0 Then
    $iDataN = $iDataN - 1
    $bDone = False
    EndIf
    WEnd
    $sSerial = $iDataF & "-" & $iDataS & "-" & $iDataN
    GUICtrlSetData($pInputSerial, $sSerial)
    Return $sSerial
    EndIf
    EndFunc ;==>_GenerateSerial

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

    Func _GenerateFSNFromRandomNumber()
    $sSeederCatch = "Random Number"

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

    $iStateSeeder = GUICtrlRead($pCheckboxSeeder)
    $iStateMSN = GUICtrlRead($pCheckboxMSN)

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

    If $iStateMSN = 1 Then
    $iSerialsNum = GUICtrlRead($pInputSerialNum)
    If Int($iSerialsNum) <= 0 Then
    MsgBox(16, "Info - Error", "Not a valid entry!")
    Else
    $sPath = FileSaveDialog("Save Serials ...", @DesktopDir, "Text (*.txt)")
    If Not @error Then
    $sPath &= ".txt"
    For $i = 1 To 3
    $iFSNA[$i] = Random(111, 999, 1)
    $iCurPars[$i] = $iFSNA[$i]
    Next
    GUICtrlSetData($pLabelSeeder, "Seeder: " & $iFSNA[1] & " - " & $iFSNA[2] & " - " & $iFSNA[3])
    EndIf
    FileWriteLine($sPath, "Serials Created With " & $sWinTitle)
    FileWriteLine($sPath, "-------------")
    FileWriteLine($sPath, "Catched By: " & $sSeederCatch)
    FileWriteLine($sPath, "Seeder: " & $iCurPars[1] & " - " & $iCurPars[2] & " - " & $iCurPars[3])
    FileWriteLine($sPath, "-------------")
    FileWriteLine($sPath, "")
    ProgressOn("Generating " & $iSerialsNum & " Serials", "Serial 1 from 100", "0 %")
    $iTimer = TimerInit()
    For $i = 1 To $iSerialsNum
    $sTempSerial = _GenerateSerial(Random(999, 99999, 1), $iCurPars[1], $iCurPars[2], $iCurPars[3])
    ProgressSet(($i / $iSerialsNum) * 100, Round(($i / $iSerialsNum) * 100, 2) & " % - " & $i & "/" & $iSerialsNum, "Serial: " & $sTempSerial)
    FileWriteLine($sPath, $sTempSerial)
    Next
    ProgressOff()
    $iTimerDiff = TimerDiff($iTimer)
    FileWriteLine($sPath, "")
    FileWriteLine($sPath, "Created in: " & Round($iTimerDiff / 1000, 2) & " Seconds")
    MsgBox(64, "Info", "Serials generated successfully!")
    Run('explorer "' & $sPath & '"')
    EndIf
    Else
    If $iStateSeeder = 4 Then
    For $i = 1 To 3
    $iFSNA[$i] = Random(111, 999, 1)
    $iCurPars[$i] = $iFSNA[$i]
    Next
    GUICtrlSetData($pLabelSeeder, "Seeder: " & $iFSNA[1] & " - " & $iFSNA[2] & " - " & $iFSNA[3])
    _GenerateSerial(Random(999, 99999, 1), $iCurPars[1], $iCurPars[2], $iCurPars[3])
    Else
    _GenerateSerial(Random(999, 99999, 1), $iCurPars[1], $iCurPars[2], $iCurPars[3])
    EndIf
    EndIf

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

    EndFunc ;==>_GenerateFSNFromRandomNumber

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

    Func _GenerateFSNFromHDD()
    Global $iHDD[1000], $z = 0, $iRandom, $sSeederCatch = "HDD"

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

    $iStateSeeder = GUICtrlRead($pCheckboxSeeder)
    $iStateMSN = GUICtrlRead($pCheckboxMSN)

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

    If $iStateMSN = 1 Then
    $iSerialsNum = GUICtrlRead($pInputSerialNum)
    If Int($iSerialsNum) <= 0 Then
    MsgBox(16, "Info - Error", "Not a valid entry!")
    Else
    $sPath = FileSaveDialog("Save Serials ...", @DesktopDir, "Text (*.txt)")
    If Not @error Then
    $sPath &= ".txt"
    $sHDDn = DriveGetDrive("all")
    If Not @error Then
    If $sHDDn[0] < 3 Then
    MsgBox(16, "Info - Error", "There must be at least 3 harddrives exist!")
    Else
    ReDim $iHDD[$sHDDn[0] + 1]
    For $i = 1 To $sHDDn[0]
    $iTemp = DriveGetSerial($sHDDn[$i])
    If $iTemp <> "" Then
    $iHDD[$i - $z] = $iTemp
    Else
    $z = $z + 1
    ReDim $iHDD[$sHDDn[0] + 1 - $z]
    EndIf
    Next
    EndIf
    For $i = 1 To 3
    $iFSNA[$i] = StringLeft($iHDD[Random(1, UBound($iHDD) - 1, 1)], 3)
    $iCurPars[$i] = $iFSNA[$i]
    Next
    GUICtrlSetData($pLabelSeeder, "Seeder: " & $iFSNA[1] & " - " & $iFSNA[2] & " - " & $iFSNA[3])
    EndIf
    FileWriteLine($sPath, "Serials Created With " & $sWinTitle)
    FileWriteLine($sPath, "-------------")
    FileWriteLine($sPath, "Catched By: " & $sSeederCatch)
    FileWriteLine($sPath, "Seeder: " & $iCurPars[1] & " - " & $iCurPars[2] & " - " & $iCurPars[3])
    FileWriteLine($sPath, "-------------")
    FileWriteLine($sPath, "")
    ProgressOn("Generating " & $iSerialsNum & " Serials", "", "0 %")
    $iTimer = TimerInit()
    For $i = 1 To $iSerialsNum
    $sTempSerial = _GenerateSerial(Random(999, 99999, 1), $iCurPars[1], $iCurPars[2], $iCurPars[3])
    ProgressSet(($i / $iSerialsNum) * 100, Round(($i / $iSerialsNum) * 100, 2) & " % - " & $i & "/" & $iSerialsNum, "Serial: " & $sTempSerial)
    FileWriteLine($sPath, $sTempSerial)
    Next
    ProgressOff()
    $iTimerDiff = TimerDiff($iTimer)
    FileWriteLine($sPath, "")
    FileWriteLine($sPath, "Created in: " & Round($iTimerDiff / 1000, 2) & " Seconds")
    MsgBox(64, "Info", "Serials generated successfully!")
    Run('explorer "' & $sPath & '"')
    EndIf
    EndIf
    Else
    If $iStateSeeder = 4 Then
    $sHDDn = DriveGetDrive("all")
    If Not @error Then
    If $sHDDn[0] < 3 Then
    MsgBox(16, "Info - Error", "There must be at least 3 harddrives exist!")
    Else
    ReDim $iHDD[$sHDDn[0] + 1]
    For $i = 1 To $sHDDn[0]
    $iTemp = DriveGetSerial($sHDDn[$i])
    If $iTemp <> "" Then
    $iHDD[$i - $z] = $iTemp
    Else
    $z = $z + 1
    ReDim $iHDD[$sHDDn[0] + 1 - $z]
    EndIf
    Next
    EndIf
    For $i = 1 To 3
    $iFSNA[$i] = StringLeft($iHDD[Random(1, UBound($iHDD) - 1, 1)], 3)
    $iCurPars[$i] = $iFSNA[$i]
    Next
    GUICtrlSetData($pLabelSeeder, "Seeder: " & $iFSNA[1] & " - " & $iFSNA[2] & " - " & $iFSNA[3])
    _GenerateSerial(Random(999, 99999, 1), $iCurPars[1], $iCurPars[2], $iCurPars[3])
    EndIf
    Else
    _GenerateSerial(Random(999, 99999, 1), $iCurPars[1], $iCurPars[2], $iCurPars[3])
    EndIf
    EndIf
    EndFunc ;==>_GenerateFSNFromHDD

    [/autoit]

    Serial-Check:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ; by Jautois 2008

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

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Global $iCurPars[4]

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

    $hWindow = GUICreate("Serial-Generator-Checker - Jautois v1.0", 355, 114)
    GUISetIcon("shell32.dll", -45)
    $pInputSerial = GUICtrlCreateInput("", 8, 48, 305, 21)
    $pButtonCheck = GUICtrlCreateButton("Check", 8, 72, 153, 33, 0)
    GUICtrlCreateLabel("Seeder", 8, 16, 38, 17)
    $pInputParam1 = GUICtrlCreateInput("", 53, 13, 33, 21)
    $pInputParam2 = GUICtrlCreateInput("", 101, 13, 33, 21)
    $pInputParam3 = GUICtrlCreateInput("", 149, 13, 33, 21)
    $IconCheckW = GUICtrlCreateIcon("shell32.dll", -132, 320, 48, 16, 16, BitOR($SS_NOTIFY, $WS_GROUP))
    GUICtrlSetState(-1, $GUI_HIDE)
    $IconCheckR = GUICtrlCreateIcon("shell32.dll", -145, 320, 48, 16, 16, BitOR($SS_NOTIFY, $WS_GROUP))
    GUICtrlSetState(-1, $GUI_HIDE)
    GUICtrlCreateLabel("-", 92, 15, 7, 17)
    GUICtrlCreateLabel("-", 140, 15, 7, 17)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $pButtonCheck
    $iCurPars[1] = GUICtrlRead($pInputParam1)
    $iCurPars[2] = GUICtrlRead($pInputParam2)
    $iCurPars[3] = GUICtrlRead($pInputParam3)

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

    $bCheck = _CheckSerial(GUICtrlRead($pInputSerial), $iCurPars[1], $iCurPars[2], $iCurPars[3])
    If $bCheck = False Then
    GUICtrlSetState($IconCheckR, $GUI_HIDE)
    GUICtrlSetState($IconCheckW, $GUI_SHOW)
    Else
    GUICtrlSetState($IconCheckW, $GUI_HIDE)
    GUICtrlSetState($IconCheckR, $GUI_SHOW)
    EndIf
    EndSwitch
    WEnd

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

    Func _CheckSerial($sSerial = "", $iFive = 0, $iSeven = 0, $iNine = 0)
    Local $iDataF, $iDataN, $iDataS

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

    If $iFive <= 2 Or $iSeven <= 2 Or $iNine <= 2 Then
    Return False
    Else
    $sSD = StringSplit($sSerial, "-")
    If $sSD[0] = 3 Then
    $iDataF = $sSD[1]
    $iDataS = $sSD[2]
    $iDataN = $sSD[3]

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

    If $iDataF <= 2 Or $iDataS <= 2 Or $iDataN <= 2 Then
    Return False
    EndIf
    If Mod($iDataF, $iFive) == 0 And Mod($iDataS, $iSeven) == 0 And Mod($iDataN, $iNine) == 0 Then
    Return True
    Else
    Return False
    EndIf
    EndIf
    EndIf
    EndFunc ;==>_CheckSerial

    [/autoit]

    Vielleicht kannst du dir ja was abschaun ;)

  • Ich hatte auch mal sowas ähnliches als UDF gemacht.
    Du findest sie im Anhang.

    Falls du Beispiele brauchst, sag bescheid.
    Der Clou: Die Keys werden mit einer TXT-File aus dem Internet verglichen, die du auf einem Webspace gelagert hast.

    Simple, aber nicht sicher. Du kannst doch nicht einfach Keys in einer .txt Datei lagern? :pinch: Jeder kann ja diese Datei öffnen. Da hilft nur Encode & Decode :)

    Empfehle die Version von Jautois! :)

  • Also ich hatte mal "testhalber" das Ganze mit einer Sql-Datenbank ausprobiert. Hatte mir 5000 Keys generieren lassen und hab diese dann per "Copy" & "Paste" in einem Rutsch in die Datenbank eingetragen. Im Programm habe ich dann eine Php-Datei aufgerufen, die vorerst die Gültigkeit des Keys prüft und dann, falls dieser valide, ihn aus der Datenbank löscht. Dazu habe ich die Funktion aus der Datei "Serial-Check.au3", welche die Gültigkeit des Keys prüft, in Php übersetzt (Die Funktion extra nicht im Quellcode des Programm gelassen, da dies eine Sicherheitslücke darstellt).

  • vielen vielen dank

    das mit dem php werde ich übernehmen wenn mein webspace freigeschalet wird
    JuraX