На любом компьютере, оставленном без присмотра, можно подключить правильное USB-устройство и выполнить нужные команды. Делать это вручную долго и неудобно. Проще собрать небольшой гаджет, который маскируется под клавиатуру и автоматически вводит команды.
Компьютер полностью доверяет подключённым устройствам. Если устройство представляется клавиатурой, система примет его за неё и будет обрабатывать передаваемые команды. Устройство работает по протоколу HID (Human Interface Device) — это стандартный интерфейс для клавиатур, мышей и игровых контроллеров.
В этом проекте соберём такое устройство с поддержкой скриптов из Flipper Zero и USB Rubber Ducky. Сначала посмотрим на существующие варианты.
Готовые решения
Flipper Zero
Компактный и функциональный гаджет, но имеет недостатки для задачи внедрения кода. Встроенная защита антивируса блокирует стандартный API, и обойти её без собственного интерпретатора сложно. К тому же цена высокая. У Flipper Zero есть преимущество — он вводит команды намного быстрее других устройств, но в целом для этого проекта вариант был отклонен.
USB Rubber Ducky
Устройство от Hak5 хорошо справляется с задачей. Поддерживает определение версии операционной системы и выполнение нужного кода для Windows, macOS или отключение при несоответствии условиям. Но есть проблема: изменить встроенный скрипт невозможно без подключения к компьютеру и переписи файла. Стоимость — от 100 до 230 долларов плюс доставка, что делает устройство дорогим для большинства.
Альтернативные платформы
Arduino
Arduino работает хорошо, но подходят не все модели. При смене программы придётся переписывать прошивку с помощью программатора. Для хранения нескольких скриптов понадобится модуль SD-карты, что увеличивает стоимость и размер. Активное сообщество создало много библиотек, но язык программирования C++ требует переучивания.
ESP8266 и ESP32
По сути то же самое, что Arduino, но с встроенным Wi-Fi. Плюс в том, что можно создать веб-сервер для управления с телефона. Минус — стандартные платы значительно больше по размеру.
Digispark
Самое компактное решение, но спорное. Плата очень мала, поэтому места для дополнительных модулей быстро кончается. У неё есть встроенный штекер USB Type-A, что удобнее, чем Type-C или MicroUSB на других вариантах. Но при использовании прошивка устанавливалась нестабильно, а скрипты работали медленно.
Выбор компонентов
Для проекта возьмём плату YD-RP2040. Она дешевле оригинального Raspberry Pi Pico, а памяти в ней больше — 16 Мбайт вместо 2 Мбайт. OLED-дисплей 128 × 64 на контроллере SSD1306 дешёв и почти совпадает по ширине с платой. Добавим пару кнопок, макетную плату, переключатель и аккумулятор LiPo для автономности.
