• Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.
Иконка ресурса

Мануал Защита от ботов на уровне сервера

KateKate7912

who lost her mind
Пользователь
Разработчик
За знание датапака
За знание ядра
За веру и верность форуму
Медаль за активность на Форуме
Сообщения
1 131
Розыгрыши
0
Репутация
941
Реакции
576
Баллы
0
Привет! Уже засыпая сегодня ночью как обычно думала о какой то фигне, в общем как обычно. :yao ming:
Понимаю что для многих защита от ботов на уровне сервера фантастика, но прошу уделить пару минут внимания)
Я разобью по этапам план разработки сего чуда, и обьясню принцип работы.
Защита будет работать по принципу защит со времен динозавров, но все же, я считаю что это лучший вариант.
В принципе можно взять уже готовое, и переписать под то что описываю я ниже. Просто встречала уже подобное, но не с таким широким функционалом.

Поехали фантазировать:
1. Самая ответственная часть, это написание системы слежки за действиями игроков.
Я понимаю что это сейчас будет примитивно, но да да! Система должна анализировать поведение игроков, а именно время повторных действий.
Под этими действиями я подразумеваю время повторного использования умений, интервал атаки, и другие важные факторы.
Все бот программы не имеют своего интеллекта, и не в состоянии выполнять свои действия хаотично.
2. Все мы знаем, что игроки используют как минимум 2-3 окна под бот программой, а следственно мы пишем проверку по ip адресу или hwid на расстояние игроков друг от друга с одним и тем же ip адресом или hwidОМ. (Это будет дополнительным рычагом для анализа игрока и подозрения на бота).
3. Вводим команду .bot для игроков и систему балов до 5ти. (Пишем проверку, и запрещаем кидать команду на тех кто не в режиме боя, так же использование команды на игрока не чаще чем раз в 30 минут.)
4. Когда система заподозрит бота, вводим титул игроку и его окнам красным шрифтом "Подозрение на бота", что бы игроки могли проверить в живую и если что дать команду .bot (Всего как указано выше 5 балов для перемещения в комнату (об этом будет в 6 пункте).
5. При подозрении на бота система пишет в пм игроку с вопросами на подобии викторины. 2+3=5 ,7+7=14 и так далее.
Пишем около 50 вариантов ответа, так же меняем местами если было к примеру 2+3=5, второй выриант 3+2=5. (Обязательно легкие впоросы, что бы даже при охоте не напрягать мозг и давать ответ автоматически).
Система задает 3 вопроса, на них нужно дать 3 ответа. Если один был ошибочный, дать ответ на новый вопрос (больше 5ти ошибок не допускается, иначе будете перемещены в комнату (6 пункт)).
Ответы нужно дать в течении 5ти минут, иначе перемещение в комнату, об этом будет в 6 пункте.
6. Вводим инстанс тюрьму для каждого игрока отдельно. Когда игрок не ввел 3 ответа на 3 вопроса, он будет перемещен в инстанс тюрьму, где будет стоять чучело для тренировки. Чучело будет писать в чат о том, что его бить нельзя, иначе после 5ти ударов игрок будет заблокирован на сутки). Если же игрок не бьет чучело, то через 3 минуты он выходит из тюрьмы. По логике вещей, бот программа после перемещения в комнату будет атаковать, спойлить это чучело всеми окнами. Вообще желательно сделать так, что бы система выдавала временный id или имя монстра которые находились рядом до перемещения в комнату (если бот ориентируется по ним), а так же ставить больше чучел если рядом было к примеру 3 разных монстра. В итоге получаем 3 чучела с разными id и именами, бот их атакует и блокируется.
Или можно поступить проще. Спавнить монстров которые были в округе (определенное расстояние), и выдавать блокировку за атаку в этой комнате.

Знаю что некоторым ребятам тут сие чудо под силу реализовать) Так же кто то может добавить в комментариях свои варианты.
Думаю это отличный вариант в плане защиты от ботов, хотя против клиентских защит ничего против не имею. Если их использовать в паре, то будет вообще отлично.:eek:_O:
 
Последнее редактирование:
только если научить бота определять тип "визуально", путем сравнения полученной картинки и уже имеющихся к примеру у бота в базе
Садитесь, пять. Снимаю шляпу.
Просто уже приходилось делать аналогичное. По этому плевать на имя текстурки и типы и т.д.
 

Садитесь, пять. Снимаю шляпу.
Просто уже приходилось делать аналогичное. По этому плевать на имя текстурки и типы и т.д.
Ну как пишут выше, можно добавить шумы, можно вообще не иконки предметов отсылать, и вопросы можно придумать более замысловатые, путей много. Тут вся суть в том, что мы не привязываемся к текстурам из которых можно получить какую-то информацию, что уже усложняет процесс обхода "защиты"
 
Последнее редактирование модератором:
Ну как пишут выше, можно добавить шумы, можно вообще не иконки предметов отсылать, и вопросы можно придумать более замысловатые, путей много. Тут вся суть в том, что мы не привязываемся к текстурам из которых можно получить какую-то информацию, что уже усложняет процесс обхода "защиты"
А я про текстурки говорил?! Вроде нет, я в них мало чего понимаю и нос в клиент не сую. По этому чтоб решать такие задачи приходится придумывать способы в которых не берется информацию из клиента / htm диалога капчи где будет писаться что-то вроде Weapon_draconic_bow_i00_0, хотя где это возможно, нужно юзать все уязвимости. По крайней мере в случае если нужно выбрать Драконик лук и нет указаний на имя ярлыка в клиенте, то это изи, даже если он будет с шумом.
 
А я про текстурки говорил?! Вроде нет, я в них мало чего понимаю и нос в клиент не сую. По этому чтоб решать такие задачи приходится придумывать способы в которых не берется информацию из клиента / htm диалога капчи где будет писаться что-то вроде Weapon_draconic_bow_i00_0, хотя где это возможно, нужно юзать все уязвимости. По крайней мере в случае если нужно выбрать Драконик лук и нет указаний на имя ярлыка в клиенте, то это изи, даже если он будет с шумом.
ну это уже не каждый ботовод осуществит, а вообще, на каждую идею "защиты" можно придумать ей противоположную, вопрос в том, сколько это займет времени и у кого будет "обход"
 
Надеюсь, что не сочтут за рекламу, но могу "предложить" выше-предложенный вариант защиты. На данный момент - наброски, написанные за 30 минут. Любые правки по желанию заказчика.
 
Надеюсь, что не сочтут за рекламу, но могу "предложить" выше-предложенный вариант защиты. На данный момент - наброски, написанные за 30 минут. Любые правки по желанию заказчика.
норм.
 
Надеюсь, что не сочтут за рекламу, но могу "предложить" выше-предложенный вариант защиты. На данный момент - наброски, написанные за 30 минут. Любые правки по желанию заказчика.
то, что я и описывал, но картинки же, бл**ь, нельзя отправлять на клиент :D
 
Надеюсь, что не сочтут за рекламу, но могу "предложить" выше-предложенный вариант защиты. На данный момент - наброски, написанные за 30 минут. Любые правки по желанию заказчика.
Взлом антиКапчи будет примерно таким, плюс минус.
1. Парсим диалог, получаем то что он хочет чтоб мы определили (к примеру это ботинки)
2. Парсим весь список итемов из htm диалога.
3. Вероятно, название в диалоге будет типо src="icon.etc_alphabet_f_i00", а это уже ключ...
4. Из клиента парсим все названия иконок и их ID ( для удобности можно в MySQL всунуть все названия иконок, id)
5. У нас есть список из ID, поищем каждый итем в таблицах от сервака, SELECT `bodypart` FROM `armor` WHERE item_id=Айди Итема, если не тут, так веапонсе или среди итемов.
6. Теперь у нас предположительно есть айди итемов, его иконка, и известнен тип итема (feet, gloves, legs...).
7. Осталось дело за малым, мухи отдельно, котлеты отдельно. Теперь весь наш список с итемами, выбрасываем всё и оставляем только feet (хотя можно было просто это в запросе указать, но ладно), определим его поочередный номер из общего списка html диалога (я просто думаю что сервер сверяет капчу по номеру, т.е. от 1 к 9 ).
8. Отправляем к примеру 3 (на третий позиции были ботинки). Теперь можно отправляять на серв)

Как-то примерно так, можно сократить мои действия примерно в два раза и сделать на на много легче, хитрее, но тогда пришлось бы больше объяснять, было бы не ещё меньше понятно.
 
Взлом антиКапчи будет примерно таким, плюс минус.
1. Парсим диалог, получаем то что он хочет чтоб мы определили (к примеру это ботинки)
2. Парсим весь список итемов из htm диалога.
3. Вероятно, название в диалоге будет типо src="icon.etc_alphabet_f_i00", а это уже ключ...
4. Из клиента парсим все названия иконок и их ID ( для удобности можно в MySQL всунуть все названия иконок, id)
5. У нас есть список из ID, поищем каждый итем в таблицах от сервака, SELECT `bodypart` FROM `armor` WHERE item_id=Айди Итема, если не тут, так веапонсе или среди итемов.
6. Теперь у нас предположительно есть айди итемов, его иконка, и известнен тип итема (feet, gloves, legs...).
7. Осталось дело за малым, мухи отдельно, котлеты отдельно. Теперь весь наш список с итемами, выбрасываем всё и оставляем только feet (хотя можно было просто это в запросе указать, но ладно), определим его поочередный номер из общего списка html диалога (я просто думаю что сервер сверяет капчу по номеру, т.е. от 1 к 9 ).
8. Отправляем к примеру 3 (на третий позиции были ботинки). Теперь можно отправляять на серв)

Как-то примерно так, можно сократить мои действия примерно в два раза и сделать на на много легче, хитрее, но тогда пришлось бы больше объяснять, было бы не ещё меньше понятно.
В диалоге не передается имя иконки, только ид, имена известны только серверу:
Код:
"<button action=\"bypass -h htmbypass_calypso.antibot:check2 " + i + "\" fore=\"Crest.crest_" + Config.REQUEST_ID + "_" + imgs.get(i).getId() + "\" back=\"Crest.crest_" + Config.REQUEST_ID + "_" + imgs.get(i++).getId() + "\" width=32 height=32>"
 
В диалоге не передается имя иконки, только ид, имена известны только серверу:
Код:
"<button action=\"bypass -h htmbypass_calypso.antibot:check2 " + i + "\" fore=\"Crest.crest_" + Config.REQUEST_ID + "_" + imgs.get(i).getId() + "\" back=\"Crest.crest_" + Config.REQUEST_ID + "_" + imgs.get(i++).getId() + "\" width=32 height=32>"
Это не сильно меняет ситуацию.
Тем не менее, этого достаточно чтоб отсечь и 99% ботов и игроков)))
 
у меня нечто подобное запилено
подозреваемым требуется по требованию ввести цифры/буквы с картинки, которая шлется с сервера по всем известному способу - как значок клана
в самом диалоге имеется лишь запрос типа таких
Код:
<img src="Crest.crest_1_1" width=128 height=64>
где последнее число - это номер картинки с капчей (я к примеру использую 1000 разных изображений, т.е. у меня подставляется число от 1 до 1000 в название).
если кто-то думает что 1к изображений это мало и можно достаточно быстро составить таблицу соответствия - на каком номере что изображено, то хочу обломать - имеющиеся картинки периодически обнуляются и генерятся новые, с другими рандомными символами, т.е. составлять таблицу соответствий просто бессмысленно.

единственная проблема такой реализации - это то что в Crest.utx может оказаться старое изображение, но конкретно у нас это решается тем что данный пак в клиенте перезаписывается апдейтером - топорно конечно и излишний расход трафика (пусть и незначительный) на повторные отсылки изображений после обновления клиента, но к сожалению со стороны сервера нельзя каким-то пакетом запросить удалить значок с таким-то ид из данного пака.
 

Вложения

  • 1d2379937536423ecd3fd1e1b06da232.jpg
    1d2379937536423ecd3fd1e1b06da232.jpg
    331,2 КБ · Просмотры: 183
Последнее редактирование:
Назад
Сверху Снизу