![]() |
Заглавие Всем доброго времени суток, о BadUsb, Usb Rubber Ducky и о том, как самому сделать аналог данного устройства написано уже много статей.В этой же статье мы рассмотрим решение проблемы BadUsb при работе с разными раскладками клавиатуры. В качестве инструкции по созданию своего BadUsb будем использовать статью размещенную здесь, на античат : Делаем USB ducky и Wifi Ducky своими руками В качествеBadUsb, как и в статье используем Arduino Micro Pro. О чем речь Если при выполнении скрипта загруженного на наш BadUsb в операционной системе выставлена русская раскладка, возникает проблема, все команды вводятся в русской раскладке и наш скрипт становится бесполезным.Недолгий поиск в гугле, наводит нас на одно решение, использоватьAlt-коды. Alt-коды в Windows иногда используется для ввода символов, которые отсутствуют на клавиатуре. Например, зажимаем ALT и удерживая набираем цифры на цифровом блоке Numpad 1 и 3, затем отпускаем ALT и получается вот такой символ ноты ♪ и т.д. Вот неполная таблица Alt-кодов, полную таблицу можно посмотреть по ссылке: Полная таблица Alt-кодов https://forum.antichat.xyz/attachmen...65d810fc6c.png Точно также с помощью alt-кодов мы можем эмулировать нажатия клавиш английского, русского алфавита и всех необходимых символов независимо от текущей раскладки клавиатуры, осталось только модифицировать скетч под наши нужны. Дорабатывать скетч мы будем как для голой ардуинки, так и для Wifi Ducky. Но сначала немного теории, поговорим о том как наша ардуинка эмулирует нажатия клавиш. В большинстве случаев делает она это с помощью базовой библиотеки Keyboard.h, которая по умолчанию уже встроена в Arduino IDE и подключается в самом начале скетча: Код: Код:
1| #includehttps://forum.antichat.xyz/attachmen...05528da6d1.png Нам же нужно найти какие коды соответствуют клавишам цифрового блока., чтобы эмулировать нажатия с помощью Alt-кодов. Итак, первые 128 значений (от 0 до 127) как мы выяснили, "печатаемые", обрабатываются как ASCII код и переводятся в коды клавиш. Следующие 8 (от 128 до 135) - это клавиши модификаторы (Ctrl, Shift, Alt и и т.д.). Полный список клавиш модификаторов можно посмотреть в документации к библиотеке Keyboard.h Keyboard Modifiers - Arduino Reference. Далее из всего что превышает 135 (но не больше 256, поскольку один байт может содержать значения до 256) вычитается 136 и используется как код ключа для клавиатуры согласно USB HID спецификациям. Здесь по ссылке вы можете найти списки кодов USB HID для различных устройств ввода-вывода USB HID Usage Tables (pdf документ). Список кодов конкретно для клавиатуры, начиная со стр. 53 и находим в таблице клавиши цифрового блока и их Usege ID (Dec) в десятичной системе счисления. https://forum.antichat.xyz/attachmen...7b672b72dc.png Это и есть то что нам нужно, и как мы помним все значения ниже 128 обрабатываются как ASCII коды, поэтому не забываем прибавлять 136 к Usage ID (Dec). Получившиеся значения от 225 до 234 и 219 (для NumLock) мы и будем использовать для написания скетча для ардуино. В библиотеке Keyboard.h есть несколько основных функций которые эмулируют нажатия клавиш: Код: Код:
Keyboard.press(parameter) #- нажатие и удержание клавишиВ итоге код который будет эмулировать нажатие клавиш клавиатуры с помощью Alt-кодов будет выглядеть следующим образом Например для английской буквы n или ALT + 110 (смотрим таблицу Alt-кодов): Код: Код:
Keyboard.press(KEY_LEFT_ALT); // зажимаем ALTПолучится довольно длинный скетч, но он повторяющийся и его можно немного оптимизировать. Такой код уже напечатает полное слово "notepad". Код: Код:
void altRun2(int a,int b)Просто используйте стандартный синтаксисDuckyScript, а когда вам нужно сгенерировать скетч который будет эмулировать нажатия клавиш используяAlt-коды, поставьте галочкуActivate Alt-codes supportи замените STRING на ALTCODE Модифицированный DuckyScript to Arduino Сode конвертер https://forum.antichat.xyz/attachmen...96a67071b4.png Эти тестовые примеры запускают notepad и печатают Hello World!!! С использованием STRING: Код: Код:
DELAY 3000Код: Код:
DELAY 3000И теперь он не зависит от раскладки клавиатуры, то чего мы и хотели! Обратите внимание на вот эти строки. Здесь мы повторно запускаем код после нажатия NumlocktypeKey(219) , на случай если цифровой блок был выключен: Код: Код:
void setup()Код: Код:
void setup()Обратим внимание на блок команд отвечающих за обработку клавиш модификаторов в функции void Press() Все что нам остается это дописать свой код, добавляющий обработку клавиш цифрового блока: Код: Код:
else if (b.equals("NUMLOCK"))Keyboard.press(219);Ей мы и будем прошивать ардуинку для WiFi Ducky. СинтаксисDuckyScript для такой версии WiFi Ducky также будет немного отличаться, вместо STRINGнам нужно вводить символы как если бы мы нажимали последовательность Alt-кодов (см. таблицу Alt-кодов). Например слово notepadтеперь будет выглядеть так: Код: Код:
ALT N1 N1 N0Конвертер Alt-кодов Вам всего лишь нужно подставить стоку которая шла после STRING в конвертер и на выходе получить последовательность Alt-кодов. Эту последовательность мы используем для написания полезной нагрузки для нашей модифицированной WiFi Ducky. Не забываем про NUMLOCK, на случай если клавиши цифрового блока отключены. Тестовый скрипт который открывает notepad и пишет в нем Hello World!!! будем выглядеть следующим образом: Краткие выводы Что мы в итоге получили? Не самый производительный вариант, в плане того что такие скрипты будут дольше выполнятся, оно и понятно, мы эмулируем нажатие трех - четырех клавиш вместо одной. Приходиться использовать дублирование кода на случай если клавиши цифрового блока отключены NumLock'ом. В сценариях использования BadUsb когда у нас есть физический доступ к компьютеру, иногда проще поменять раскладку.Если у вас есть предложения по улучшению или вы знаете еще способы обойти проблему раскладок для BadUsd, делитесь идеями в обсуждении. |
Вот бы такое решение для USB RUBBER Ducky (от Hack5).
|
| Время: 13:43 |