21 июня 2018 г.

Анти-АФК для World of Warcraft (Classic) на C#

Исполняемый файл:

https://drive.google.com/drive/folders/1JFV_2pdoLaLF_gDXPUHB9Zz4hpjjjIf9?usp=sharing




Требуемая версия установленного Framework.
.NET Framework 4.0

Исходный код:
[Source Code]

Использовать на свой страх и риск.

Как работает программа wow anti afk.


Программа не имеет графического интерфейса. Её достаточно запустить, и она будет всем отрытым окнам World of Warcraft отправлять перемещение вперёд и назад до момента закрытия. Для остановки просто закройте окно консольного приложения.


Как без программы оставаться 1 час онлайн?


Для этого необходимо остаться в любой таверне и в списке друзей поменять статус на "Отсутствует", в этом случае ваш персонаж останется онлайн в течение 1 часа.

Предыстория.


С появление World of Wacraft Classic проблема афк стала актуальна, поскольку через некоторое время вас выкидывает из игры и вам необходим снова отстаивать очередь. В этом случае вам необходим способ совершения каких то действий, что бы вы оставались в игре. Сейчас я расскажу как это можно сделать используя язык C#.

Немного теории.


Как же происходит передача нажатия клавиш окну в ОС семейства Windows? Пользователь нажимает любую клавишу, затем это передаётся драйверу клавиатуры, а затем он в свою очередь сообщает об этом операционной системе, и уже она используя механизм сообщений передаёт уведомление текущему активному окну. А значит, если мы сымитируем сообщения передаваемые операционной системой, тогда можно сделать какие то примитивные движения.

Захват и обработка сообщений.


Сейчас мы попробуем захватить узнать, что за сообщения приходят окну игры, для этого я воспользуюсь утилитой Microsoft Spy++ идущей в составе Microsoft Visual Studio. Запустим её и далее нацелим на наше окно.



  1. Нажимаем на бинокль.
  2. В появившемся окне можно попытаться найти по заголовку, либо используя "Прицел" и зажав на нём левую кнопку, перетащить его на окно с игрой. После чего в списке всех окон будет выделено окно с World of warcraft.
  3. Затем правый клик по окну и выбираем пункт "Messages"

  4. Далее мы увидим, при перемещении мыши по окну игры, либо при нажатии клавиш огромное количество сообщений, которые потом преобразовываются движком игры во взаимодействие с окружающим миром.

Для эмуляции действий игрока я буду использовать кратковременной перемещение игрока вперёд и назад, тем самым персонаж будет оставаться на месте. Но перед этим необходим понять, какие сообщения отсылаются окну. Для этого нажмём клавишу и зафиксируем показание в логе сообщений.


Я нажал клавишу вперёд, у меня это 'W'. Получается для эмуляции нам достаточно отправить три сообщения:
  1. WM_KEYDOWN с виртуальным значением клавиши 'W', а значит это событие когда игрок зажал эту клавишу.
  2. WM_CHAR со значением 246 (ANSI значение клавиши W), событие что произошёл ввод значения, но если не идёт ввод символа, тогда игра скорее всего будет игнорировать это событие при передвижении, но мы все равно передадим это сообщение.
  3. WM_KEYUP с виртуальным значением клавиши 'W', говорящее о том, что клавиша отжата и необходимо завершить передвижение.
Для отправки сообщений окну будет использована асинхронная WinAPI функцию PostMessage, и pinvoke сигнатура будет:

[DllImport("user32.dll")]
private static extern bool PostMessage(uint hWnd, int msg, int wParam, int lParam); 
 
После чего комбинируя нажатие 'W' и 'S' мы добьёмся желаемого результата.

Комментариев нет:

Отправить комментарий