Пример каптчи вот здесь -
http://longbowenterprise.gitee.io/slidercaptcha/
Оригинал будет иметь некоторое отличие (подробности в личке исполнителю).
Решить необходимо без использования браузера. На выходе нужно что то наподобие такого -
[0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-2,-2,-3,-3]
Бюджет имеется, жду ценовые предложения и сроки в личку.
Мы имеем дело с траекторией движения мышки.
В момент, когда мы кликнули по стрелочке - курсор получил значение 0 по оси Y.
Дальше идёт время, примерно 10ms или 100ms, за которое снимаются показатели значения Y.
Если курсор сдвинулся вверх - мы получили отрицательное значение.
Если курсор сдвинулся вниз - получили положительное значение.
Массив скорее всего ограничен по времени (иначе будет переполнение...), да и в целом каптча гадается около 1-2-5 секунд, а значит длина массива скорее всего не должна превышать 5000/10 или 5000/100 значений (короче за 1 секунду добавляется около 100 точек).
Тогда, если возьмем к примеру входящие данные, то сможем построить график траектории.
Если допустим генерировать массив случайных значений, то может получиться примерно следующее:
Как видим, реальная траектория имеет более ровный вид, а вот генерированное значение ботом - имеет слишком большой разброс.
Знакомый, говорит о том, что можно впринципе отсортировать массив значений по возрастанию, чтобы получить примерно такую траекторию:
Но... Скажем так палевно это, если чисто делать траекторию случайно сгенерированную. В каком-то видео
Дмитрий Нестерук показывал как разместить точки с указанным шагом на произвольном графике. Нужно наверно изучить ещё этот видос, чтобы понять что к чему...
Но, с другой стороны так как каптча, о которой мы говорим имеет открытый
исходный код, то уже оттуда мы можем узнать как именно производится проверка решения на стороне сервера. Если мы двигаем слайдер - магия формируется именно в самом JS, производятся все сравнения и тп. А вот на стороне сервера нужно иметь как-то быстро проверить валидная траектория или нет.
В итоге, можно встретить вот такой код, который может служить валидатором каптчи на стороне сервера:
var sum = n.Sum();
var avg = sum * 1.0 / n.Length;
var stddev = n.Select(v => Math.Pow(v - avg, 2)).Sum() / n.Length;
return stddev != 0;
Из этого кода понятно, что мы должны взять сумму всех элементов, разделить на количество элементов. И если результат не равен 0 (больше или меньше нуля) - значит можно считать что траектория валидна (хотя... ставлю под сомнение правильно ли это...).
Красота всего этого чуда в том, что сервер не знает что именно нагенерировал javascript на своей стороне (от слова совсем), и вполне вероятно, что данная каптча используется как "пустышка", которая служит для того, чтобы клиент отправил дополнительный запрос на сервер (где уже возьмется IP, UserAgent или ещё чего-то), и в случае если этот IP забанен - то не дать пользователю нагружать систему дальше (например, может быть в качестве ограничителя перед отправкой рекаптчи, ведь на проверку валидности рекаптчи также ресурс требуется, который больше, чем тот, который используется для данной каптчи предназначеной для отсеивания по IP и тп).
В своих размышлениях могу ошибаться... Но, думаю данное решение все же имеет место быть (лучше чем с браузере двигать ползунки...).
да никак
просто подписями светимся, не более.
А... Вот оно что, а то я закопался, и думал что банально чего-то не вижу...
так важен результат решения капчи )
Мне кажется, что само решение каптчи менее важно, чем способ решения - двигать мышкой в браузере, когда всё остальное без браузера очень не веселое занятие в многопотоке...