Serialkey Generator - Database upload.

  • Hi,

    habe vor 2-3 Jahren schonmal etwas ähnliches gebastelt, was extern gehostet wurde und nun nicht mehr da ist ^^.
    Bin gerade an einem etwas größerem Projekt, wobei dies ein Feature sein wird, welches ich benötige.


    - Generieren von 6x6stelligen Seriennummern (Groß & Kleinbuchstaben sowie Zahlen)
    - Anzeige in Listview
    - direkter MySQL Datenbankupload [Seriennummer,Used]
    - Editierbare Config für Zugangsdaten zum MySQL Server

    Die Usedflag sitzt standardmäßig auf '0' für unbenutzt.

    Screenshots

    Spoiler anzeigen

    Die Abfrage ob der Key benutzt wird und die Änderung in der Datenbank:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.9.0 (beta)
    Author: Kev.K

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <mysql.au3>

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

    trialcheck()

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

    GUICreate("Produkt Activation",300,200)
    GuictrlcreateLabel("Please activate your Product with the purchased license",15,20,300,25)
    $serial = GuictrlcreateInput("",10,50,280,25)
    $activate = GuictrlcreateButton("Activate",20,150,100,25)
    $trial = GuictrlcreateButton("Trial",180,150,100,25)
    $purchase = GuictrlcreateButton("Purchase now !",100,100,100,25)
    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    case $purchase
    ShellExecute("http://www.paypal.com")
    case $activate
    activate()
    case $trial
    trial_Date()
    Endswitch
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

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

    func activate()
    $username = "root"
    $pass = ""
    $host = "localhost"
    $db = "serialdb"

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

    _MySQL_InitLibrary()
    $MysqlConn = _MySQL_Init()

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

    $connected = _MySQL_Real_Connect($MysqlConn,$host,$username,$pass,$db)
    If $connected = 0 Then Exit MsgBox(16, 'Connection Error', _MySQL_Error($MysqlConn))

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

    $qur = "select `serial` from serialdb where (serial) =(" & "'" & Guictrlread($serial) & "'" & ")"
    ;ClipPut($qur)
    $solution = _MySQL_Real_Query($MysqlConn, $qur)
    $res = _MySQL_Store_Result($MysqlConn)
    $rows = _MySQL_Num_Rows($res)

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

    if $rows = "1" Then
    $usedcheck = "select `used` from serialdb where (serial,used) =(" & "'" & Guictrlread($serial) & "'" & ",0)"
    ;ClipPut($usedcheck)
    $solution = _MySQL_Real_Query($MysqlConn, $usedcheck)
    $res = _MySQL_Store_Result($MysqlConn)

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

    $fields = _MySQL_Num_Fields($res)

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

    $x = _MySQL_Num_Rows($res)
    if $x = "1" Then
    $quer = "UPDATE `serialdb` SET used =" & '"' & 1 & '"' & " WHERE `serial` = (" & "'" & Guictrlread($serial) & "'" & ")"
    Clipput($quer)
    _MySQL_Real_Query($MysqlConn, $quer)
    Traytip("Activation","Activation complete ! Thanks for purchasing the Product",2,1)
    _startProg()
    Endif
    Else
    msgbox(0,"Error","The Productkey you have entered is unavailable !")
    Endif
    Endfunc

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

    Func _startProg()
    msgbox(0,"","start Prog here")
    Endfunc

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

    func trial_date()
    $date = @MDAY & ":" & @MON & ":" & @YEAR
    $xs = RegWrite("HKEY_CURRENT_USER\SOFTWARE\YourTOOL\", "Registration", "REG_SZ",$date)
    Msgbox(0,"Trial Active","Your Trial is now running for 1 Month")
    Endfunc

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

    func trialcheck()
    $date = @MDAY & ":" & @MON & ":" & @YEAR
    $regread = RegRead("HKEY_CURRENT_USER\SOFTWARE\YourTOOL\","Registration")
    ;selfcreating Timediff.
    Endfunc

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

    [Blockierte Grafik: http://img803.imageshack.us/img803/928/unbenanntpn.png]

    Falls wer fragen hat, einfach her damit :)

  • Hi,
    Muss mal fies sein:

    Methode 1:

    1.1 Den Aktivierungs-Server mittels mitsniffen ermitteln.
    1.2 Adresse mittels HOST-Datei (/etc/hosts) auf localhost (127.0.0.1) leiten.
    1.3 Lokal einen MySQL-Server starten.
    1.4 Tabelle so einrichten wie der echte Server (Format wissen wir dank 1.1)
    1.5 Einen ausgedachten Key eintragen
    1.6 Der Tabelle die Schreibrechte nehmen.
    Voila

    Methode 2:

    2.1 EXE-Datei mit OllyDbg öffnen
    2.2 Das Programm einmal komplett durchdebuggen.
    2.3 Den dazugehörigen Jump fürs Abfragen finden.
    2.4 den Jump NOP'en
    Voila

    Wie gesagt, mir fallen da noch ein paar Möglichkeiten ein.
    Nicht falsch verstehen, Ich persönlich finde die Idee klasse :)

  • Methode 2 wird wohl so nicht klappen, da AutoIt ja interpretiert wird. Stattdessen einfach decompilen?
    Außerdem wird es kein JMP sein, der Genoppt werden muss. Das ist abhängig von je oder jne und dann zu welcher Routine gesprungen wird.

  • Kurze Frage:
    die Benutzerdaten muss man in's Script schreiben oder? :wacko:
    Wenn ja, ist's doof ;(

    §1 Ich kann nicht für meine scripts inhaftiert werden, auch wenn bereits 3 Menschen erblindeten an den Folgen der Korrekturlesung.  8o

  • Hallo Kev,

    sorry da muss ich Dich enttäuschen, hab alles drinnen hab es jetzt 2x drübergelesen die folgenden sind alle drinnen sowohl im 3.3.8.1 als auch in der beta.
    Es geht mit keiner von beiden Programmversionen, leider ?(

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #Include <GuiListView.au3>
    #include <mysql.au3>
    #include <Array.au3>
    #include <file.au3>
    #include <String.au3>

    [/autoit]

    Das hier bekomme ich beim compilieren als errors angezeigt:

    Spoiler anzeigen


    C:\Neuer Ordner\KeyGen\Keygenerator.au3(63,20) : WARNING: $gross: possibly used before declaration.
    $diff = Chr($gross)
    ~~~~~~~~~~~~~~~~~~^
    C:\Neuer Ordner\KeyGen\Keygenerator.au3(64,21) : WARNING: $klein: possibly used before declaration.
    $diff1 = Chr($klein)
    ~~~~~~~~~~~~~~~~~~~^
    C:\Neuer Ordner\KeyGen\Keygenerator.au3(65,22) : WARNING: $zahlen: possibly used before declaration.
    $diff2 = Chr($zahlen)
    ~~~~~~~~~~~~~~~~~~~~^
    C:\Neuer Ordner\KeyGen\Keygenerator.au3(91,20) : ERROR: _MySQL_InitLibrary(): undefined function.
    _MySQL_InitLibrary()
    ~~~~~~~~~~~~~~~~~~~^
    C:\Neuer Ordner\KeyGen\Keygenerator.au3(92,26) : ERROR: _MySQL_Init(): undefined function.
    $MysqlConn = _MySQL_Init()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Neuer Ordner\KeyGen\Keygenerator.au3(94,104) : ERROR: _MySQL_Real_Connect(): undefined function.
    $connected = _MySQL_Real_Connect($MysqlConn,$configdata[3],$configdata[0],$configdata[1],$configdata[2])
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Neuer Ordner\KeyGen\Keygenerator.au3(95,83) : ERROR: _MySQL_Error(): undefined function.
    If $connected = 0 Then Exit MsgBox(16, 'Connection Error', _MySQL_Error($MysqlConn)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Neuer Ordner\KeyGen\Keygenerator.au3(103,36) : ERROR: _MySQL_Real_Query(): undefined function.
    _MySQL_Real_Query($MysqlConn, $doit)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Neuer Ordner\KeyGen\Keygenerator.au3 - 5 error(s), 3 warning(s)

  • Ich empfehle das datum per i-net runter zu laden, es gibt ein programm namens: RunAsDate der ein anderes datum "vortäuschen" kann.

    Sind TV-Quizfragen zu einfach? A) Ja B) Harry Potter

    Spoiler anzeigen

    Ich gebe zu dieser Post hat wahrscheinlich nicht viel geholfen,
    aber ich versuche wenigstens zu helfen :rolleyes:

  • ProGamer, diese Traildates kann man fast bei allen Programmen einfach zurücksetzten zb. Programm installieren und RegSniffer mitlaufen lassen, dann siehste den key für die Demo und änderst ihn nach belieben..
    man brauch nicht mal ein Programm von wegen RunAsDate man kann auch einfach die Bios Uhr umstellen oder sonstwas es gibt zig Möglichkeiten

    Gruß Marvin

  • Hallo nochmals,

    kann mir denn niemand helfen? Bin grad am verzweifeln, habe alle Dateien im include Ordner aber bekomme immer diese dumme Fehlermeldung bei Linie 91 das diese Funktion nicht definiert sei.

    Was kann ich noch machen?

    Bitte helft mir ?( ?( ?( ?( ?( .

  • Dann kanns nur daran liegen das in deiner mysql.au3 die funktionen nicht stimmen oder nicht eingetragen sind oder oder oder..

    habe mal meine includes oben angehängt. Damit sollte es gehen.

  • Vielen Dank Kev,

    mit den Includes hat es problemlos funktioniert. Eine Frage zu Deinem Programm habe ich allerdings noch, wenn er das bei Paypal bezahlt hat z. B. woher bekommt er dann eine Seriennummer aus Deiner Datenbank?

    Machst Du das auch über das Programm oder lässt Du die dann von Hand per Mail verschicken?