Hackear Juego Clicker Heroes Con Arduino

by sabas1080 in Circuits > Arduino

1751 Views, 2 Favorites, 0 Comments

Hackear Juego Clicker Heroes Con Arduino

5587773e2e7fb67cc30001b3.jpeg
Hackear juego Clicker Heroes con Arduino Micro
10574290_835255963218701_5880197612271134947_n.jpg

Hace poco descubrimos en Steam un juego llamado "Clicker Heroes" en el que por medio de clicks obtienes monedas en el juego para mejorar habilidades de monstruos.

Gabo un amigo del hackerspace realizo un pequeño hack con el Arduino Micro (o Leonardo) y su emulación de USB HID de un mouse en el que automatiza los click que se requieren y con eso te ahorras miles de horas perdidas obtenido monedas.

Este hack se puede aplicar a otros juegos, espero ver sus mods ;)

Material

1086-00.jpg

Lo único que necesitamos en esta ocasión es

  • Arduino Micro o Leonardo
  • Cable USB

Codigo Y USB HID

11246369_835255969885367_7912721101687178660_n.jpg
arduino_hack_game.png

Los Arduino Micro o Leonardo tienen un microcontrolador 32u4 que a diferencia del 328p del Arduino UNO, el 32u4 tiene integrada la emulación USB HID (human interface device) que nos permite emular un teclado o mouse como el que usamos cotidianamente en nuestra computadora.

Arduino nos proporciona unas librerías para que podamos manejar la emulación de una manera sencilla, este es el código usado para automatizar los clicks

<br><p>/*<br>By Gabo Redfield - The inventors House
programa para el arduino leonardo</p><p>Manda pulsaciones y mueve el raton de forma cuadrangular en la pantalla del juego presentado.
Los procesos no son seriales, así que en el instante que se active o se desactive, va a estar en el estado que se quedo hasta que se reanude.</p><p>*/
short int bot = 8; // declaramos variable de cuál va a ser nuestro botón para que trabaje
int endw = 250; // declaramos cuánto va a medir la longitud de "pixeles" hacia los lados
int endh = 70; // declaramos cuánto va a medir la longitud de "pixeles" en altura
int tmp = 0; // una variable donde va a guardar el conteo de movimientos
int led = 13; // indicamos el pin del led del arduino (por default es 13)
int step1 = 0; // bandera del proceso que va a ejecutar(mover mouse x/y dirección)
void setup() {
  //Serial.begin(9600); // opción de imprimir en el puerto serial
  pinMode(bot, INPUT); // Creamos el botón que va a controlar el proceso
  pinMode(led, OUTPUT); // prenderá el led 13 en caso de que se active el proceso
  digitalWrite(13, 0);  // empieza el led del arduino apagado
  Mouse.begin(); // llamamos llamar a las clase del mouse
}</p><p>void loop(){
  if(digitalRead(bot) == 1){ // si está activo el estado del botón, procede a trabajar
    digitalWrite(led, 1);  
    //Mouse.move(xDistance, yDistance, 0); // opcion de enviar las coordenadas al puerto serial
    //Serial.print(tmp);
    //Serial.print(",");
    //Serial.println(step1);
     // a base de banderas, indica la acción que va a ejecutar
    if(step1 == 0) Mouse.move(1, 0, 0); // mover uno a la derecha
    else if(step1 == 1) Mouse.move(0, 1, 0); // mover uno abajo
    else if(step1 == 2) Mouse.move(-1, 0, 0); // mover uno a la  izquierda
    else if(step1 == 3) Mouse.move(0, -1, 0); // mover uno arriba
    if((tmp >= endw) && (step1 == 0)){ // espera a que el contador TMP sea menor al ancho puesto, si lo cumple y la bandera es 0 (mover uno a la derecha) hace lo sigueinte:
      step1 = 1; // Cambia la bandera a 1 (mover abajo)
      tmp = 0; // Cambia el valor de la variable contador TMP a 0
    }else if((tmp >= endh) && (step1 == 1)){ // espera a que cumpla la condición similar a la anterior, solo que esta vez con la bandera en 1(mover abajo)
      step1 = 2; //  // Cambia la bandera a 2 (mover a la izquierda)
      tmp = 0;
    }else if((tmp >= endw) && (step1 == 2)){
      step1 = 3; // Cambia la bandera a 3 (mover hacia arriba)
      tmp = 0;
    }else if((tmp >= endh) && (step1 == 3)){
      step1 = 0;
      tmp = 0;
    }else tmp++; // la variable va a aumentar uno
    if((tmp == 50)||(tmp == 100)||(tmp == 90)||(tmp == 80)||(tmp == 85)){ // indicamos en que valores del contador va a precionar el boton izquierdo del mouse
      Mouse.press(MOUSE_LEFT); // mantiene precionado el botón izquierdo del mouse
      Mouse.release(MOUSE_LEFT); // ya no mantiene precionado el botón izquierdo del mouse
    }
  }else{
    digitalWrite(led, 0); // como no está activo, mantiene el led(arduino) apagado
  }
}</p>

Trabajando

11214074_835629889847975_2735256705644590699_n.jpg
Hackear juego Clicker Heroes con Arduino Micro
549377_835977349813229_993773504226458105_n.jpg
5587773e2e7fb67cc30001b3.jpeg

Una vez cargado nuestro sketch empezaremos a ver como nuestro mouse empieza con los clicks y moverse en una área de nuestra pantalla, ahora solo debemos iniciar nuestro juego y colocarlo en el área adecuada como se puede ver en el vídeo y empezara a generar monedas para nosotros :D.

Espero les sirva este pequeño truco para otros juegos, espero sus coemtarios

Hasta la próxima