Аппаратный бот для Android на базе Arduino Leonardo

Привет! Давно не виделись 🙂

И сразу к делу 🙂 После успешной разработки Dwar Rapid Bot решил написать еще одного бота для любимой игры на Android, в которую частенько играю по вечерам. И при этом столкнулся с некоторыми проблемами.

Во-первых, чтобы бот смог работать непосредственно на устройстве, на котором установлена игра, нужно получить root-права, а для этого придется перепрошить устройство с потерей данных, и заново все настроить — установить все приложения, игры и так далее. Помимо этого, некоторые приложения после получения root-прав перестанут работать из соображений безопасности. Например, приложение от сбербанка отказывается работать на рутованных устройствах. Об этом я узнал, когда сделал root-права на одном из своих телефонов.

Во-вторых, если использовать эмулятор Android под Windows, например тот же BlueStacks, тогда можно обойтись без получения root-прав, но тогда игра будет работать на компьютере, и придется каждый раз переносить игровой прогресс между планшетом и эмулятором, что не очень-то удобно, к тому же не все игры поддерживают синхронизацию между разными устройствами.

Тем не менее, решение было найдено достаточно быстро 🙂 Узнав из сети, что Arduino Leonardo умеет эмулировать мышь и клавиатуру при подключении по USB, я решил попробовать использовать эту функцию на Android, для автоматизации игровых действий!

О воплощении этой идеи я рассказываю в следующем видео.

Ниже приведен пример скетча для реализации аппаратного кликер-бота на базе Arduino Leonardo.

#include <Mouse.h>
#include <Keyboard.h>
 
void setup() {
  
}
 
void loop() {
  
 Mouse.begin();
 delay(900);

 //двигаем курсор в правый верхний угол
 moveRU();
 delay(500);

 delay(3500);

 //двигаем чуть ниже на кнопку с рулеткой
 moveRouleteBTN();

//щелкаем на рулетке
 delay(100);
 Mouse.click(MOUSE_LEFT);

//теперь двигаемся к самой рулетке
 delay(500);
 moveRoulete();

 //щелкаем на рулетку
 delay(100);
 Mouse.click(MOUSE_LEFT);

 Mouse.end();

 //смотрим рекламу 55 сек

 delay(55000);

 //щелкаем НАЗАД
Mouse.begin();
delay(900);


//Выход из рекламы нажатием правой кнопкой мыши (виртуальная кнопка НАЗАД)
Mouse.click(MOUSE_RIGHT);
delay(100); 
//Mouse.click(MOUSE_RIGHT); // есть некоторая реклама, которая просит повторное нажатие для выхода

// выход из рекламы нажатием клавиши ESC на клавиатуре
//Keyboard.begin();
//delay(900);
//Keyboard.write(KEY_ESC);
//delay(500);
//Keyboard.end();

//ждем пока раскрутится рулетка
delay(12000);

//забираем награду

Mouse.click(MOUSE_LEFT);
delay(500);
Mouse.end();
delay(1000);

 //и погнали все по новой
}

void moveRU(){
   for (int i=0; i <= 30; i++){
    Mouse.move(90,-90);
    delay(9);
   }
}

void moveRouleteBTN(){
   for (int i=0; i <= 3; i++){
    Mouse.move(-11,20);
    delay(9);
   }  
}

void moveRoulete(){
   for (int i=0; i <= 10; i++){
    Mouse.move(-33,16);
    // Mouse.move(-29,20); // 1920*1200
    delay(9);
   }  
}

Данный способ можно применять не только для планшета или телефона, но и для обычного ПК, а также любого другого устройства, которое поддерживает работу с клавиатурой и мышью по интерфейсу USB!

Спасибо за внимание! Жду ваших комментариев 🙂