Один URL к изображению, мало результатов - PullRequest
2 голосов
/ 11 апреля 2010

Я пытаюсь показать программистам, что некоторые капчи слишком слабы, и я их ломаю. Теперь у меня есть что-то вроде этого:

Функция:

<code><?php

function cbreak($image)
{

$info = getimagesize($image);
$width = $info[0];
$height = $info[1];

$img = imagecreatefromgif($image);

$map = array();
for($y=0; $y<$height; $y++)
{
  for($x=0; $x<$width; $x++)
  {
    $color = imagecolorsforindex($img, imagecolorat($img, $x, $y));

    $map[$x][$y] = ($color['red'] + $color['blue'] + $color['green'] > 750) ? TRUE : FALSE;  
  }  
}
echo '<pre>';
for($y=0; $y<$height; $y++)
{
  for($x=0; $x<$width; $x++)
  {
    echo ($map[$x][$y] == TRUE) ? 'X' : '-';  
  }
  echo '<br>';  
}
echo '
'; $ sum = ''; для ($ x = 0; $ x <$ width; $ x ++) { $ count = 0; для ($ y = 0; $ y <$ height; $ y ++) { if ($ map [$ x] [$ y] == TRUE) $ count ++; } $ sum. = ($ count == 0)? 'X': $ count; } $ sum = preg_replace ('# X + #', 'X', $ sum); $ sum = trim ($ sum, 'X'); $ letters = explode ('X', $ sum); $ pattern = array ( / * Все еще не здесь * / ); $ token = ''; для ($ i = 0; $ i <count ($ letters); $ i ++) { $ token. = $ pattern [$ letters [$ i]]; } echo $ token; } ?>

Действие:

<?php

$cl = curl_init("http://www.takeagift.pl/rejestracja");

curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1);

$r = curl_exec($cl);


$pattern = "/src=[\"'].*[\"']?/i";
preg_match_all($pattern, $r, $images);

$c = array();
for($i=0; $i<sizeof($images[0]); $i++)
{
    if(strstr($images[0][$i], 'captcha') !== false)
    {
        $c = $images[0][$i]; 
    }
}
$s1 = substr($c, 0, -8);
echo $s1."<br />";
$s = substr($s1, 5, -1);
echo $s."<br />";
curl_close($cl);

?>

<img src="http://www.takeagift.pl/includes/modules/captcha.php?1270900968" /><br />
<img src="http://www.takeagift.pl/includes/modules/captcha.php?1270900968" /><br />
<img src="http://www.takeagift.pl/includes/modules/captcha.php?1270900968" /><br />
<img src="http://www.takeagift.pl/includes/modules/captcha.php?1270900968" /><br />
<img src="http://www.takeagift.pl/includes/modules/captcha.php?1270900968" /><br />
<?php include('cb.php'); 
cbreak("http://www.takeagift.pl/includes/modules/captcha.php?1270900968");
?>

Не смотрите на preg_match, я все еще не выучил регулярные выражения.

Так как вы видите ссылки такие же: (captcha.php? 1270900968), но результат - нет.

Помогите мне, пожалуйста (я не делаю это для спама на этом портале)

Edit:

В - Как получить одно изображение по одной ссылке? Почему imagecreatefromgif ($ image); не возвращает то же изображение, что и обычная ссылка? Как получить такое же изображение?

1 Ответ

0 голосов
/ 11 апреля 2010

Единственное, что я могу думать о том, что ваши результаты не являются постоянными, это то, что исходное изображение меняется для каждого запроса. Если вы хотите протестировать этот скрипт, я полагаю, вы должны попытаться сохранить одно изображение на локальном сервере и убедиться, что оно проанализировано правильно. Если он работает, вы можете поменять изображения на другие сгенерированные и убедиться, что они также работают.

Я бы использовал file_get_contents (), чтобы сохранить изображение в локальный временный файл или что-то в этом роде, и работать оттуда:

$ImageData = file_get_contents('http://www.takeagift.pl/includes/modules/captcha.php?1270900968');
file_put_contents('temp.gif', $ImageData);

cbreak('temp.gif');
...