Captcha-Bild in GUI einfügen

  • Guten Tag, ich habe vor kurzem mit Autoit angefangen und für die User in meinem Forum auch schon kleinere Sachen wie zB. Auto-Login Script + Begrüßung in die Shoutbox usw. gemacht. ich lese bei euch schon von Anfang an mit aber für mein aktuelles Problem habe ich noch keine Lösung gefunden.
    Nun hat mir unser Admin aber vorgeschlagen, dass ich ein Registrierungs-Script schreibe so, dass die Leute bloß ihre Daten (Benutzername, Passwort, E-Mail) in die GUI schreiben und sich dann registrieren. Bei uns gibt es öfters Dateien im Forum und wir würden dann einfach zu jeder Datei dieses Script dazu packen so, dass sich die Leute gleich anmelden können wenn sie Lust dazu haben.

    Jetzt stehe ich aber vor dem Problem, dass wir ein Captcha beim Registrierungsvorgang haben. Ich möchte dieses Captcha gerne in meine GUI anzeigen lassen damit die Leute es in einem Feld ausfüllen können.
    Dies ist soweit ich weiß nicht gegen eure Forenregeln zumal ich auch das Einverständnis des Seitenbesitzers habe.

    Ich arbeite mit der IE.au3

    Wenn man das Bild einfach wie Inetget downloaden will dann kommt nur ein 1x1 Pixel großes Bild da es keine eindeutige URL sondern ein (soweit ich das erkenne) Hash-Wert ist wie zB. http://dpgvideos.net/Board/image.php?type=hv&hash=c05d931077f7b2a8c1a8d4b561173c2d

    Die Registrierungsseite ist übrigens folgende: http://dpgvideos.net/Board/register.php

    Ich habe mir überlegt, dass es vlt. möglich ist das Bild aus dem Cache des IE auszulesen und es dann anzeigen zu lassen aber leider keinen Schimmer wie ich das anstellen könnte.

    ich würde mich sehr freuen wenn mir jemand dabei helfen könnte.

    Mfg. mannomann

  • hmmm.. so?

    [autoit]

    #include <GUIConstants.au3>

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

    $source = InetRead("http://dpgvideos.net/Board/register.php", 1)
    $source = BinaryToString($source, 4)
    $hash = StringRegExp($source, 'value="(.*?)" \/>\s*<script type="text\/javascript"', 3)

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

    $captcha = InetGet("http://dpgvideos.net/Board/image.php?type=hv&hash=" & $hash, @ScriptDir & "\captcha.jpg", 1)

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

    $GUI = GUICreate("test")
    GUICtrlCreatePic(@ScriptDir & "\captcha.jpg", 20, 20)
    GUISetState()

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

    While 1
    $GUI = GUIGetMsg()
    Switch $GUI
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Vielen Dank für eure schnelle Hilfe.

    Inferiors Script werde ich mir noch genauer anschauen.

    Die Hilfe kenne ich natürlich schon und grundlegendes läuft schon so halbwegs bei mir.

    Ich werde mit unserem Admin man reden was er von der PHP-Variante hält. Trotzdem sind andere Vorschläge immer gerne gesehen.

    EDIT: Inferior, dein Script funktioniert ansich aber wie dir (falls du es getestet hast) aufgefallen sein wird wird leider statt dem Captcha nur ein Bild mit dem Text "Vbulletin" angezeigt. Oder ist das lediglich bei mir so?

    Einmal editiert, zuletzt von mannomann (9. Januar 2011 um 11:20)

  • Oder ist das lediglich bei mir so?


    Bei mir wird gar nichts angezeigt :( ,
    was vermutlich darin liegt, (dass bei) mir überhaupt kein Bild heruntergeladen wird...
    Kann das überhaupt funktionieren, ein Captcha herunterzuladen?
    Da dieses ja bei jedem Seitenaufruf anders ist, dürfte es auch bei der Sitzung von InetGet etwas ganz anderes anzeigen - zumal Captchas neu genereiert werden und soweit ich weiß gar nicht gespeichert (oder temorär gespeichert) werden.

    Meine Idee: Benutze doch einfach den Embedded Ie für den Registrierungsvorgang, dann gibt es solche Probleme gar nicht,
    oder du machst, wie autoBert bereits sagte, eine Lösung über ein Php-Script.

  • Doch, das müsste gehen. Ich kann's leider im Moment nicht testen, da das Forum nicht erreichbar ist.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #Include <String.au3>
    #include <array.au3>
    #region - GUI Create
    GUICreate('', 200, 100)
    $sDomain = 'http://dpgvideos.net/Board/'
    $sSource = BinaryToString(InetRead($sDomain & 'register.php', 1), 4)
    $aResult = StringRegExp($sSource, '<img id="imagereg" src="(.*)" alt="Sicherheitsgrafik"', 1, 1)
    If IsArray($aResult) Then
    InetGet($sDomain & $aResult[0], @TempDir & "/captcha.jpg", 1,0)
    $cCaptcha = GUICtrlCreatePic(@TempDir & "/captcha.jpg",8,8)
    EndIf
    GUISetState()
    #endregion

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

    #region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd
    #endregion

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
  • Das was ihr hier macht funktioniert nicht.
    Wenn ihr die Seite ladet wird auch ein bestimmtes Captcha erwartet.

    Hier wäre eine Lösung mit WinHTTP angebracht, die die Seite und das Captcha mit dem selben Handle lädt...

  • Hier wäre eine Lösung mit WinHTTP angebracht, die die Seite und das Captcha mit dem selben Handle lädt...


    Das sollte klar sein. Mein Beispiel dort oben sollte eigentlich auch nur darstellen, wie man an den hash des Captchas kommt. Eine Anmeldung ist damit natürlich nicht möglich, weil der Security Token nichtmehr passt.

    Ich würde ja gerne was funktionierendes posten aber da baut sich dann der nächste Depp einen Registrierungsbomber draus :S.

    An den Threadstarter: Wenn du das mit dem Admin des betroffenen Forums abgesprochen hast, dann bitte ihm, eine kleine API für die Regitrierung zu schreiben. Das sind keine 150 Zeilen Code und vor allem bleibt sein Forum von ungewollten Nebenwirkungen verschont.

  • Also das würde ich vielleicht besser lassen.
    Da haben Spammer unbegrenzte Möglichkeiten.
    Schau dir einfach die WinHttp UDF an, damit machst du das in ein paar Zeilen.
    Und ob mit oder ohne API, du brauchst immer eine UDF mit der du die API überhaupt ansprechen kannst, dann kann man es auch direkt realisieren.

    Dir hier ein fertiges Script zu geben wäre wegen den Forenregeln eher kontraproduktiv, aber wenn du nicht weiterkommst helfen wir dir bestimmt weiter.

  • ich sag ihm einfach er soll ne API ohne Captcha machen.


    8| Davon war jetzt aber nirgendwo die Rede. Dann könnte er ja auch gleich die Captchas in der Registrierung deaktivieren.

    Die API soll lediglich den Kontakt zum Forensystem möglich machen und nicht dessen Funktionen umgehen. Es ist wesentlich sinnvoller, Informationen wie z.B. den Security Token oder auch den Link zum Captcha Image direkt vom System in einer formatierten Ausgabe bereitstellen zu lassen. Das selbe gilt für das Entgegennehmen der Infrmationen. Für den Registrierungsvorgang wird einfach die passende Klasse des vB eingeebunden und verwendet. Das gewährt die selbe Sicherheit wie bei einer "normalen" Registrierung, lässt sich aber wesentlich leichter ansprechen. Zugriffeberechtigungen auf die API kann man mit ein wenig Geschick auch validieren. Das dürfte bei der nativen Registrierung schwer fallen.