June 8, 2025

Ducky script / Rubber ducky

Ducky Script — это скриптовый язык программирования, предназначенный для преобразования последовательности команд в действия, имитирующие нажатия клавиш на клавиатуре.


Этот язык похож на AutoHotKey для Windows, но при этом Ducky Script гораздо более узкоспециализирован и предназначен исключительно для работы с клавишными вводами, а не для создания полноценных скриптов с более сложной логикой.


Главная особенность Ducky Script заключается в том, что его можно загрузить на устройства типа Rubber Ducky, которые представляют собой USB-устройства, способные воспроизводить команды, как если бы это были физические нажатия клавиш.


Также с помощью Ducky Script реализуется функционал BadUSB на устройствах типа M5Stick, T-Embed и Flipper Zero.

Где купить?

Самый популярный и доступный вариант — это флешка Rubber Ducky, которая, несмотря на внешний вид флеш-накопителя, не является таковой.


Это перепрограммируемое USB-устройство, которое используется для выполнения скриптов, написанных на языке Ducky Script. Модели Rubber Ducky можно найти на различных торговых платформах.

Синтаксис

Язык Ducky Script достаточно прост и его можно выучить за короткое время, например, за 30 минут, если есть желание разобраться. Ниже приведён пример скриптов для двух операционных систем:

Пример для Windows:

REM A slightly more advanced «Hello, World!» for Windows
DELAY 3000
REM Open the Run dialog
WINDOWS r
DELAY 1000
REM Open PowerShell with our message
STRING powershell «echo 'Hello, World! '; pause»
ENTER

Пример для macOS:

REM A slightly more advanced "Hello, World!" for macOS
DELAY 3000
REM Open Spotlight Search
COMMAND SPACE
REM Open the text editor
STRING TextEdit
ENTER
DELAY 2000
COMMAND n
DELAY 2000
STRING echo Hello, World!


В этих примерах показано, как вывести текст “Hello, World!” на экране в PowerShell (для Windows) и в текстовом редакторе TextEdit (для macOS).

Команды и их описание

Ducky Script использует несколько базовых команд для взаимодействия с операционной системой:

1. DELAY [миллисекунды]


• Задержка перед выполнением следующей команды. Например, DELAY 1000 — задержка на 1 секунду.

2. GUI [клавиша]


• Нажатие клавиши Windows (GUI). Например, GUI r откроет меню “Выполнить” через комбинацию Win+R.

3. STRING [текст]


• Ввод строки текста. Например, STRING Hello World напишет “Hello World”.

4. ENTER


• Нажатие клавиши “Enter”.

5. CONTROL [клавиша]


• Нажатие клавиши с модификатором Control. Например, CONTROL a выделит весь текст (Ctrl+A).

6. ALT [клавиша]


• Нажатие клавиши с модификатором Alt. Например, ALT F4 закроет активное окно (Alt+F4).

7. SHIFT [клавиша]


• Нажатие клавиши с модификатором Shift. Например, SHIFT 2 напечатает знак @ (Shift+2).

8. REPEAT [кол-во повторений]


• Повторение предыдущей команды заданное количество раз. Например, REPEAT 5 повторит последнюю команду 5 раз.

9. WAIT [секунды]


• Задержка в секундах. Например, WAIT 2 подождёт 2 секунды.

10. REM [комментарий]


• Комментарий в коде, который игнорируется во время выполнения. Например, REM This is a comment.

11. LED [1/0]


• Управление светодиодом на устройстве. LED 1 — включить, LED 0 — выключить.

12. WINDOWS [клавиша]


• Альтернатива команде GUI для выполнения действий с клавишей Windows. Например, WINDOWS d покажет рабочий стол (Win+D).

13. MENU или APP (Клавиша приложения):

Эмулирует клавишу приложения, которую иногда называют клавишей меню или клавишей контекстного меню. В системах Windows это похоже на комбинацию клавиш SHIFT F10, подобное щелчку правой кнопкой мыши.

Пример:
GUI d
MENU
STRING v
STRING d

14. Клавиши стрелок:


DOWNARROW или DOWN - вниз
LEFTARROW или LEFT - влево
RIGHTARROW или RIGHT - вправо
UPARROW или UP - вверх

15. Кнопки мыши:


• LMOUSE: Нажатие ЛЕВОЙ кнопки мыши
• RMOUSE: Нажатие ПРАВОЙ кнопки мыши
• MMOUSE: Нажатие СРЕДНЕЙ кнопки мыши.

Вы также можете перемещать курсор мыши по пикселям, ориентируясь на X и Y (горизонтать и вертикаль):

Честно говоря, намного проще, надёжнее и быстрее управлять клавишами.
Более того, неизвестно, в каком положении будет находиться курсор изначально.

16. SWCOLOR (Изменения цвета клавиш):


Вы можете изменить цвет клавиши на лету с помощью SWCOLOR —>
Чтобы изменить цвет текущей клавиши , используйте синтаксис SWCOLOR R G B:


SWCOLOR 128 0 0


Чтобы изменить цвет определенной клавиши , используйте SWCOLOR_n R G B:


SWCOLOR_1 0 128 0


Значение R G B должно быть между 0 и 255.


0 выключено, 255 максимальное.


17. DP_SLEEP (Сон):


Вы можете использовать команду DP_SLEEP, чтобы заставить duckyPad заснуть.
В таком случае подсветка и экран будут выключены.

18. LOOP (Создание циклов):


Эта команда позволяет назначить разные действия одной и той же клавише.
Вы можете использовать его для переключения / циклического выполнения нескольких действий, например:


LOOP0:
STRING first action
ENTER


LOOP1:
STRING second action
ENTER


LOOP2:
STRING third action
ENTER


• Поддерживается до 10 действий (LOOP0 - LOOP9).


• Когда вы нажимаете клавишу, счетчик увеличивается, и скрипт в соответствующем цикле выполняется.


• Эта команда еще не поддерживается приложением test-run для ПК.


• Эта команда является экспериментальной, если вы столкнетесь с какими-либо ошибками, дайте разработчику знать!

Конвертация скриптов:

Учитывая, что такие устройства как LilyGo разработаны на базе Arduino - скрипты придётся компилировать в полноценный язык программирования. Использовать его достаточно просто, открываем файл HTML:

В верхнюю строку вводим скрипт в виде DuckyScript, а в нижней получаем результат:

(Ниже, под статьёй, оставлю файл)


Примечания по синтаксису


• Клавиши в командах обозначаются маленькими латинскими буквами.
• Аргументы (например, текст или числа) пишутся через пробел без дополнительных символов.