Flipper-демиург: ставим софт на macOS через JS для пентестеров
- воскресенье, 28 июня 2026 г. в 00:00:12
Когда речь заходит о Flipper Zero, многие вспоминают RFID, NFC, Sub-GHz. Но одна из самых интересных возможностей устройства — это JavaScript-движок и модуль BadUSB, который позволяет превратить Flipper в программируемую USB-клавиатуру.
В этой статье разберём небольшой, но показательный скрипт, который автоматически устанавливает набор инструментов для пентеста(или другого ПО) на macOS через Homebrew. И посмотрим, почему JavaScript на Flipper значительно интереснее классического DuckyScript.
Традиционные BadUSB-сценарии обычно пишутся на DuckyScript:
DELAY 1000 GUI SPACE DELAY 500 STRING terminal ENTER STRING brew install nmap ENTER
Подход рабочий, но чаще упирается в ограничения:
нет циклов;
нет условий;
нет модулей;
сложно обрабатывать состояния;
код плохо масштабируется.
Во Flipper доступен JavaScript API, который позволяет писать полноценную логику:
Например:
for (let i = 0; i < apps.length; i++) { ... }
По сути мы получаем миниатюрный сценарный движок прямо внутри устройства.
Начинается всё с подключения модулей, где первый отвечает за уведомления Flipper, а второй — за эмуляцию HID-устройства:
let notify = require("notification"); let badusb = require("badusb");
Следом задаётся список программ:
const apps = [ 'nmap', 'metasploit-framework', 'hydra' ];
Список можно расширять любым количеством пакетов.
Следующий блок задаёт USB-идентификаторы:
badusb.setup({ vid: 0x05AC, pid: 0x026C, mfr: "Apple", product: "Keyboard" });
Здесь используются VID и PID производителя Apple(гуглятся или смотрятся в настройках).
После короткой индикации:
notify.blink("green", "short");
скрипт проверяет наличие соединения:
if (badusb.isConnected()) {
Это уже преимущество JavaScript перед DuckyScript. Можно выполнять действия только при наличии активного USB-соединения.
Далее происходит открытие Spotlight(Command + Space):
badusb.press("GUI", "SPACE");
После небольшой паузы вводится:
badusb.print("iterm", 100); badusb.press("ENTER");
Скрипт ищет iTerm и запускает его.
При желании можно заменить на:
badusb.print("terminal");
Самая интересная часть, так как больше всего показывается превосходство над DuckyScript:
for (let i = 0; i < apps.length; i++) { badusb.println("brew install " + apps[i], 100); delay(4000); }
На каждую программу, cоздаётся команда установки через brew:
brew install nmap brew install metasploit-framework brew install hydra
То есть список пакетов превращается в набор последовательных установок.
Например:
const apps = [ 'nmap', 'masscan', 'sqlmap', 'john-jumbo' ];
Таким образом один и тот же сценарий можно использовать для разных ролей:
пентестер;
DevOps-инженер;
разработчик;
аналитик безопасности.
После завершения цикла:
notify.success();
Flipper отображает успешное выполнение.
Дополнительно в терминал выводится сообщение:
echo 'Installation complete!'
Чаще демонстрации BadUSB сводятся к “взлом умный холодильник за 5 секунд”. Но, как по мне, гораздо интереснее сценарии автоматизации(не только просто установок приложений).
При выдаче нового ноутбука специалисту:
const apps = [ 'nmap', 'hydra', 'metasploit-framework', 'wireshark', 'sqlmap' ];
const apps = [ 'terraform', 'ansible', 'kubectl', 'helm' ];
У исходного скрипта есть несколько ограничений.
Если Homebrew не установлен:
brew: command not found
весь сценарий остановится.
Логичнее сначала выполнить проверку:
which brew
и при необходимости установить пакетный менеджер.
Сейчас используется:
delay(4000);
Но установка приложение, особенно metasploit, может занимать минуты.
Фиксированные паузы работают не всегда надёжно.
Сценарий предполагает, что:
пользователь авторизован;
iTerm установлен;
Homebrew присутствует;
сеть работает.
Идея этого примера не в установке Nmap или Hydra.
Интереснее другое: Flipper превращается из “умной флешки с макросами” в полноценную платформу автоматизации.
Появляются:
циклы;
условия;
работа с модулями;
управление логикой выполнения;
интерактивная обратная связь через устройство.
Поэтому, как по мне, JavaScript-сценарии для Flipper выглядят перспективнее классических DuckyScript-пейлоадов.
Рассмотренный скрипт занимает всего несколько десятков строк, но хорошо показывает эволюцию BadUSB-подхода.
Flipper уже не просто отправляет заранее записанную последовательность нажатий клавиш. Он принимает решения, проверяет состояние подключения, управляет логикой выполнения и автоматизирует рутинные действия.
Исходный код, можно посмотреть здесь: https://gitlab.com/DuDlick/flipper-auto-installer/-/blob/main/download_all.js?ref_type=heads