Форум программистов, компьютерный форум, киберфорум
C#: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 1
Регистрация: 30.07.2016
Сообщений: 122

Принцип бота

20.11.2016, 22:33. Показов 2011. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Я хотел бы в будущем, когда научусь программировать, написать бота для игры (игр). Я немного подумал и в целом это выглядит так:
1. Считать информацию из игры
2. Произвести с полученными данными операции
3. Отдать новые команды в игру посредством симуляции клавиатуры и мыши.

Так можно будет?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.11.2016, 22:33
Ответы с готовыми решениями:

Создание бота
Можете посоветовать с чего начать,с каких источников можно брать эту инфу.Хочу попробовать себя в создание ботов для мморпг и др.И что ещё...

Написание бота
Привет всем! На C# пишу не давно. Подскажите, можно ли на нем написать бота который заходит на сайт под своим именем и паролем и кликает по...

Создание бота
Доброго времени суток всем! Задался идеей сделать бота для мобильной игры "Битва Замков", т.к. можно все это дело запустить на...

5
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
21.11.2016, 01:29
зависит от конкретной реализации конкретной игры, но в 99.(9)% это не проканает, ибо, таких умных,без обид, как ты, всегда было чуть более чем до...
1
0 / 0 / 1
Регистрация: 30.07.2016
Сообщений: 122
21.11.2016, 03:02  [ТС]
Diamante, мне интересен сам процесс. Так сказать в научных целях. Ладно. Я понял, что можно.
0
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
21.11.2016, 07:18
Цитата Сообщение от Native16 Посмотреть сообщение
3. Отдать новые команды в игру посредством симуляции клавиатуры и мыши.
На 50% прокатит. какие то игры идут через direct input.
Цитата Сообщение от Native16 Посмотреть сообщение
2. Произвести с полученными данными операции
Но распознавание изображения весьма не простая операция
Цитата Сообщение от Native16 Посмотреть сообщение
1. Считать информацию из игры
Об этом подробнее Из памяти? Ну 99.9% игр защищают свои данные, а с ММО такое вообще не прокатит.
Так как все проверки выполняются на стороне сервера
1
 Аватар для iDReeM
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
22.11.2016, 04:33
Лучший ответ Сообщение было отмечено Native16 как решение

Решение

как я понимаю, речь идет об онлайн игре, ибо для оффлайн игр боты не делают.
Вопрос в игре и ее защите.

вариант 1:
OpenProcess (хапаем хендлы процесса, или берем готовые из системы, у каждого свои методы) -> ReadProcessMemory (читаем нужные данные) -> SendMessage (реагируем).
вариант 2:
Нативная Dll -> инжект -> чтение памяти unsafe (интернал не нуждается в ReadProcessMemory) -> передача данных процессу, для визуализации и настройки -> из нутри уже можно moue_event, keybd_event... (в качестве реакции)

Добавлено через 18 часов 10 минут
пару часов назад мне отписался илюха предок, так вот: он автор бота для R2Online, он инжектит в процесс Dllку, она данные собирает, заносит в структуру и передает в общую память*(у дллки и процесса общая память), класс клиента: (а с программы, читает эту общую память)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
typedef DWORD (WINAPI*pRecvMem)(LPVOID Data);
 
struct SESION_PARM
{
    LPVOID Class;
    LPVOID Echo;
};
 
 
CBotClient::CBotClient(CHAR * lpEventName,CHAR * lpEventTerminationName,CHAR * lpFileShareName)
{
    // Открываем объект-событие для синхронизации 
    // ввода и отображения
    hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, lpEventName);
 
    if(hEvent == NULL)
    {
        MessageBoxA(0,"OpenEvent: Error!",0,MB_OK | MB_ICONERROR | MB_SYSTEMMODAL);
//      fprintf(stdout,"OpenEvent: Error %ld\n", 
//          GetLastError());
//      _getch();
        return;
    }
 
    // Открываем объект-событие для сигнализации о
    // завершении процесса ввода
    hEventTermination = OpenEvent(EVENT_ALL_ACCESS, 
        FALSE, lpEventTerminationName);
 
    if(hEventTermination == NULL)
    {
        MessageBoxA(0,"OpenEvent (Termination): Error!",0,MB_OK | MB_ICONERROR | MB_SYSTEMMODAL);
//      fprintf(stdout,"OpenEvent (Termination): Error %ld\n", 
//          GetLastError());
//      _getch();
        return;
    }
 
    // Открываем объект-отображение
    hFileMapping = OpenFileMapping(
        FILE_MAP_READ | FILE_MAP_WRITE, FALSE, lpFileShareName);
 
    // Если открыть не удалось, выводим код ошибки
    if(hFileMapping == NULL)
    {
        MessageBoxA(0,"OpenFileMapping: Error!",0,MB_OK | MB_ICONERROR | MB_SYSTEMMODAL);
//      fprintf(stdout,"OpenFileMapping: Error %ld\n", 
//          GetLastError());
//      _getch();
        return;
    }
 
    // Выполняем отображение файла на память.
    // В переменную lpFileMap будет записан указатель на
    // отображаемую область памяти
    lpFileMap = MapViewOfFile(hFileMapping, 
        FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
 
    // Если выполнить отображение не удалось,
    // выводим код ошибки
    if(lpFileMap == 0)
    {
        MessageBoxA(0,"MapViewOfFile: Error!",0,MB_OK | MB_ICONERROR | MB_SYSTEMMODAL);
//      fprintf(stdout,"MapViewOfFile: Error %ld\n", 
//          GetLastError());
//      _getch();
        return;
    }
}
 
 
CBotClient::~CBotClient(void)
{
}
 
 
 
static unsigned _stdcall ServerConnect(LPVOID Parm)
{
    if (Parm)
    {
        SESION_PARM * cl = (SESION_PARM*)(Parm);
 
        if (cl)
        {
            DWORD dwRetCode = 0;
            CBotClient * Serv      = (CBotClient*)(cl->Class);
            pRecvMem     _pRecvMem = (pRecvMem)(cl->Echo);
 
 
            // Цикл ввода. Этот цикл завершает свою работу,
            // когда пользователь нажимает клавишу <ESC>, 
            // имеющую код 27
            while(TRUE)
            {
                _pRecvMem(Serv->lpFileMap);
                SetEvent(Serv->hEvent);
                Sleep(200);
            }
 
            // После завершения цикла переключаем оба события
            // в отмеченное состояние для отмены ожидания в
            // процессе отображения и для завершения этого процесса
            SetEvent(Serv->hEvent);
            SetEvent(Serv->hEventTermination);
 
            // Закрываем идентификаторы объектов-событий
            CloseHandle(Serv->hEvent);
            CloseHandle(Serv->hEventTermination);
 
            // Отменяем отображение файла
            UnmapViewOfFile(Serv->lpFileMap);
 
            // Освобождаем идентификатор созданного
            // объекта-отображения
            CloseHandle(Serv->hFileMapping);
        }
 
    }
 
    return 0;
}
 
 
BOOL CBotClient::StartSesion(LPVOID FuncEcho)
{
    SESION_PARM * sesion = new SESION_PARM;
    sesion->Class = (LPVOID)this;
    sesion->Echo  = FuncEcho;
 
    //return (_beginthreadex(0,0,ServerConnect,sesion,0,0) != NULL);
    return (CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ServerConnect, sesion, NULL, NULL)!= NULL);
}
1
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
22.11.2016, 07:58
На самом деле инжект помогает если у игры нет спец средств защиты и проверок.
А для более менее защищёных, будет или срабатывать защита (а так до бана не далеко), или данные каждый раз будут иметь разные адреса.
Так что если дело сводится к простому кликеру. то проще зайти со стороны эмуляции directinput ввода, и распознавания изображения. ИМХО. Если задача отслеживать какие то параметры и принимать то или иное решение, то как минимум придётся читать память процесса.

Создать полноценного бота который будет проходить инсты в полноценных играх, почти анрил, так как придётся писать ИИ

PS я конечно не профи, у меня всего только 1 чит за плечами (в образовательных целях), и один save editor , и до текущей осени к этой теме не возвращался
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2016, 07:58
Помогаю со студенческими работами здесь

Круглосуточная работа бота
Есть бот на C# ASP.NET MVC, который меняет название группы вк. Название меняется только при обновлении страницы, а как мне сделать, чтобы...

Как залить бота в ВК?
Как залить бота в вк?

Создать русского бота для Д3
Создать русского бота для д3 ))

Amazon размещение телеграмм-бота
Возможна ли на Amazon разместить телеграмм бота ? на с# ? кто то может помочь ? есть тестовый бот + акк на amazon

Почему Instagram блокирует бота?
Здравствуйте! Написал Instagram бота на C#. Через некоторое время инстаграм начинает блокировать лайки и подписки. Если захожу вручную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru