ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Капчу вводить - не мешки ворочить!
  #1  
Старый 27.01.2008, 14:24
NOmeR1
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме:
6023777

Репутация: 2642


Отправить сообщение для NOmeR1 с помощью ICQ
Thumbs up Капчу вводить - не мешки ворочить!

[ intro ]
Совсем недавно я занялся автореггером, но меня остановила простая капча..
Новый алгоритом расшифровки писать было не охото. Я решил сделать всё гораздо проще.
[ Приспособления ]
[1] => Капча
[2] => Скрипт
[3] => Руки
[ Скрипт ]
Возьмём простую капчу

PHP код:
<?php
    $rand 
rand(10000,99999);
    for(
$i 0$i 5$i++)
    {
        
$arr[$i] = substr($rand$i1);
    }
    
$im imagecreate(89,20);
    
imagecolorallocate($im343434);
    
$a 0;
    for(
$i 0$i 5;$i++)
    {
        
$color imagecolorallocate($im255255255);
        
imagestring($im3$a += 144$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($ffile_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$i0000imagesx ($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..
 
Ответить с цитированием

  #2  
Старый 27.01.2008, 18:34
GreenBear
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
Провел на форуме:
19975136

Репутация: 4536


Отправить сообщение для GreenBear с помощью ICQ
По умолчанию

там обычный rand() нанесеный на готовую картинку )) это капчта только формально.
 
Ответить с цитированием

  #3  
Старый 27.01.2008, 19:03
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

NOmeR1, через час будет другая каптча и твоя статья будет неактуальная.

Да и к тому же больше 5 человек вы не зарегите т.к. попадете в бан лист..
Удачи регерам
 
Ответить с цитированием

  #4  
Старый 27.01.2008, 19:06
DimOnOID
Постоянный
Регистрация: 05.12.2006
Сообщений: 477
Провел на форуме:
11338585

Репутация: 441
Отправить сообщение для DimOnOID с помощью ICQ
По умолчанию

NOmeR1 Спс за скрипт..отличн!!
Isis ну вот.......
 
Ответить с цитированием

  #5  
Старый 27.01.2008, 19:08
NOmeR1
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме:
6023777

Репутация: 2642


Отправить сообщение для NOmeR1 с помощью ICQ
По умолчанию

Isis, хоть скрипт будет не актуален, статья будет актуальна. Я ведь не специально для твоего сайта писал. Я просто привёл пример.
 
Ответить с цитированием

  #6  
Старый 27.01.2008, 19:13
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

Усложнил чуть каптчу...
 
Ответить с цитированием

  #7  
Старый 27.01.2008, 19:18
Macro
Постоянный
Регистрация: 11.11.2006
Сообщений: 595
Провел на форуме:
1845062

Репутация: 1079


По умолчанию

Цитата:
Сообщение от Isis  
Да и к тому же больше 5 человек вы не зарегите т.к. попадете в бан лист..
Удачи регерам
Это без прокси
Не бойся, прокси продаются
 
Ответить с цитированием

  #8  
Старый 02.02.2008, 23:17
-Hormold-
Постоянный
Регистрация: 29.09.2007
Сообщений: 617
Провел на форуме:
3250478

Репутация: 999


Отправить сообщение для -Hormold- с помощью ICQ
По умолчанию

Сделай для букв =)
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ