Hack Captcha Jaws >= 0.6.0

Lo prometido es deuda, así que ahi les va el manualito para ponerle algunos añadidos a nuestro captcha como:
  • Uso de fuentes TTF, digo, para que se entienda el texto que es la idea principal
  • Fuentes aleatorias, asi se pueden visualizar de manera diferente cada captcha
  • Agregado de más colores en las lineas del fondo
  • Agregado de pixeles en el fondo!, con muchos colores!..

Empecemos por lo primero!.., hacer un respaldo de los archivos a modificar, en este caso se trata del archivo include/JawsCaptcha/Image.php, en ese archivo se crea la imagen aleatoria.

Voy a empezar explicando algunas partes del código y al final les pongo ya como queda el archivo final!.., saz!.., así que manos a la obra!.., preparen su editor de textos favoritos y al ataque!..

Primero buscamos la función Build (esta aprox por la linea 29) y vamos a remplazar en donde dice imagecolorallocate por el siguiente código, se supone que esa función se encarga de crear la gama de colores especificado por los 3 ultimos parametros de esa función., el formato esta en RGB (Red, Green, Blue).

$color['white']    = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
$color['gray']     = imagecolorallocate($image, 0xC0, 0xC0, 0xC0);
$color['darkgray'] = imagecolorallocate($image, 0x50, 0x50, 0x50);
$colorPixel[]  = imagecolorallocate($image, 0xFF, 0xFF, 0x00); // Yellow
$colorPixel[]  = imagecolorallocate($image, 0xFF, 0x00, 0x00); // Red
$colorPixel[]  = imagecolorallocate($image, 0xC0, 0xC0, 0xC0); // Gray
$colorPixel[]  = imagecolorallocate($image, 0x00, 0x00, 0xFF); // Blue
$colorPixel[]  = imagecolorallocate($image, 0xC0, 0xFF, 0x00); // Green

 

La idea básica es primero definir el arreglo color con los diferentes colores que utilizaremos en el pintado de las letras (tu puedes jugar y ponerle los colores que desees).
Despues tenemos el arreglo colorPixel , si se fijan no pongo ningun indice en el arreglo, ya que podemos luego agregar más y más colores!.., mediante la función imagecolorallocate en formato RGB recurden!., haa y en Hexadecimal, por eso tiene 0x00 hasta el 0xFF

Ahora sigue definir las fuentes TTF que utilizaremos en el captcha en este caso vamos a definir 2 tipos de letras, una llama AhnbergHand.ttf y la otra FuturaBook.ttf

$myFonts[0]['font'] = "AhnbergHand";
$myFonts[0]['size'] = "14";

$myFonts[1]['font'] = "FuturaBook";
$myFonts[1]['size'] = "18";

 

Esto es facil de entender, en el primer arreglo bidimencional ponemos el nombre de la fuente, tal y como la tenemos en el servidor, sin la extención TTF y en la segunda parte el tamaño de la fuente a utilizar, lo hice así porque me di cuenta que si ponia un tamaño fijo a veces no se veia bien la letra....

Ahora vamos a remplazar la parte del creado de las lineas de fondo, en el código van a encontrar algo así //Generate a funny background.. con un for abajito.., haa pues eso lo reemplazan por:

//Generate a funny background..
for($i = 0; $i < 5; $i++){

            $x1 = rand(0,140);

            $y1 = rand(0,30);

            $x2 = rand(0,140);

            $y2 = rand(0,30);

            $newColor = rand(0,count($colorPixel));

            imageline($image, $x1, $y1, $x2, $y2 , $colorPixel[$newColor]);
}

 

Si observan ahi estamos usando el arreglo colorPixel definido arriba..., con esto coloramos la lineas, asi ya no aparecen de color gris como antes!... y para que sea aleatorio el color tons tenemos la función rand face-smile.png

Y ahora sigue abajo de este for el siguiente código, este es para los pixeles de fondo!..

for($i = 0; $i < 300; $i++){

          $xp = rand(0,140);

          $yp = rand(0,40)

          $newColor = rand(0,count($colorPixel)-1);

          imagesetpixel($image, $xp, $yp, $colorPixel[$newColor]);
}

 

Ahora sigue la inicialización de las fuentes TTF, entonces abajo de

//And write it in a random position..
$text_length = strlen($text);

 

Ponemos lo siguiente:

if(function_exists('imagettftext')){      

                putenv('GDFONTPATH=' . JAWS_PATH . "include/JawsCaptcha");

                $fontsttf = true;

                $indexFont = rand(0,count($myFonts)-1);

                $showFont = $myFonts[$indexFont]['font'];

                $sizeFont = $myFonts[$indexFont]['size'];
}else

                $fontsttf= false;

 

La idea es primero verificar si el servidor tiene soporte para las fuentes TTF, si es negativo entonces utilizamos texto plano, tal y como esta actualmente el captcha (que por cierto no se entiende muy bien que digamos), pero si es positivo entonces inicializamos las fuentes definidas arriba en el arreglo myFonts y especificamos en donde estan posicionadas nuestras fuentes en el servidor (es lo del putenv GDFONTPATH)

Ahora sigue la parte en donde vamos a crear el texto, que es el For que esta abajo de todo esto...., antes del header, ahi remplazamos por:

for($i = 0; $i < $text_length; $i++){

                if($fontsttf){

                        $x = $x + rand(15, 20);

                        $y = rand(17 , 30);

                        $angl = rand(-20,20);

                        imagettftext($image, $sizeFont, $angl, $x, $y, $color['darkgray'], $showFont, $text{$i});

                }else{

                        $fnt = rand(3,5);

                        $x = $x + rand(12 , 20);

                        $y = rand(7 , 12);

                        imagestring($image, $fnt, $x, $y, $text{$i} , $color['darkgray']);

                }

        }

 

Primero verificamos si esta activado el soporte para las fuentes TTF e imprimimos ya sea con soporte o sin soporte!.., y en el caso que se con soporte en la variable angl ahi especificamos cuantos grados queremos que gire el texto, por eso se tiene un random para que se vea más aleatorio todo el asunto.

Y listo!..., ya con esto tenemos un resultado más o menos como el que sigue:



Ahi se puede apreciar el resultado con las dos fuentes que les dije anteriormente!., ustedes son libres de poner las que más les agrade face-smile-big.png

Aquí pueden descargar el código fuente del Hack JawsCaptcha con las 2 tipografias., solo las copian en include/JawsCaptcha/ y en teoria debe de funcionar todo face-surprise.png (esta en RAR para comprimirlo más)

[actualizado]
Aquí les dejo el hack para que funcione el Captcha Jaws con Minusculas y/o Mayusculas (alta mente recomendado tongue.png )

#1 Re: Hack Captcha Jaws >= 0.6.0

marko, <E-Mail> / Jueves 29 Junio 2006 2:26pm  
avatar

Oye Oviedos, pero todavia tienes que ponerlo en mayusculas?

Quedaria excelente si no importara...

[ Responder (0) ]

#2 Re: Hack Captcha Jaws >= 0.6.0

oviedo, <E-Mail> / Jueves 29 Junio 2006 7:29pm  
avatar

Sip, en eso le estaba moviendo pero tenia unas broncas con la codificacion MD5, espero poder resolver ese problemilla face-smile-big.png

[ Responder (0) ]

#3 Re: Hack Captcha Jaws >= 0.6.0

oviedo, <E-Mail> / Viernes 30 Junio 2006 10:32am  
avatar

Listo!..., ya vale madres las mayusculas.. =), ahorita posteo la solución, sino en el foro del Jaws ahi tambien la voy a postear

[ Responder (0) ]

Dejar un comentario

Fuentes XML de comentario: RSS | Atom

Suscribete al servicio sindicalizado de Oviedos.com.mx