На любом компьютере, оставленном без присмотра, можно подключить правильное 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 для автономности.