Autoit Captcha ImageSearch

10/06/2012 20:20 Ιlluminati#1
Hey ich mach mich gerade an einen Captcha Cracker für die Registration von Nexon.

Die Buchstaben haben Immer die Gleiche Form.
Ich habe bereits ein Script gemacht das mir vom Captcha nur die Buchstaben rausfiltert.

Nun müsste ich aber mit Imagesearch oder so jeden buchstaben absuchen um dann zu filtern in welcher reihenfolge welcher buchstabe ist.

Jemand eine Idee?

Hier mein Bisheriges Script.
Ihr könnt es ja mal ausführen um zu sehen wie das Captcha aussieht.

PHP Code:
#include <INet.au3>
#include <GDIPlus.au3>
#include <String.au3>
#include <Array.au3>
$Farben = "662bff_0000ff_3380cc_338099_0055cc_3300ff_9955ff_6600ff_0000cc_0055ff_6655ff_002bcc_992bff_3355cc_002bff_332bff_"



$sHTML = _INetGetSource("http://passport.nexoneu.com/Registration/Signup.aspx?nexoneuTheme=NexonEU")
$lol = _StringBetween($sHTML, '<img id="imgPic" src="/img/', '" border="0" />')
InetGet("http://passport.nexoneu.com/img/"&$lol[0], "Captcha.gif")

_GDIPlus_Startup()
$hImage = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\Captcha.gif")
$iWidth = _GDIPlus_ImageGetWidth($hImage)
$iHeight = _GDIPlus_ImageGetHeight($hImage)
Dim $aPic[$iWidth][$iHeight]
For 
$iYPos = 0 To $iHeight-1
    
For $iXPos = 0 To $iWidth-1
        $aRGB 
= Hex(_GDIPlus_GetPixel($hImage, $iXPos, $iYPos), 6)
        
         If 
StringInStr($Farben, $aRGB&"_") Then
            $aPic
[$iXPos][$iYPos] = 1
         
Else
            
$aPic[$iXPos][$iYPos] = 0
         
EndIf
         
    
Next
Next
For $iYPos = 0 To $iHeight-1
   
For $iXPos = 0 To $iWidth-1
      
If $aPic[$iXPos][$iYPos] = 1 Then
         _GDIPlus_SetPixel
($hImage, $iXPos, $iYPos, 0x000000)
      Else
         
_GDIPlus_SetPixel($hImage, $iXPos, $iYPos, 0xffffff)
      EndIf
   
Next
Next 

_GDIPlus_ImageSaveToFile
($hImage, @ScriptDir & "\Solve.bmp")
_GDIPlus_Shutdown()

Func _GDIPlus_GetPixel($hBitmap, $iX, $iY)
    
Local $result = DllCall($ghGDIPDLL, "int", "GdipBitmapGetPixel", "ptr", $hBitmap, "int", $iX, "int", $iY, "dword*", 0)
    If @
error Then Return SetError(1, 0, 0)
    Return 
SetError($result[0], 1, $result[4])
EndFunc

Func _GDIPlus_SetPixel
($hBitmap, $iX, $iY, $color)
    
Local $result = DllCall($ghGDIPDLL, "int", "GdipBitmapSetPixel", "ptr", $hBitmap, "int", $iX, "int", $iY, "dword", $color)
    If @
error Then Return SetError(1, 0, 0)
    Return 
SetError($result[0], 1, $result[4])
EndFunc 
10/06/2012 20:50 Lawliet#2
Ich hab das Teil schon fertig hier, wenn du es willst kannst du dich bei mir melden.
Läuft allerdings über GDI+ und im Hintergrund.