Killer Captcha

Iniciado por emma93, 15 Marzo 2011, 04:48 AM

0 Miembros y 1 Visitante están viendo este tema.

emma93

Estoy haciendo un Captcha killer para reconocer el captcha de una web a través de PHP, luego de hacerlo pienso publicar el código aqui pero primero necesito un poco de ayuda.

He leido el pdf que publicó NaPa, y me pareció bastante interesante. Ahora estoy haciendo el código pero con otro tipo de Captcha (que parece fácil pero me he comido los cesos 3 días enteros).

Por ahora solo quiero comparar la primera letra del captcha con un datamap ya creado. Primero he probado comparando un 7 (primera letra del Captcha) con un 7 (datamap ya creado). Las igualdades en sus pixeles me dió algo así como 29 (niveles del array), por lo tanto me parece razonable ya que se acerca. El problema es que al querer comparar el mismo 7 del captcha con el datamap ya creado de un 0 (cero) me devuelve el mismo resultado, siendo que no son nada que ver.

El código a continuación:

Código (php) [Seleccionar]

<?php

$archivo 
fopen("Letras/ocr/7-bfa262e02131320615905fbb91d32d66-charmap.datamap","r"); //Datamap del número 7
$longitud filesize("Letras/ocr/7-bfa262e02131320615905fbb91d32d66-charmap.datamap");
$archivo fread($archivo,$longitud);
$archivo base64_decode(str_rot13($archivo));
$archivo explode("@",$archivo);
$archivo substr($archivo[1], 1strlen($archivo[1]));
$archivo explode(":",$archivo);
$width 24;
$height 25;
$img imagecreatefromjpeg("ConfirmHandler.jpg");
imagejpeg($img,"captcha.jpg");
$img limpia($img);
$imgchar imagecreate($width,$height);
imagecopy($imgchar,$img,1,1,10,8,20,24);
imagejpeg($imgchar,"chr1.jpg");
$datamap1 creardatamap($imgchar,"noname");
$datamap1 explode("@",$datamap1);
$datamap1 substr($datamap1[1], 1strlen($datamap1[1]));
$datamap1 explode(":",$datamap1);
$errores 0;
for(
$i=0;$i<count($datamap1);$i++){
    if ((
$archivo[$i]) != ($datamap1[$i])){$errores++;}
}
echo 
$errores//El valor me devuelve 648

//////////////////////////////FUNCIONES///////////////////////////////////

function learnchar($image,$name){
global 
$width,$height;
$imagen crearimagenfile($image);
$datamap str_rot13(base64_encode(creardatamap($imagen,$name)));
guardar($datamap,$name);
echo 
"Nueva relacion de memoria creada, aprendiendo de $name <br>";
}

function 
guardar($datamap,$name){
$fl fopen("Letras/ocr/$name-".md5(time()*rand(1,100))."-charmap.datamap","w+");
fwrite($fl,$datamap);
fclose($fl);
}

function 
iniciarsistema(){
learnchar("Letras/A.jpg","A");
learnchar("Letras/B.jpg","B");
learnchar("Letras/C.jpg","C");
learnchar("Letras/D.jpg","D");
learnchar("Letras/E.jpg","E");
learnchar("Letras/F.jpg","F");
learnchar("Letras/0.jpg","0");
learnchar("Letras/1.jpg","1");
learnchar("Letras/2.jpg","2");
learnchar("Letras/3.jpg","3");
learnchar("Letras/4.jpg","4");
learnchar("Letras/5.jpg","5");
learnchar("Letras/6.jpg","6");
learnchar("Letras/7.jpg","7");
learnchar("Letras/8.jpg","8");
learnchar("Letras/9.jpg","9");
unlink("Letras/A.jpg");
unlink("Letras/B.jpg");
unlink("Letras/C.jpg");
unlink("Letras/D.jpg");
unlink("Letras/E.jpg");
unlink("Letras/F.jpg");
unlink("Letras/0.jpg");
unlink("Letras/1.jpg");
unlink("Letras/2.jpg");
unlink("Letras/3.jpg");
unlink("Letras/4.jpg");
unlink("Letras/5.jpg");
unlink("Letras/6.jpg");
unlink("Letras/7.jpg");
unlink("Letras/8.jpg");
unlink("Letras/9.jpg");
rmdir("Letras");
}

function 
limpia($image){
    
$w imagesx($image);
$h imagesy($image);
for (
$x 0$x <= $w$x++){
for (
$i 0$i <= $h$i++){
$rgb imagecolorat($image$x$i);
$r = ($rgb >> 16) & 255;
$g = ($rgb >> 8) & 255;
$b $rgb 255;
if ((
$r 55) || ($g 55) || ($b 55)){
imagesetpixel($image$x$iimagecolorallocate($image255255255));
}else{
imagesetpixel($image$x$iimagecolorallocate($image000));
}
}
}
return 
$image;
}

function 
crearimagenfile($img_file){
global 
$width,$height;
$img=0;
$img_sz getimagesize$img_file );
switch( 
$img_sz[2] ){
case 
1:
$img ImageCreateFromGif($img_file);
break;
case 
2:
$img ImageCreateFromJpeg($img_file);
break;
case 
3:
$img ImageCreateFromPng($img_file);
break;
}
$width $img_sz[0];
$height $img_sz[1];
return 
$img;
}

function 
creardatamap($image,$name){
    global 
$width,$height;
    
$datamap $name."@";
    for (
$x=0$x<=$width$x++){
for (
$y=0$y<=$height$y++){
 
$datamap.=":".$x.",".$y.",".pixelcolor($image,$x,$y);
}
}
return 
$datamap;
}

function 
pixelcolor($im,$x,$y){
    
$rgb imagecolorat($im,$x,$y);
    
$r = ($rgb >> 16) & 255;
$g = ($rgb >> 8) & 255;
$b $rgb 255;
if ((
$r 55) || ($g 55) || ($b 55)){
return 
0;
}
return 
1;
}

?>



El resultado me da igual tanto probando con el datamap de un 7 como de un cero.

Los datamaps son los siguientes:

* Del número 0:

Citar
ZRN6ZPjjYQN6ZPjkYQN6ZPjlYQN6ZPjmYQN6ZPj0YQN6ZPj1YQN6ZPj2YQN6ZPj3YQN6ZPj4YQN6ZPj5YQN6ZPjkZPjjBwNfZGRfZQbjYQRlYQN6ZPjkZljjBwNfZGDfZQbjYQR1YQN6ZPjkAvjjBwNfZGpfZQbjYQR4YQN6ZPjkBFjjBwNfZwNfZQbjYQVkYQN6ZPjlZvjjBwNfZwZfZGbkYQNfZQbkYQRfZQbkYQVfZQbkYQZfZQbkYQDfZQbkYQHfZQbkYQLfZQbkYQpfZQbkYQtfZGbkYQxfZGbkYQRjYQR6ZFjkZFjkBwRfZGVfZGbkYQRmYQR6ZFjkAPjkBwRfZGHfZQbkYQR2YQN6ZFjkAljjBwRfZGtfZQbkYQR5YQN6ZFjlZPjjBwRfZwRfZQbkYQVlYQN6ZFjlZljkBwVfZPjjBwVfZFjjBwVfZvjjBwVfZljjBwVfAPjjBwVfAFjkBwVfAvjkBwVfAljkBwVfBPjkBwVfBFjkBwVfZGNfZGblYQRkYQR6ZvjkZvjkBwVfZGZfZGblYQR0YQR6ZvjkAFjkBwVfZGLfZGblYQR3YQR6ZvjkBPjjBwVfZGxfZQblYQVjYQN6ZvjlZFjjBwVfZwVfZQblYQVmYQR6ZljjYQN6ZljkYQN6ZljlYQN6ZljmYQN6Zlj0YQR6Zlj1YQR6Zlj2YQN6Zlj3YQN6Zlj4YQN6Zlj5YQN6ZljkZPjjBwZfZGRfZQbmYQRlYQN6ZljkZljjBwZfZGDfZQbmYQR1YQN6ZljkAvjkBwZfZGpfZGbmYQR4YQR6ZljkBFjjBwZfZwNfZQbmYQVkYQN6ZljlZvjjBwZfZwZfZGb0YQNfZQb0YQRfZQb0YQVfZQb0YQZfZGb0YQDfZGb0YQHfZQb0YQLfZQb0YQpfZQb0YQtfZQb0YQxfZQb0YQRjYQN6APjkZFjjBwDfZGVfZQb0YQRmYQN6APjkAPjjBwDfZGHfZQb0YQR2YQN6APjkAljjBwDfZGtfZGb0YQR5YQR6APjlZPjjBwDfZwRfZQb0YQVlYQN6APjlZljkBwHfZPjjBwHfZFjjBwHfZvjjBwHfZljkBwHfAPjjBwHfAFjjBwHfAvjjBwHfAljjBwHfBPjjBwHfBFjjBwHfZGNfZQb1YQRkYQN6AFjkZvjjBwHfZGZfZQb1YQR0YQN6AFjkAFjjBwHfZGLfZQb1YQR3YQN6AFjkBPjjBwHfZGxfZGb1YQVjYQN6AFjlZFjjBwHfZwVfZQb1YQVmYQR6AvjjYQN6AvjkYQN6AvjlYQR6AvjmYQR6Avj0YQN6Avj1YQN6Avj2YQN6Avj3YQN6Avj4YQN6Avj5YQN6AvjkZPjjBwLfZGRfZQb2YQRlYQN6AvjkZljjBwLfZGDfZQb2YQR1YQN6AvjkAvjjBwLfZGpfZQb2YQR4YQN6AvjkBFjkBwLfZwNfZGb2YQVkYQN6AvjlZvjjBwLfZwZfZGb3YQNfZQb3YQRfZQb3YQVfZGb3YQZfZGb3YQDfZQb3YQHfZQb3YQLfZQb3YQpfZQb3YQtfZQb3YQxfZQb3YQRjYQN6AljkZFjjBwpfZGVfZQb3YQRmYQN6AljkAPjjBwpfZGHfZQb3YQR2YQN6AljkAljjBwpfZGtfZQb3YQR5YQR6AljlZPjkBwpfZwRfZQb3YQVlYQN6AljlZljkBwtfZPjjBwtfZFjjBwtfZvjkBwtfZljkBwtfAPjjBwtfAFjjBwtfAvjjBwtfAljjBwtfBPjjBwtfBFjjBwtfZGNfZQb4YQRkYQN6BPjkZvjjBwtfZGZfZQb4YQR0YQN6BPjkAFjjBwtfZGLfZQb4YQR3YQN6BPjkBPjjBwtfZGxfZGb4YQVjYQR6BPjlZFjjBwtfZwVfZQb4YQVmYQR6BFjjYQN6BFjkYQN6BFjlYQR6BFjmYQR6BFj0YQN6BFj1YQN6BFj2YQN6BFj3YQN6BFj4YQN6BFj5YQN6BFjkZPjjBwxfZGRfZQb5YQRlYQN6BFjkZljjBwxfZGDfZQb5YQR1YQN6BFjkAvjjBwxfZGpfZQb5YQR4YQN6BFjkBFjkBwxfZwNfZGb5YQVkYQN6BFjlZvjjBwxfZwZfZGbkZPjjYQN6ZGNfZFjjBwRjYQVfZQbkZPjmYQR6ZGNfAPjkBwRjYQHfZQbkZPj2YQN6ZGNfAljjBwRjYQtfZQbkZPj5YQN6ZGNfZGNfZQbkZPjkZFjjBwRjYQRlYQN6ZGNfZGZfZQbkZPjkAPjjBwRjYQR1YQN6ZGNfZGLfZQbkZPjkAljjBwRjYQR4YQR6ZGNfZGxfZGbkZPjlZPjjBwRjYQVkYQN6ZGNfZwVfZQbkZPjlZljkBwRkYQNfZQbkZFjkYQN6ZGRfZvjjBwRkYQZfZQbkZFj0YQR6ZGRfAFjkBwRkYQLfZGbkZFj3YQN6ZGRfBPjjBwRkYQxfZQbkZFjkZPjjBwRkYQRkYQN6ZGRfZGVfZQbkZFjkZljjBwRkYQR0YQN6ZGRfZGHfZQbkZFjkAvjkBwRkYQR3YQR6ZGRfZGtfZGbkZFjkBFjjBwRkYQVjYQN6ZGRfZwRfZQbkZFjlZvjjBwRkYQVmYQR6ZGVfZPjjBwRlYQRfZQbkZvjlYQN6ZGVfZljjBwRlYQDfZQbkZvj1YQR6ZGVfAvjkBwRlYQpfZGbkZvj4YQR6ZGVfBFjkBwRlYQRjYQR6ZGVfZGRfZGbkZvjkZvjkBwRlYQRmYQR6ZGVfZGDfZGbkZvjkAFjkBwRlYQR2YQR6ZGVfZGpfZGbkZvjkBPjjBwRlYQR5YQN6ZGVfZwNfZQbkZvjlZFjjBwRlYQVlYQN6ZGVfZwZfZGbkZljjYQN6ZGZfZFjjBwRmYQVfZQbkZljmYQN6ZGZfAPjjBwRmYQHfZQbkZlj2YQN6ZGZfAljjBwRmYQtfZGbkZlj5YQR6ZGZfZGNfZGbkZljkZFjkBwRmYQRlYQR6ZGZfZGZfZGbkZljkAPjkBwRmYQR1YQN6ZGZfZGLfZQbkZljkAljjBwRmYQR4YQN6ZGZfZGxfZQbkZljlZPjjBwRmYQVkYQN6ZGZfZwVfZQbkZljlZljkBwR0YQNfZQbkAPjkYQN6ZGDfZvjjBwR0YQZfZQbkAPj0YQN6ZGDfAFjjBwR0YQLfZQbkAPj3YQN6ZGDfBPjjBwR0YQxfZQbkAPjkZPjjBwR0YQRkYQN6ZGDfZGVfZQbkAPjkZljjBwR0YQR0YQN6ZGDfZGHfZQbkAPjkAvjjBwR0YQR3YQN6ZGDfZGtfZQbkAPjkBFjjBwR0YQVjYQN6ZGDfZwRfZQbkAPjlZvjjBwR0YQVmYQR6ZGHfZPjkBwR1YQRfZGbkAFjlYQR6ZGHfZljkBwR1YQDfZGbkAFj1YQR6ZGHfAvjkBwR1YQpfZGbkAFj4YQR6ZGHfBFjkBwR1YQRjYQR6ZGHfZGRfZGbkAFjkZvjkBwR1YQRmYQR6ZGHfZGDfZGbkAFjkAFjkBwR1YQR2YQR6ZGHfZGpfZGbkAFjkBPjkBwR1YQR5YQR6ZGHfZwNfZGbkAFjlZFjkBwR1YQVlYQR6ZGHfZwZfZD==

* Datamap del número 7:

Citar
A0N6ZPjjYQN6ZPjkYQN6ZPjlYQN6ZPjmYQN6ZPj0YQN6ZPj1YQN6ZPj2YQN6ZPj3YQN6ZPj4YQN6ZPj5YQN6ZPjkZPjjBwNfZGRfZQbjYQRlYQN6ZPjkZljjBwNfZGDfZQbjYQR1YQN6ZPjkAvjjBwNfZGpfZQbjYQR4YQN6ZPjkBFjjBwNfZwNfZQbjYQVkYQN6ZPjlZvjkBwRfZPjjBwRfZFjjBwRfZvjkBwRfZljkBwRfAPjjBwRfAFjjBwRfAvjjBwRfAljjBwRfBPjjBwRfBFjjBwRfZGNfZQbkYQRkYQN6ZFjkZvjjBwRfZGZfZQbkYQR0YQN6ZFjkAFjjBwRfZGLfZQbkYQR3YQN6ZFjkBPjjBwRfZGxfZQbkYQVjYQN6ZFjlZFjjBwRfZwVfZGblYQNfZQblYQRfZQblYQVfZGblYQZfZGblYQDfZQblYQHfZQblYQLfZQblYQpfZQblYQtfZQblYQxfZQblYQRjYQN6ZvjkZFjjBwVfZGVfZQblYQRmYQN6ZvjkAPjjBwVfZGHfZQblYQR2YQN6ZvjkAljjBwVfZGtfZQblYQR5YQN6ZvjlZPjjBwVfZwRfZQblYQVlYQR6ZljjYQN6ZljkYQN6ZljlYQR6ZljmYQR6Zlj0YQN6Zlj1YQN6Zlj2YQN6Zlj3YQN6Zlj4YQN6Zlj5YQN6ZljkZPjjBwZfZGRfZQbmYQRlYQN6ZljkZljjBwZfZGDfZQbmYQR1YQN6ZljkAvjjBwZfZGpfZQbmYQR4YQN6ZljkBFjjBwZfZwNfZQbmYQVkYQN6ZljlZvjkBwDfZPjjBwDfZFjjBwDfZvjkBwDfZljkBwDfAPjjBwDfAFjjBwDfAvjjBwDfAljjBwDfBPjjBwDfBFjjBwDfZGNfZQb0YQRkYQN6APjkZvjjBwDfZGZfZQb0YQR0YQN6APjkAFjjBwDfZGLfZQb0YQR3YQN6APjkBPjjBwDfZGxfZQb0YQVjYQN6APjlZFjjBwDfZwVfZGb1YQNfZQb1YQRfZQb1YQVfZGb1YQZfZGb1YQDfZQb1YQHfZQb1YQLfZQb1YQpfZQb1YQtfZQb1YQxfZQb1YQRjYQN6AFjkZFjjBwHfZGVfZQb1YQRmYQN6AFjkAPjjBwHfZGHfZQb1YQR2YQN6AFjkAljjBwHfZGtfZQb1YQR5YQR6AFjlZPjkBwHfZwRfZQb1YQVlYQR6AvjjYQN6AvjkYQN6AvjlYQR6AvjmYQR6Avj0YQN6Avj1YQN6Avj2YQN6Avj3YQN6Avj4YQN6Avj5YQN6AvjkZPjjBwLfZGRfZQb2YQRlYQN6AvjkZljjBwLfZGDfZQb2YQR1YQN6AvjkAvjkBwLfZGpfZGb2YQR4YQR6AvjkBFjjBwLfZwNfZQb2YQVkYQN6AvjlZvjkBwpfZPjjBwpfZFjjBwpfZvjkBwpfZljkBwpfAPjjBwpfAFjjBwpfAvjjBwpfAljjBwpfBPjjBwpfBFjjBwpfZGNfZQb3YQRkYQN6AljkZvjjBwpfZGZfZQb3YQR0YQR6AljkAFjkBwpfZGLfZGb3YQR3YQN6AljkBPjjBwpfZGxfZQb3YQVjYQN6AljlZFjjBwpfZwVfZGb4YQNfZQb4YQRfZQb4YQVfZGb4YQZfZGb4YQDfZQb4YQHfZQb4YQLfZQb4YQpfZQb4YQtfZQb4YQxfZQb4YQRjYQN6BPjkZFjjBwtfZGVfZGb4YQRmYQR6BPjkAPjkBwtfZGHfZQb4YQR2YQN6BPjkAljjBwtfZGtfZQb4YQR5YQN6BPjlZPjjBwtfZwRfZQb4YQVlYQR6BFjjYQN6BFjkYQN6BFjlYQR6BFjmYQR6BFj0YQN6BFj1YQN6BFj2YQN6BFj3YQN6BFj4YQN6BFj5YQR6BFjkZPjkBwxfZGRfZGb5YQRlYQR6BFjkZljjBwxfZGDfZQb5YQR1YQN6BFjkAvjjBwxfZGpfZQb5YQR4YQN6BFjkBFjjBwxfZwNfZQb5YQVkYQN6BFjlZvjkBwRjYQNfZQbkZPjkYQN6ZGNfZvjkBwRjYQZfZGbkZPj0YQN6ZGNfAFjjBwRjYQLfZQbkZPj3YQR6ZGNfBPjkBwRjYQxfZGbkZPjkZPjkBwRjYQRkYQN6ZGNfZGVfZQbkZPjkZljjBwRjYQR0YQN6ZGNfZGHfZQbkZPjkAvjjBwRjYQR3YQN6ZGNfZGtfZQbkZPjkBFjjBwRjYQVjYQN6ZGNfZwRfZQbkZPjlZvjkBwRkYQNfZQbkZFjkYQN6ZGRfZvjkBwRkYQZfZGbkZFj0YQN6ZGRfAFjkBwRkYQLfZGbkZFj3YQR6ZGRfBPjjBwRkYQxfZQbkZFjkZPjjBwRkYQRkYQN6ZGRfZGVfZQbkZFjkZljjBwRkYQR0YQN6ZGRfZGHfZQbkZFjkAvjjBwRkYQR3YQN6ZGRfZGtfZQbkZFjkBFjjBwRkYQVjYQN6ZGRfZwRfZQbkZFjlZvjkBwRlYQNfZQbkZvjkYQN6ZGVfZvjkBwRlYQZfZGbkZvj0YQR6ZGVfAFjkBwRlYQLfZQbkZvj3YQN6ZGVfBPjjBwRlYQxfZQbkZvjkZPjjBwRlYQRkYQN6ZGVfZGVfZQbkZvjkZljjBwRlYQR0YQN6ZGVfZGHfZQbkZvjkAvjjBwRlYQR3YQN6ZGVfZGtfZQbkZvjkBFjjBwRlYQVjYQN6ZGVfZwRfZQbkZvjlZvjkBwRmYQNfZQbkZljkYQN6ZGZfZvjkBwRmYQZfZGbkZlj0YQN6ZGZfAFjjBwRmYQLfZQbkZlj3YQN6ZGZfBPjjBwRmYQxfZQbkZljkZPjjBwRmYQRkYQN6ZGZfZGVfZQbkZljkZljjBwRmYQR0YQN6ZGZfZGHfZQbkZljkAvjjBwRmYQR3YQN6ZGZfZGtfZQbkZljkBFjjBwRmYQVjYQN6ZGZfZwRfZQbkZljlZvjkBwR0YQNfZQbkAPjkYQN6ZGDfZvjjBwR0YQZfZQbkAPj0YQN6ZGDfAFjjBwR0YQLfZQbkAPj3YQN6ZGDfBPjjBwR0YQxfZQbkAPjkZPjjBwR0YQRkYQN6ZGDfZGVfZQbkAPjkZljjBwR0YQR0YQN6ZGDfZGHfZQbkAPjkAvjjBwR0YQR3YQN6ZGDfZGtfZQbkAPjkBFjjBwR0YQVjYQN6ZGDfZwRfZQbkAPjlZvjkBwR1YQNfZQbkAFjkYQN6ZGHfZvjjBwR1YQZfZQbkAFj0YQN6ZGHfAFjjBwR1YQLfZQbkAFj3YQN6ZGHfBPjjBwR1YQxfZQbkAFjkZPjjBwR1YQRkYQN6ZGHfZGVfZQbkAFjkZljjBwR1YQR0YQN6ZGHfZGHfZQbkAFjkAvjjBwR1YQR3YQN6ZGHfZGtfZQbkAFjkBFjjBwR1YQVjYQN6ZGHfZwRfZQbkAFjlZvjkBwR2YQNfZGbkAvjkYQR6ZGLfZvjkBwR2YQZfZGbkAvj0YQR6ZGLfAFjkBwR2YQLfZGbkAvj3YQR6ZGLfBPjkBwR2YQxfZGbkAvjkZPjkBwR2YQRkYQR6ZGLfZGVfZGbkAvjkZljkBwR2YQR0YQR6ZGLfZGHfZGbkAvjkAvjkBwR2YQR3YQR6ZGLfZGtfZGbkAvjkBFjkBwR2YQVjYQR6ZGLfZwRfZGbkAvjlZvjk

Obvio que como ven en el codigo, se desencriptan con la función base64_decode y se guardan en una variable. La imagen del captcha es la siguiente:


Espero que me puedan ayudar :) Muchas gracias !