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).

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

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 0×00 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

<br /> $myFonts[0]['font'] = "AhnbergHand";<br /> $myFonts[0]['size'] = "14";</p>
<p>$myFonts[1]['font'] = "FuturaBook";<br /> $myFonts[1]['size'] = "18";<br /> 

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:

<br /> //Generate a funny background..<br /> for ($i = 0; $i &lt; 5; $i++) {<br /> $x1 = rand(0,140);<br /> $y1 = rand(0,30);<br /> $x2 = rand(0,140);<br /> $y2 = rand(0,30);<br /> $newColor = rand(0,count($colorPixel));<br /> imageline($image, $x1, $y1, $x2, $y2 , $colorPixel[$newColor]);<br /> }<br /> 

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 :-)

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

<br /> for ($i = 0; $i &lt; 300; $i++) {<br /> $xp = rand(0,140);<br /> $yp = rand(0,40);<br /> $newColor = rand(0,count($colorPixel)-1);<br /> imagesetpixel($image, $xp, $yp, $colorPixel[$newColor]);<br /> }<br /> 

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

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

Ponemos lo siguiente:

<br /> if (function_exists('imagettftext')){<br /> putenv('GDFONTPATH=' . JAWS_PATH . "include/JawsCaptcha");<br /> $fontsttf = true;<br /> $indexFont = rand(0,count($myFonts)-1);<br /> $showFont = $myFonts[$indexFont]['font'];<br /> $sizeFont = $myFonts[$indexFont]['size'];<br /> }else<br /> $fontsttf= false;<br /> 

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:

<br /> for ($i = 0; $i &lt; $text_length; $i++) {<br /> if ($fontsttf){<br /> $x = $x + rand(15, 20);<br /> $y = rand(17 , 30);<br /> $angl = rand(-20,20);<br /> imagettftext($image, $sizeFont, $angl, $x, $y, $color['darkgray'], $showFont, $text{$i});<br /> }else{<br /> $fnt = rand(3,5);<br /> $x = $x + rand(12 , 20);<br /> $y = rand(7 , 12);<br /> imagestring($image, $fnt, $x, $y, $text{$i} , $color['darkgray']);<br /> }<br /> }<br /> 

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 :-D

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 :-O (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 :-P )

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *