V3ct0r 2,117 Report post Posted June 3, 2017 Проект игрового Бота Всем привет! В данной теме я хочу Вам рассказать о своем проекте игрового бота. Бот - это специальная программа, выполняющая какие-либо действия автоматически или по указанному расписанию. Изначально я поставил себе цель написать программу, которая могла бы подключаться к серверу и торговать в ларьке. Таким образом, мне не надо запускать игровой клиент и держать его открытым. Для чего это нужно? Практического применения программа в данный момент не имеет, но я улучшил свои навыки программирования, то есть получил ценный опыт. Что умеет бот уже сейчас: 1) Подключаться к серверу, авторизовываться с использованием указанного аккаунта, выбирать персонажей и заходить в игру; 2) Ничего не делать (как вариант, растить фею); 3) Принимать сообщения со всех каналов (Система, GM, местный, мировой, торговый, гильдия, ЛС, отряд, лагерь); 4) Отправлять сообщения во все каналы; 5) Торговать в ларьке; 6) Делать простые линейные передвижения; 7) Читать .map файлы. Это нужно в будущем для навигации. В качестве демонстрации работы покажу два скриншота. На них бот подключается к серверу, успешно авторизуется, выбирает персонажа V3ctor, заходит на карту garner и создает торговый ларек по координатам (2232, 2782). Кроме того, каждые 15 секунд бот пишет сообщение в местный чат, зазывая игроков заглянуть в ларек: Из технических подробностей отмечу, что разработка ведется на языке C++, так как это мой основной язык программирования. Для сетевого ввода/вывода была выбрана библиотека libevent, что обеспечивает кроссплатформенность бота. Что касается дальнейшего развития, у меня есть следующие идеи: 1) Автоматический бафер, который будет бегать за Вашим персонажем, бафать и лечить его; 2) Классический бот для прокачки персонажей, фарма монстров, добычи ресурсов. То есть программа будет искать монстров (ресурсы) и атаковать (добывать) их; 3) Интерактивный помощник для игроков. Например, такой бот стоит около фонтана в Аргенте, к нему походят игроки и спрашивают в ЛС/местный чат где находится такой-то NPC. Затем бот следует до указанного NPC, тем самым показывая игрокам где он находится. Или у него можно спросить, какая погода в NNNN: программа подключится к серверу погоды в Интернете, получит ответ и скажет погоду игрокам; 4) Автоматический GM-модератор, который банит игроков за мат в чатах или торговые сообщения в неположенных каналах. Так же данная программа может являться основой для кастомного клиента игры: к ней можно прикрутить графику и GUI. На этом пока все. Пишите что думаете о проекте в этой теме, возможно у Вас есть какие-либо интересные идеи применения бота. Сразу скажу, что меня не интересует моральная сторона вопроса, то есть писать что бот - это плохо, а я плохой человек не нужно. Как я писал выше, разработку веду для себя в качестве хобби, в свободное время. 6 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
destroger 12 Report post Posted October 26, 2017 Когда можно будет увидеть сие чудо в доступе...? Quote Share this post Link to post Share on other sites
trayfan 0 Report post Posted October 27, 2017 Хотелось бы увидеть код к примеру на гитхабе, чтобы можно было исследовать и предлагать различные реализации. Quote Share this post Link to post Share on other sites
Kolumb 5 Report post Posted October 27, 2017 4 минуты назад, trayfan сказал: Хотелось бы увидеть код к примеру на гитхабе, чтобы можно было исследовать и предлагать различные реализации. Поддерживаю. Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted October 27, 2017 В 26.10.2017 в 09:19, destroger сказал: Когда можно будет увидеть сие чудо в доступе...? Проект был остановлен, так что, скорее всего, никогда. 7 часов назад, trayfan сказал: Хотелось бы увидеть код к примеру на гитхабе, чтобы можно было исследовать и предлагать различные реализации. 7 часов назад, Kolumb сказал: Поддерживаю. Лучше исследуйте исходные коды сервера и клиента. Все, что есть в боте, там тоже есть. Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
trayfan 0 Report post Posted October 28, 2017 а из-за чего проект был остановлен? Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted October 28, 2017 56 минут назад, trayfan сказал: а из-за чего проект был остановлен? Из-за отсутствия интереса и времени Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
WVWMK 121 Report post Posted October 29, 2017 18 часов назад, V3ct0r сказал: Из-за отсутствия интереса и времени Как вариант - можно выложить "кастрированного" бота, вдруг у кого руки дойдут доделать или фишки новые прикрутить 1 Quote Делай добро и бросай его в воду Share this post Link to post Share on other sites
Asakura007 0 Report post Posted October 18, 2021 Поделись формой запроса для авторизации, или хотя бы в каком файле капать из исходного кода. Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted October 23, 2021 On 10/18/2021 at 5:01 PM, Asakura007 said: Поделись формой запроса для авторизации, или хотя бы в каком файле капать из исходного кода. Структуру логин-пакета можно посмотреть в исходных кодах клиента в файле ProCirculateCS.cpp, в методе CProCirculate::Login(). 1 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
Asakura007 0 Report post Posted October 29, 2021 Как для человека изучающий java что то трудновато переделать метод CProCirculate::Login(). и сформулировать запрос правильно, к примеру я подключаюсь к серверу и получаю формат даты, если я не ошибаюсь то это и есть ключ который я должен отправить обратно в месте со всеми данными , далее не закрывая соединение пытаюсь отправить в одну строку через пробелы (логин парольМД5 версию ключ) без кодировки без нечего, и соединение тупо сбивается ,снифер показывает что я должен отправлять еще и мак адрес, пробовал и с ним но без толку , хотелось все таки увидеть ваш чистый код без каких то внешних ссылок. Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted November 10, 2021 On 10/29/2021 at 7:22 PM, Asakura007 said: Как для человека изучающий java что то трудновато переделать метод CProCirculate::Login(). и сформулировать запрос правильно, к примеру я подключаюсь к серверу и получаю формат даты, если я не ошибаюсь то это и есть ключ который я должен отправить обратно в месте со всеми данными , далее не закрывая соединение пытаюсь отправить в одну строку через пробелы (логин парольМД5 версию ключ) без кодировки без нечего, и соединение тупо сбивается ,снифер показывает что я должен отправлять еще и мак адрес, пробовал и с ним но без толку , хотелось все таки увидеть ваш чистый код без каких то внешних ссылок. Нужно получить MD5-хэш пароля, перевести его в верхний регистр и зашифровать алгоритмом DES используя строку с датой и временем подключения к серверу из пакета ID 940. Пакет отправляется не строкой, а в виде массива байт, так как протокол бинарный. Пример записи логин-пакета в выходной буфер на C++ может выглядеть следующим образом: // Записать пакет в буфер void CLoginPacket::write(CBinaryWriter& Writer) { // Буфер под зашифрованный пароль char pass_buf[128] = {0x00}; // Длина зашифрованного пароля unsigned short int pass_len = 0; // Зашифруем пароль passencrypt(pass_buf, pass_len); // Записываем пакет Writer.WriteString(m_nobill); // "nobill" Writer.WriteString(m_login); // Логин Writer.WriteBytes(pass_buf, pass_len); // Зашифрованный пароль Writer.WriteString(m_mac_address); // MAC-адрес Writer.WriteInt16(m_flag); // 136 Writer.WriteInt16(m_version); // 911 } Чтобы записать строку, сначала необходимо записать 2 байта её длины с учетом нулевого байта, а далее непосредственно байты строки плюс нулевой байт. С массивом байт, чем будет являться зашифрованный пароль, аналогично, только без учета нулевого байта. При отладке советую использовать сниффер, подойдет даже WPE Pro, и сравнивать пакеты от Вашей программы с пакетами, которые отправляет Game.exe. В случае с логин-пакетом, они должны быть побайтово одинаковы, кроме поля с паролем, т.к. пароль каждый раз будет шифроваться с разными ключами. Отладку также лучше проводить на "чистых" серверных файлах, без каких-либо модификаций, например, защиты от того же WPE Pro. 2 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted November 11, 2021 @Asakura007 Забыл добавить, что в приведенном примере кода опущена запись заголовка пакета, который состоит из длины пакета (2 байта), числа 0x80000000 (4 байта) и ID пакета (2 байта). Таким образом, полная запись логин-пакета будет выглядеть так: // Записываем пакет Writer.WriteInt16(length); // Где length - длина пакета Writer.WriteInt32(0x80000000); Writer.WriteInt16(431); Writer.WriteString(m_nobill); // "nobill" Writer.WriteString(m_login); // Логин Writer.WriteBytes(pass_buf, pass_len); // Зашифрованный пароль Writer.WriteString(m_mac_address); // MAC-адрес Writer.WriteInt16(m_flag); // 136 Writer.WriteInt16(m_version); // 911 22 hours ago, V3ct0r said: При отладке советую использовать сниффер, подойдет даже WPE Pro, и сравнивать пакеты от Вашей программы с пакетами, которые отправляет Game.exe. В случае с логин-пакетом, они должны быть побайтово одинаковы, кроме поля с паролем, т.к. пароль каждый раз будет шифроваться с разными ключами. Соответственно отладку необходимо выполнять при отключенном шифровании пакетов (GateServer.cfg, CommEncrypt = 0) 2 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted November 12, 2021 @Asakura007 В гайде "Исправление SQL-инъекции в AccountServer" я выкладывал исходный код эксплоита на C++, который подключается к серверу и отправляет логин пакет. Можно использовать его как рабочий пример. Проверь файл main.cpp, функцию send_login_packet() на 504 строке. 1 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites