ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
Капчу вводить - не мешки ворочить! |

27.01.2008, 14:24
|
|
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме: 6023777
Репутация:
2642
|
|
Капчу вводить - не мешки ворочить!
[ intro ] Совсем недавно я занялся автореггером, но меня остановила простая капча..
Новый алгоритом расшифровки писать было не охото. Я решил сделать всё гораздо проще.
[ Приспособления ] [1] => Капча
[2] => Скрипт
[3] => Руки
[ Скрипт ] Возьмём простую капчу
PHP код:
<?php
$rand = rand(10000,99999);
for($i = 0; $i < 5; $i++)
{
$arr[$i] = substr($rand, $i, 1);
}
$im = imagecreate(89,20);
imagecolorallocate($im, 34, 34, 34);
$a = 0;
for($i = 0; $i < 5;$i++)
{
$color = imagecolorallocate($im, 255, 255, 255);
imagestring($im, 3, $a += 14, 4, $arr[$i], $color);
}
header("Content-type: image/jpeg");
imagejpeg($im, '', 100);
?>
(c) Isis
Нам нужны будут отличительные особенности каждого символа, поэтому мы переводим картинку капчи в символы _ и #, используя такой код:
PHP код:
<?
$captcha_url = 'http://site/captcha.php'; // Урл капчи
$a = 'img.jpg';
$f = fopen($a, 'w');
fwrite($f, file_get_contents($captcha_url));
fclose($f);
?>
<img src="<?=$a?>"><br><br>
<?
$split = 14; //Расстояние от начала одного символа до начала другого (в пикселях)
$i = imagecreatefromjpeg($a);
$o = imagecreate(imagesx($i), imagesy($i));
for ($n = 0; $n < 256; $n++)
{
imagecolorallocate($o, $n, $n, $n);
}
imagecopy ($o, $i, 0, 0, 0, 0, imagesx ($i), imagesy ($i));
$lim = 256/2;
$stroki = array();
for ($y = 0; $y < imagesy ($o); $y++)
{
$stroka = '';
for ($x = 0; $x < imagesx ($o); $x++)
{
if((imagecolorat($o, $x, $y) & 0xFF)>$lim)
{
$stroka .= "_";
}
else
{
$stroka .= "#";
}
}
array_push($stroki, $stroka);
}
$array = array();
for($i = 0; $i < count($stroki); $i++)
{
array_push($array, array());
foreach(str_split($stroki[$i], $split) as $arr)
{
if(strlen($arr) == $split)
{
array_push($array[$i], $arr);
}
}
}
for($k = 0; $k < count($array[0]); $k++)
{
for($pict = '', $i = 0; $i<count($array); $i++)
{
$pict .= $array[$i][$k]."\n";
}
echo(nl2br($pict."\n\n\n"));
}
?>
Как видно - изменять здесь нужно только 2 переменные: $captcha_url и $split.
Теперь необходимо состаить функцию, которая определит, что это за символ.
Как видно, первый символ - пустой, состоит из 20-ти таких строчек:
Поэтому код будет выглядеть так:
Код:
if(substr_count($picture,"##############") == 20){return NULL;}
Займёмся цифрой 0 (да, да, и такая есть).
Код:
if(substr_count($picture, "___#__") == 1 ){return 0;}
Потому что у неё одной строка ___#__ встречается 1 раз.
У цифры 1 - ##__########## повторяется 5 раз, поэтому и код будет таким
Код:
if(substr_count($picture, "##__##########") == 5){return 1;}
И так далее к каждому символу свой код.
И вот, у нас получилась функция для расшифровки капчи.
Код:
function what_pictured($picture)
{
if(substr_count($picture,"##############") == 20){return NULL;}
elseif(substr_count($picture, "___#__") == 1 ){return 0;}
elseif(substr_count($picture, "##__##########") == 5){return 1;}
elseif(substr_count($picture, "#__###########") == 1){return 2;}
elseif(substr_count($picture, "####__########") == 3 && substr_count($picture, "#____#########") == 3){return 3;}
elseif(substr_count($picture, "#__#__########") == 1){return 4;}
elseif(substr_count($picture, "####__########") == 2){return 5;}
elseif(substr_count($picture, "#____#########\n__##__########\n__############") == 1){return 6;}
elseif(substr_count($picture, "#__###########") == 2){return 7;}
elseif(substr_count($picture, "__##__########") == 5){return 8;}
else{return 9;}
}
Теперь просто-напросто добавляем в PHP скрипт выше эту функцию (в самый верх) и изменяем
Код:
echo(nl2br($pict."\n\n\n"));
на
Код:
echo(what_pictured($pict));
[ Итог ] Подводя итог можно сказать, что этот метод не всегда точен и работает только на простых капчах, но он прост. Я думаю, каждый разберётся, что к чему.
P.S. Получившийся код можете смотреть тут
P.P.S. Обо всех ошибках прошу сообщать в этой теме или в личку.
Последний раз редактировалось NOmeR1; 27.01.2008 в 20:16..
|
|
|

27.01.2008, 18:34
|
|
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
Провел на форуме: 19975136
Репутация:
4536
|
|
там обычный rand() нанесеный на готовую картинку )) это капчта только формально.
|
|
|

27.01.2008, 19:03
|
|
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме: 16641028
Репутация:
2371
|
|
NOmeR1, через час будет другая каптча и твоя статья будет неактуальная.
Да и к тому же больше 5 человек вы не зарегите т.к. попадете в бан лист..
Удачи регерам
|
|
|

27.01.2008, 19:06
|
|
Постоянный
Регистрация: 05.12.2006
Сообщений: 477
Провел на форуме: 11338585
Репутация:
441
|
|
NOmeR1 Спс за скрипт..отличн!!
Isis ну вот....... 
|
|
|

27.01.2008, 19:08
|
|
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме: 6023777
Репутация:
2642
|
|
Isis, хоть скрипт будет не актуален, статья будет актуальна. Я ведь не специально для твоего сайта писал. Я просто привёл пример.
|
|
|

27.01.2008, 19:13
|
|
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме: 16641028
Репутация:
2371
|
|
Усложнил чуть каптчу...
|
|
|

27.01.2008, 19:18
|
|
Постоянный
Регистрация: 11.11.2006
Сообщений: 595
Провел на форуме: 1845062
Репутация:
1079
|
|
Сообщение от Isis
Да и к тому же больше 5 человек вы не зарегите т.к. попадете в бан лист..
Удачи регерам
Это без прокси 
Не бойся, прокси продаются 
|
|
|

02.02.2008, 23:17
|
|
Постоянный
Регистрация: 29.09.2007
Сообщений: 617
Провел на форуме: 3250478
Репутация:
999
|
|
Сделай для букв =)
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|