HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Электроника и Фрикинг
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 08.08.2020, 13:12
elrock
Новичок
Регистрация: 07.08.2020
Сообщений: 1
С нами: 3035833

Репутация: 0
По умолчанию

Заглавие
Всем доброго времени суток, о 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-кодов



Точно также с помощью alt-кодов мы можем эмулировать нажатия клавиш английского, русского алфавита и всех необходимых символов независимо от текущей раскладки клавиатуры, осталось только модифицировать скетч под наши нужны. Дорабатывать скетч мы будем как для голой ардуинки, так и для Wifi Ducky.

Но сначала немного теории, поговорим о том как наша ардуинка эмулирует нажатия клавиш. В большинстве случаев делает она это с помощью базовой библиотеки Keyboard.h, которая по умолчанию уже встроена в Arduino IDE и подключается в самом начале скетча:

Код:


Код:
1| #include
Изучив документацию к библиотеке Keyboard.h выясняем, что она использует ASCII коды для "печатаемых" символов клавиатуры.



Нам же нужно найти какие коды соответствуют клавишам цифрового блока., чтобы эмулировать нажатия с помощью 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) в десятичной системе счисления.



Это и есть то что нам нужно, и как мы помним все значения ниже 128 обрабатываются как ASCII коды, поэтому не забываем прибавлять 136 к Usage ID (Dec).
Получившиеся значения от 225 до 234 и 219 (для NumLock) мы и будем использовать для написания скетча для ардуино.

В библиотеке Keyboard.h есть несколько основных функций которые эмулируют нажатия клавиш:

Код:


Код:
Keyboard.press(parameter)  #- нажатие и удержание клавиши
Keyboard.release(parameter)  #- завершает нажатие клавиши (отпускает клавишу)
Keyboard.write(parameter)  #- нажатие и сразу отпускание клавиши
Keyboard.releaseAll()  #- отпускает все нажатые Keyboard.press() клавиши.
В качестве параметра (parameter, кроме Keyboard.releaseAll() - у нее нет параметров) функции принимают коды клавиш о которых мы говорили выше (ASCII, Клавиши модификаторы и (USB HID Usage ID + 136)), от 0 до 256.

В итоге код который будет эмулировать нажатие клавиш клавиатуры с помощью Alt-кодов будет выглядеть следующим образом
Например для английской буквы n или ALT + 110 (смотрим таблицу Alt-кодов):

Код:


Код:
Keyboard.press(KEY_LEFT_ALT);  // зажимаем ALT
Keyboard.write(225);           // N1
Keyboard.write(225);           // N1
Keyboard.write(234);           // N0
Keyboard.releaseAll();         // отпускаем ALT
Да, многовато кода, 5 строк чтобы написать всего одну букву!
Получится довольно длинный скетч, но он повторяющийся и его можно немного оптимизировать. Такой код уже напечатает полное слово "notepad".

Код:


Код:
void altRun2(int a,int b)
{
  Keyboard.press(KEY_LEFT_ALT);
  Keyboard.write(a);
  Keyboard.write(b);
  Keyboard.releaseAll();
}

void altRun3(int a,int b, int c)
{
  Keyboard.press(KEY_LEFT_ALT);
  Keyboard.write(a);
  Keyboard.write(b);
  Keyboard.write(c);
  Keyboard.releaseAll();
}
void setup()
{
  Keyboard.begin();
  altRun3(225,225,234);
  altRun3(225,225,225);
  altRun3(225,225,230);
  altRun3(225,234,225);
  altRun3(225,225,226);
  altRun2(233,231);
  altRun3(225,234,234);
}
Конечно мы не будем все это писать вручную, в интернете можно найти много реализаций DuckyScript to Arduino code конвертера с открытым исходным кодом, я модифицировал одну из версий такого конвертера и добавил поддержку Alt-кодов.За основу взял ducky2arduino_stable от roothaxor.

Просто используйте стандартный синтаксисDuckyScript, а когда вам нужно сгенерировать скетч который будет эмулировать нажатия клавиш используяAlt-коды, поставьте галочкуActivate Alt-codes supportи замените STRING на ALTCODE

Модифицированный DuckyScript to Arduino Сode конвертер



Эти тестовые примеры запускают notepad и печатают Hello World!!!

С использованием STRING:

Код:


Код:
DELAY 3000
GUI r
DELAY 500
STRING notepad
DELAY 500
ENTER
DELAY 750
STRING Hello World!!!
ENTER
С использованиемALTCODE:

Код:


Код:
DELAY 3000
GUI r
DELAY 500
ALTCODE notepad
DELAY 500
ENTER
DELAY 750
ALTCODE Hello World!!!
ENTER
На выходе получаем вот такой скетч который эмулирует нажатия клавиш с помощью Alt-кодов, запускает notepad и пишет в нем Hello World!!!
И теперь он не зависит от раскладки клавиатуры, то чего мы и хотели!
Обратите внимание на вот эти строки.
Здесь мы повторно запускаем код после нажатия NumlocktypeKey(219) , на случай если цифровой блок был выключен:

Код:


Код:
void setup()
{
  run();
  typeKey(219);
  run();
}
Если вам не нужен повторный запуск просто оставьте один вызов функции run()

Код:


Код:
void setup()
{
  run();
}
Теперь займемся модификацией прошивки для WiFi Ducky.Для начала изучим прошивку для ардуино из статьи Делаем USB ducky и Wifi Ducky своими руками
Обратим внимание на блок команд отвечающих за обработку клавиш модификаторов в функции void Press()
Все что нам остается это дописать свой код, добавляющий обработку клавиш цифрового блока:

Код:


Код:
else if (b.equals("NUMLOCK"))Keyboard.press(219);
else if (b.equals("N9")) {Keyboard.press(233); Keyboard.release(233);}
else if (b.equals("N8")) {Keyboard.press(232); Keyboard.release(232);}
else if (b.equals("N7")) {Keyboard.press(231); Keyboard.release(231);}
else if (b.equals("N6")) {Keyboard.press(230); Keyboard.release(230);}
else if (b.equals("N5")) {Keyboard.press(229); Keyboard.release(229);}
else if (b.equals("N4")) {Keyboard.press(228); Keyboard.release(228);}
else if (b.equals("N3")) {Keyboard.press(227); Keyboard.release(227);}
else if (b.equals("N2")) {Keyboard.press(226); Keyboard.release(226);}
else if (b.equals("N1")) {Keyboard.press(225); Keyboard.release(225);}
else if (b.equals("N0")) {Keyboard.press(234); Keyboard.release(234);}
В итоге получаем такую прошивку:
Ей мы и будем прошивать ардуинку для WiFi Ducky.

СинтаксисDuckyScript для такой версии WiFi Ducky также будет немного отличаться, вместо STRINGнам нужно вводить символы как если бы мы нажимали последовательность Alt-кодов (см. таблицу Alt-кодов).

Например слово notepadтеперь будет выглядеть так:

Код:


Код:
ALT N1 N1 N0
ALT N1 N1 N1
ALT N1 N1 N6
ALT N1 N0 N1
ALT N1 N1 N2
ALT N9 N7
ALT N1 N0 N0
И чтобы облегчить задачу, я написал простенький конвертер.
Конвертер Alt-кодов

Вам всего лишь нужно подставить стоку которая шла после STRING в конвертер и на выходе получить последовательность Alt-кодов. Эту последовательность мы используем для написания полезной нагрузки для нашей модифицированной WiFi Ducky.
Не забываем про NUMLOCK, на случай если клавиши цифрового блока отключены.

Тестовый скрипт который открывает notepad и пишет в нем Hello World!!! будем выглядеть следующим образом:
Краткие выводы
Что мы в итоге получили? Не самый производительный вариант, в плане того что такие скрипты будут дольше выполнятся, оно и понятно, мы эмулируем нажатие трех - четырех клавиш вместо одной. Приходиться использовать дублирование кода на случай если клавиши цифрового блока отключены NumLock'ом. В сценариях использования BadUsb когда у нас есть физический доступ к компьютеру, иногда проще поменять раскладку.

Если у вас есть предложения по улучшению или вы знаете еще способы обойти проблему раскладок для BadUsd, делитесь идеями в обсуждении.
 
Ответить с цитированием
 



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.