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

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

KateKate7912

who lost her mind
Пользователь
Разработчик
За знание датапака
За знание ядра
За веру и верность форуму
Медаль за активность на Форуме
Сообщения
1 131
Розыгрыши
0
Репутация
941
Реакции
575
Баллы
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:
 
Последнее редактирование:
Самое годное решение не использовать капчу вообще, на своём серваке решал траблу немножко иначе. В каждом паравозе был пассивафкинвалидноатак моб, если его бьёшь > 60 сек, он сообщает игроку что ботоводить не есть хорошо и вобщем-то с мамкой его в кино ходил. После чего ебашит лоукик и пиздуешь на зону покурить пару часиков.
Решение годные, если бот будет бить моба и заметит что ХП моба перестает уменьшается в течении N сек и бот просто переключается на следующего моба... =)
 
  • Мне нравится
Реакции: risi

Так как тему подчистили, то просто оставлю ссылочку на маленький видосик, где наглядно показано, что картинки можно отправлять с сервера и ничего не менять в клиенте.

Соответственно капчу, в которой нужно выбрать предмет по типу броня\бижа\оружие\ресурсы и тд. можно сделать через этот метод, что даст возможность не привязываться к ид\текстурам клиента, и бот не сможет определить нужный тип, так как с сервера можно отправлять картинки с любым названием
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Что то я не увидел где тут HTML,

ты случайно не уебище KID ?
 
Что то я не увидел где тут HTML,

ты случайно не уебище KID ?
Уебище тут только ты, тебе видимо еще и в глаза кто-то нассал, скачай сборку и открой html bbs_boss_details или как-то так, и изучай его до усрачки
 
Последнее редактирование:
  • Мне нравится
Реакции: kick
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Вернусь на секунду к капче, может кто не знает но адреналин например (возможно другие коммерческие боты) используют сервис реального времени который стоит не дорого, там сидят типа китайцы и в реальном времени решают каптчи и добавляют сигнатуры в базу. т.е если картинка будет та-же (без шума) и ответы будут отсылаться те-же (особенно если они в хтмл) то любая каптча (в особенности арифметика) - уже априори обходятся без проблем и по умолчанию. По этому каптча решение должна быть "вне коробки". Конкретней усложнить им задачу (или же поднять расход на сервис).
Никто из читеров не будет сидеть над капчей и ловить ютх, все ищут алгоритм скрипта. А когда база картинок выше 5к...ну..ок...
 

    Vodka TreasureHunter

    Баллов: -8
    Данный пользователь ведет себя не адекватно, и не может общаться с пользователями
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
FpEIlW4.png


Ты нам хочешь сказать что у тебя там не обычной HTML со ссылкой на картинку <Icon.ZAPILIMNEDVERIJPG> , которая в клиенте(utx) ?

Кто их там генерирует "15 рандом чисел" ... моятвоянепониматьрускийнемое , ты в курсе что в клиенте нужны статичные данные для .dat и прочих хэндлов, че ты там генерить каждый раз собрался .utx .dat Файлы и отправлять их апдейтером ?

Чушь такая лишь бы поверили что мы не такие как все мы лучше ...


О еще бред подъехал, т.е ты думаешь что клиент каким то магическим способом путь к иконкам найдет и обработает, а всякий там не нужный игрок с ботом, вдруг этот путь не найдет .... ты вообще вкурсе как это работает ?

Прикинь....и все хранится на сервере...и кто писал что мы лучшие? Мы тут обсуждаем как улучшить секюрити на сервере с помощью сервера......
Оффтоп:
/* private static void doRename()
{
// change file names in 'Directory':
String absolutePath = "F:\\random images\\DONE";
File dir = new File(absolutePath);
File[] filesInDir = dir.listFiles();
for(File file:filesInDir)
{
String name = file.getName();
String generated_name = generateName();
String newName = generated_name + ".png";
String newPath = absolutePath + "\\" + newName;
file.renameTo(new File(newPath));
String fileNameWithOutExt = FilenameUtils.removeExtension(name);
Connection con = null;
PreparedStatement statement = null;
try
{
con = DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("INSERT INTO captcha (filename, random_name) VALUES (?, ?)");
statement.setString(1, fileNameWithOutExt);
statement.setString(2, generated_name);
statement.execute();
}
catch(Exception e)
{
//
}
finally
{
DbUtils.closeQuietly(con, statement);
}
}
}
private static final String CHAR_LIST = "1234567890";
private static String generateName()
{
StringBuffer randStr = new StringBuffer();
for(int i=0; i < 9; i++)
{
int number = getRandomNumber();
char ch = CHAR_LIST.charAt(number);
randStr.append(ch);
}
return randStr.toString();
}

/**
* This method generates random numbers
* Return int

private static int getRandomNumber()
{
int randomInt = 0;
Random randomGenerator = new Random();
randomInt = randomGenerator.nextInt(CHAR_LIST.length());
if (randomInt - 1 == -1)
{
return randomInt;
}
else
{
return randomInt - 1;
}
}
*/
 
Так как тему подчистили, то просто оставлю ссылочку на маленький видосик, где наглядно показано, что картинки можно отправлять с сервера и ничего не менять в клиенте.

Соответственно капчу, в которой нужно выбрать предмет по типу броня\бижа\оружие\ресурсы и тд. можно сделать через этот метод, что даст возможность не привязываться к ид\текстурам клиента, и бот не сможет определить нужный тип, так как с сервера можно отправлять картинки с любым названием
Идея гениальная, но не практичная.
"бот не сможет определить нужный тип"... да ладно...че вообще никак?! рили?
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Последнее редактирование модератором:

    Desquire

    Баллов: -13
    Данный пользователь ведет себя не адекватно, и не может общаться с пользователями

    ツsmile10ツ

    Баллов: -18
    ИПАТ ТЫ НИАДВОКАТНЫЙ!!!11!!!!!
Решение годные, если бот будет бить моба и заметит что ХП моба перестает уменьшается в течении N сек и бот просто переключается на следующего моба... :)
хыпэ падает, просто реген и статы бешеные, это было предусмотрено.
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.

Че за дед сад...вот пример:
Оффтоп:

<html noscrollbar>
<head>
<title>Captcha</title>
</head>
<body>
<center>
<font color=3097BF>You have %time% seconds to Enter Captcha</font><br>
<font color=A72E26>Choose What do you see in the picture:</font>
<img src="Crest.crest_1_%captchaId%" width=256 height=240>
<table width=250>
<tr>
<td width=125> <button value="%answer1%" action="bypass -h user_report answer 1" width=125 height=26 back="L2UI_CT1.Button_DF_Down" fore="L2UI_ct1.button_df"></td>
<td width=125> <button value="%answer2%" action="bypass -h user_report answer 2" width=125 height=26 back="L2UI_CT1.Button_DF_Down" fore="L2UI_ct1.button_df"></td>
</tr>
<tr>
<td width=125> <button value="%answer3%" action="bypass -h user_report answer 3" width=125 height=26 back="L2UI_CT1.Button_DF_Down" fore="L2UI_ct1.button_df"></td>
<td width=125> <button value="%answer4%" action="bypass -h user_report answer 4" width=125 height=26 back="L2UI_CT1.Button_DF_Down" fore="L2UI_ct1.button_df"></td>
</tr>
</table>
</center>
</body>
</html>


п.с. если твой сервер не умеет отправлять картинки с сервера, проблема в сервере....
 
Последнее редактирование модератором:
Че за дед сад...вот пример:
Оффтоп:

<html noscrollbar>
<head>
<title>Captcha</title>
</head>
<body>
<center>
<font color=3097BF>You have %time% seconds to Enter Captcha</font><br>
<font color=A72E26>Choose What do you see in the picture:</font>
<img src="Crest.crest_1_%captchaId%" width=256 height=240>
<table width=250>
<tr>
<td width=125> <button value="%answer1%" action="bypass -h user_report answer 1" width=125 height=26 back="L2UI_CT1.Button_DF_Down" fore="L2UI_ct1.button_df"></td>
<td width=125> <button value="%answer2%" action="bypass -h user_report answer 2" width=125 height=26 back="L2UI_CT1.Button_DF_Down" fore="L2UI_ct1.button_df"></td>
</tr>
<tr>
<td width=125> <button value="%answer3%" action="bypass -h user_report answer 3" width=125 height=26 back="L2UI_CT1.Button_DF_Down" fore="L2UI_ct1.button_df"></td>
<td width=125> <button value="%answer4%" action="bypass -h user_report answer 4" width=125 height=26 back="L2UI_CT1.Button_DF_Down" fore="L2UI_ct1.button_df"></td>
</tr>
</table>
</center>
</body>
</html>


п.с. если твой сервер не умеет отправлять картинки с сервера, проблема в сервере....
редактируй на "Проблема в тебе"
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Че за дед сад...вот пример:
Оффтоп:

<img src="Crest.crest_1_%captchaId%" width=256 height=240>


п.с. если твой сервер не умеет отправлять картинки с сервера, проблема в сервере....

Ты вкурсе что Crest. ЭТО UTX Файл, клиентский причем. Причем здесь иконки кланов и прочий бред что сказал тот ебучий пиздабол, я не очень понимаю
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
редактируй на "Проблема в тебе"
Хотел, но нафига лишний аггр..чел уверен в себе ))

Ты вкурсе что Crest. ЭТО UTX Файл, клиентский причем. Причем здесь иконки кланов и прочий бред что сказал тот ебучий пиздабол, я не очень понимаю
Ну...простыми словами..на сервере картинка может через байты переплыть в клиент...так-же как крест клана/али заливается на сервер и распостраняется всем, ты весь ее видишь, даже если друг с другого клана ее залил..не он же тебе ее лично не высылал...та-же идея...
 
Ты вкурсе что Crest. ЭТО UTX Файл, клиентский причем. Причем здесь иконки кланов и прочий бред что сказал тот ебучий пиздабол, я не очень понимаю
Ты в курсе, что этот файл = кэш? Ты в курсе что его генерит сам клиент из того что прислал эму сервер? Ты в курсе что недоношенный ублюдок, как оказалось, тут ты, так что иди и сношайся со своими родственниками, а моих не трогай :D
 
хыпэ падает, просто реген и статы бешеные, это было предусмотрено.
Изи. Пишется скрипт, смысл будет в том, что если у моба будет 10к HP, мы нанесли ему урону на 15к ХП и он не ласты не склеил, переключаемся на следующего.
На деле все эти попытки понять "бот или человек" создает больше проблем для игроков, чем для ботов, чем сложнее система выявления бота, тем умнее станет сам бот.
99% адреналинщиков не станут даже пытаться написать скрипт антикапчу в которой нужно будет 2+2 сложить.
Буквально 3 дня назад играл на сервере battlekings.ru, там нубо капча была, весь сервер на жопе сидел и не могли ботоводить по человечески, я сделал антикапчу, расшарил её, давал всем и ушел спать, на утро уже вижу в чате что толкают мою антикапчу за деньги , отписал ему, он хотел 3000 рублей. XD
 
Идея гениальная, но не практичная.
"бот не сможет определить нужный тип"... да ладно...че вообще никак?! рили?
только если научить бота определять тип "визуально", путем сравнения полученной картинки и уже имеющихся к примеру у бота в базе
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Хотел, но нафига лишний аггр..чел уверен в себе ))


Ну...простыми словами..на сервере картинка может через байты переплыть в клиент...так-же как крест клана/али заливается на сервер и распостраняется всем, ты весь ее видишь, даже если друг с другого клана ее залил..не он же тебе ее лично не высылал...та-же идея...
Это через что она там переплывает, магия ? Крест клана имеет значения 32х32, то что ты показал в HTML картинка 256х240, если от сервера клиенту нету лимита на размер - окей, но та чушь что этот придурок писал не как под это не подпадает ( разделить картинку 256х240 на 32х32, и отправлять Over 100 иконок - чущь ебаная).
Да и в любом случае тебе нужно отправлять картинку заранее(до отправки окна HTML), и быть уверенным что она упакуется в Crest.utx(так можно очень быстро юзеру засрать до нескольких гигов одних и тех же картинок с разными именами).
Ко всему прочему умный скриптер, может взять эту картинку с клиента, загрузить ее в обработчик и просто сравнивать байты, даже допустим вы там будите добавлять шум( тем самым какую то погрещность ), в любом случае если картинка близка к ранее обработанной, то ее можно считать той же самой. Отсюда и определять тип объект, не составит особого труда, даже если ты отправляешь его каждый раз с новым названием и меняешь немного.
 
Последнее редактирование модератором:
Это через что она там переплывает, магия ? Крест клана имеет значения 32х32, то что ты показал в HTML картинка 256х240, если от сервера клиенту нету лимита на размер - окей, но та чушь что этот придурок писал не как под это не подпадает ( разделить картинку 256х240 на 32х32, и отправлять Over 100 иконок - чущь ебаная).
Да и в любом случае тебе нужно отправлять картинку заранее(до отправки окна HTML), и быть уверенным что она упакуется в Crest.utx(так можно очень быстро юзеру засрать до нескольких гигов одних и тех же картинок с разными именами).
Ко всему прочему умный скриптер, может взять эту картинку с клиента, загрузить ее в обработчик и просто сравнивать байты, даже допустим вы там будите добавлять шум( тем самым какую то погрещность ), в любом случае если картинка близка к ранее обработанной, то ее можно считать той же самой. Отсюда и определять тип объект, не составит особого труда, даже если ты отправляешь его каждый раз с новым названием и меняешь немного.


С пизды твоей мамы он генерит, д**б**еб, Crest Это Crest utx, и нечто иное, пиздеть будешь в другом месте
Бомжара тупорылая, как и твои родственники которых ты как вижу ебешь круглые сутки! хуйло упоротое
Твоя наверное от рака сдохла что ты так на моей зациклился?
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Это через что она там переплывает, магия ? Крест клана имеет значения 32х32, то что ты показал в HTML картинка 256х240, если от сервера клиенту нету лимита на размер - окей, но та чушь что этот придурок писал не как под это не подпадает ( разделить картинку 256х240 на 32х32, и отправлять Over 100 иконок - чущь ебаная).
Да и в любом случае тебе нужно отправлять картинку заранее(до отправки окна HTML), и быть уверенным что она упакуется в Crest.utx(так можно очень быстро юзеру засрать до нескольких гигов одних и тех же картинок с разными именами).
Ко всему прочему умный скриптер, может взять эту картинку с клиента, загрузить ее в обработчик и просто сравнивать байты, даже допустим вы там будите добавлять шум( тем самым какую то погрещность ), в любом случае если картинка близка к ранее обработанной, то ее можно считать той же самой. Отсюда и определять тип объект, не составит особого труда, даже если ты отправляешь его каждый раз с новым названием и меняешь немного.

Насчет размеров, я укоротил высоту чтобы скролбара не было, сама картинка тут не причем. Насчет кол-во мб у клиента, ~2000 картинок = ~30мб, не проблема. Шум рандомный для каждой картинки при каждом отправлении, так что удачи вычислять разницу. Руками это достаточно сложно победить, а вот авто-сервис справится со временем, но цена сервиса возрастет.
 
Назад
Сверху Снизу