Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Гайд Arduino Uno R3 — Делаем честную HID Mouse для обхода античитов

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
538
Реакции
14
Здарова, реверсеры. Сегодня разберем классический, но до сих пор рабочий метод аппаратной эмуляции мыши через Arduino Uno R3. Если вам надоело ловить баны за SendInput или переписывать драйверы под каждый патч EAC/BE, то этот вариант — мастхэв. Суть в том, что мы заставим Windows видеть в нашей ардуинке не COM-порт, а реальное HID-устройство.

Как это работает
На оригинальной Uno R3 (и на нормальных клонах типа Elegoo) стоят два чипа: ATmega328P (где крутится ваш код) и ATmega16U2 (отвечает за USB-связь). Обычно 16U2 работает как простой мост USB-to-Serial, но если залить в него кастомную прошивку через DFU, он превращается в полноценную мышь.

Для стабильной работы и отсутствия задержек будем использовать сетап из двух плат:
  1. HID Arduino — здесь живет прошивка мыши и логика проброса репортов.
  2. Bridge Arduino — принимает команды от Python через USB и пушит их в HID-плату по SoftwareSerial.

Схема подключения
Соединяем платы проводами:
  • Bridge Arduino (Pin 3) -> HID Arduino (RX Pin 0)
  • GND -> GND

Заливаем этот скетч через стандартную Arduino IDE. Он будет слушать входящие байты и формировать пакеты для мыши.
Код:
Expand Collapse Copy
struct {
  uint8_t buttons;
  int8_t x;
  int8_t y;
  int8_t wheel;
} mouseReport;

uint8_t nullReport[4] = { 0, 0, 0, 0 };

void setup() {
  Serial.begin(9600);
  delay(200);
}

void loop() {
  if (Serial.available() >= 4) {
    mouseReport.buttons = Serial.read();
    mouseReport.x = Serial.read();
    mouseReport.y = Serial.read();
    mouseReport.wheel = Serial.read();
    Serial.write((uint8_t *)&mouseReport, 4);
    Serial.write((uint8_t *)&nullReport, 4);
  }
}

Шаг 2: Шьем 16U2 (Превращаем в мышь)
Нужно перевести чип 16U2 в DFU-режим (замыкаем на секунду контакты RST и GND на разъеме ICSP возле USB-порта). После этого используем dfu-programmer:
Код:
Expand Collapse Copy
dfu-programmer atmega16u2 erase --force
dfu-programmer atmega16u2 flash Arduino-mouse.hex
dfu-programmer atmega16u2 reset
Прошивку Arduino-mouse.hex берем из репозитория harlequin-tech/arduino-usb на GitHub. Переподключаем девайс — теперь в диспетчере устройств должна появиться HID-совместимая мышь.

Эта плата — посредник. Она нужна, чтобы не «пачкать» HID-контроллер лишними данными от Python.
Код:
Expand Collapse Copy
#include <SoftwareSerial.h>
SoftwareSerial toHID(2, 3); // RX=2, TX=3

void setup() {
  Serial.begin(9600);
  toHID.begin(9600);
}

byte buf[4];
int count = 0;

void loop() {
  while (Serial.available()) {
    buf[count] = Serial.read();
    count++;
    if (count >= 4) {
      toHID.write(buf, 4);
      count = 0;
    }
  }
}

Шаг 4: Управление через Python
Теперь можно слать команды с любого ПК (даже со второго, если хотите макс. сейва).
Код:
Expand Collapse Copy
import serial
import time

# Укажите свой COM-порт бридж-ардуины
ser = serial.Serial('COM21', 9600) 
time.sleep(2)

def move(x, y):
    x = x & 0xFF
    y = y & 0xFF
    ser.write(bytes([0, x, y, 0]))

def click_left():
    ser.write(bytes([1, 0, 0, 0]))
    time.sleep(0.1)
    ser.write(bytes([0, 0, 0, 0]))

Итог
Метод рабочий, Windows видит девайс как легитный HID. Главный плюс — полная независимость от софта на основном ПК. Если юзать второй комп для анализа картинки или обсчета аима, детектов по вводу быть не должно. Конечно, Vanguard умеет чекать специфические дескрипторы USB, но для большинства античитов это — «зеленый свет».

Делитесь в треде, кто уже пробовал менять дескрипторы прошивки для маскировки под брендовые девайсы.
 
Назад
Сверху Снизу