C# класс для решения текстовой математической капчи на английском языке

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
Даже в наше время ещё остались сайты, которые имеют в виде защиты - обычную текстовую капчу с математическим действием. Вот и мне попался такой вчера, поэтому было решено запилить свой небольшой способ "разгадывания" мат. примеров, которые он выдаёт.

Вообще, большинство способов сводится к тому, что нужно выполнить действие "A + B = " - ради такого даже писать ничего не нужно, достаточно просто спарсить это значение и выполнить его в кубике JavaScript, там пример решится и выведется результат. Но всё было бы слишком просто и грустно, если бы сайт не выдавал примеры вроде:
9 − ? = five
? × sixty three = 126
Тут уже нужно парсить известные и неизвестные, заменять слова на числа и т.д. Поэтому вариант использовать кубик JavaScript - точно отпадает. И ещё если использовать безбраузерный (get/post) вариант, то запускать JavaScript будет в таком случае - слишком накладно ради решения капчи. Вот так и родился этот небольшой класс для решения текстовых математических каптч. Мне он нужен только для одного сайта, но может быть кому-то пригодится, поэтому решил выложить его на всеобщее обозрение, код в одном месте (преобразование из буквенных вариаций цифр в числовые) вышел немного костыльным, но вполне рабочим.

Класс умеет решать математические примеры с числами от 0 до 99, если они записаны в текстовом виде; умеет операции сложения, вычитания, умножения и деления; ему без разницы в каком месте пропущено число, главное чтоб пример в целом был корректным.

Код выложил на гитхабе: https://gist.github.com/lord-alfred/6020e7a5f60f06652101613c490a73f9

Использование:
1. Добавить данный класс вместе с неймспейсом к себе в "общий код"
2. В "директивах using" прописать
C#:
using ZPMathCaptchaSolver;
3. В кубике C# вызвать класс и решить капчу:
C#:
string captcha = project.Variables["text_captcha"].Value;

var mcs = new MathCaptchaSolver();
int result = mcs.Solve(captcha);
return Convert.ToString(result);
Всё.

PS:примеры капч, которые решает данный класс (тестировал на них):
- 3 = 5
+ 1 = 6
* 2 = 6
/ 5 = 2

8 - = 2
8 + = 12
3 * = 6
8 / = 2

5 - 3 =
4 + 2 =
2 * 4 =
6 / 3 =

x 6 = twenty four
x 6 = twenty-four
x 6 = fifty four
sixty three—forty-two =
× 6 = eighteen
sixty three—sixty two =
forty three—forty-three =
forty two+eighty-nine =
forty two+eighty-nine =
zero one*two =
zero / fiftynine =
one plus fifty =
sixty-two minus sixty-one =
six multiply seven =
sixty divide twenty =
 
Категория
Полезно

Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

DmitryAk

Client
Регистрация
14.12.2016
Сообщения
860
Благодарностей
817
Баллы
93
Посмотри на тему обратной польской записи и написания лексеров. Данная задача как раз под данные алгоритмы "заточена".
 
  • Спасибо
Реакции: Lord_Alfred

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
Посмотри на тему обратной польской записи и написания лексеров. Данная задача как раз под данные алгоритмы "заточена".
Кстати, точно - совсем забыл о ней :-) А ведь даже когда-то на паскале писал её)))
Но уже лень переписывать, говнокод с точки зрения нормального алгоритма, конечно, вышел )
 

pars

Пользователь
Регистрация
10.12.2016
Сообщения
78
Благодарностей
41
Баллы
18
Даже в наше время ещё остались сайты, которые имеют в виде защиты - обычную текстовую капчу с математическим действием. Вот и мне попался такой вчера, поэтому было решено запилить свой небольшой способ "разгадывания" мат. примеров, которые он выдаёт.
Спасибище ,очень пригодилось !
Но вот хотелось бы поправить по поводу сайтов - они не просто остались, появляются и новые сайты использующие такую капчу , за последнюю неделю натыкался на десяток сайтов в которых используются подобная капча (в некоторых вопрос написан на картинке),и все сайты сравнительно свежие 2017-2018 год.

Около полугода назад натыкался на исследование поведения пользователей относительно капчи - там был очень большой зашквар по поводу "рекапчи 2" точных цифр не помню , но over 50% юзеров если капа просила раздгадать картинки просто закрывало станицу,уверен что это как-то связанно ... возможно трейнинги/блогеры/сео издания начали на него ссылаться в рекомендациях или типа такого...
 
  • Спасибо
Реакции: Lord_Alfred

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
Не зря я всё таки тогда запилил этот говнокод для решения текстовых капч :-)
Сейчас снова встретился сервис, где такая капча, но там добавились несколько новых видов вопросов:
  1. Какое из двух чисел чётное? (Добавлена операция "?")
  2. Какое из двух чисел нечётное? (Добавлена операция "!")
  3. Какое из двух чисел больше? (Добавлена операция ">")
  4. Какое из двух чисел меньше? (Добавлена операция "<")
Теперь чтоб решать такого рода капчи - необходимо преобразовать их в следующий вид:
1 ! 2 = (правильный ответ: 1)
6 ? 9 = (правильный ответ: 6)
4 > 1= (правильный ответ: 4)
3 < 5 = (правильный ответ: 3)
Обновленный код всё там же, на гитхабе: https://gist.github.com/lord-alfred/6020e7a5f60f06652101613c490a73f9

PS: с четными/нечетными символами операций возможно намудил с точки зрения бинарных операторов, поправьте, плиз, если кто-то в курсе как их корректнее записать в один символ.
 
  • Спасибо
Реакции: Шива и gevolushn

Шива

Client
Регистрация
05.02.2018
Сообщения
1 084
Благодарностей
339
Баллы
83
Не зря я всё таки тогда запилил этот говнокод для решения текстовых капч :-)
Сейчас снова встретился сервис, где такая капча, но там добавились несколько новых видов вопросов:
  1. Какое из двух чисел чётное? (Добавлена операция "?")
  2. Какое из двух чисел нечётное? (Добавлена операция "!")
  3. Какое из двух чисел больше? (Добавлена операция ">")
  4. Какое из двух чисел меньше? (Добавлена операция "<")
Теперь чтоб решать такого рода капчи - необходимо преобразовать их в следующий вид:


Обновленный код всё там же, на гитхабе: https://gist.github.com/lord-alfred/6020e7a5f60f06652101613c490a73f9

PS: с четными/нечетными символами операций возможно намудил с точки зрения бинарных операторов, поправьте, плиз, если кто-то в курсе как их корректнее записать в один символ.
А оно будет работать с арабскими языками?
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
А оно будет работать с арабскими языками?
Только с английским предусмотрено и просто с цифрами. Но всегда можно написать предварительный конвертер, который будет перегонять твой арабский (или любой другой) текст в цифры и уже затем решать этим классом капчу :-)
 

Шива

Client
Регистрация
05.02.2018
Сообщения
1 084
Благодарностей
339
Баллы
83
Только с английским предусмотрено и просто с цифрами. Но всегда можно написать предварительный конвертер, который будет перегонять твой арабский (или любой другой) текст в цифры и уже затем решать этим классом капчу :-)
А есть вариант решения что бы ответ отдавался словами?
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113

Шива

Client
Регистрация
05.02.2018
Сообщения
1 084
Благодарностей
339
Баллы
83

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
Можешь сделать?)
Если напишешь в личку поделюсь дополнительной базой цифр слов,
Эта задача решается схожим образом как я писал выше - считай данным сниппетом число и потом делай обработку результата (перегон его в нужный формат).
Сделал бы сам и выложил другим на пользу )
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)